Skip to main content

Academic web application · Vulnerability management

PatchStash

~2 min read
Full-stack development, data model, security controls
Academic web application

A Symfony application for tracking software assets, vulnerabilities, ownership, remediation status, and patch cycles in one structured workflow.

SymfonyPHPDoctrineVulnerability Management
GitHub preview for the PatchStash vulnerability tracking application

Remediation workflow

Keep findings connected to action

  1. 1

    Asset inventory

    Product, version, ownership

  2. 2

    CIRCL CVE scan

    Query and version matching

  3. 3

    Normalize and deduplicate

    CVE identity, CVSS, severity

  4. 4

    Role-aware remediation

    Triage, assignment, patch cycle

  5. 5

    Report and verify

    Export, review, close

Swipe horizontally →

Implementation snapshot

Framework

Symfony 7.3 · PHP 8.2

Intelligence

CIRCL CVE API ingestion

Scoring

CVSS v3.1, v3.0 and v2

Access model

4 operational roles

Problem statement

A vulnerability list is not a remediation process. PatchStash is designed to keep findings connected to the affected software, responsible users, patch cycle, supporting reports, and final status.

Domain model

Doctrine entities preserve the relationships needed to move from inventory to closure.

  • Projects provide business context for assets and reports
  • Assets and software modules describe what is deployed and which version is affected
  • Vulnerabilities retain CVE identity, severity, evidence, and remediation state
  • Patch cycles group planned corrective work instead of treating findings as isolated tickets
  • Users, permissions, reports, and exports support ownership and review

CVE discovery and normalization

A console-driven scanner queries the CIRCL CVE API for each inventoried software product. It handles multiple response shapes, matches affected versions from structured CNA data and textual ranges, extracts CVSS 3.1, 3.0, or 2.0 metrics, maps scores into severity bands, and deduplicates by CVE plus asset before persistence.

Authorization model

Symfony Security provides form login, password hashing, CSRF protection, and route-level boundaries. Admin, Project Manager, Operator, and Auditor roles receive distinct dashboards; a permission service resolves finer-grained actions, while administrative controllers enforce explicit ROLE_ADMIN checks.

Implementation and trade-offs

The stack uses PHP 8.2, Symfony 7.3, Doctrine migrations, Twig, UX Turbo, Stimulus, validation, and PHPUnit. Keeping ingestion behind a repeatable command makes the scan observable and schedulable, while timeout and malformed-response handling prevent an external intelligence feed from breaking the core inventory workflow.