diff --git a/docs/architecture-diagram.md b/docs/architecture-diagram.md new file mode 100644 index 000000000..3fad529e7 --- /dev/null +++ b/docs/architecture-diagram.md @@ -0,0 +1,399 @@ +# CVE Services Architecture Diagram + +This document describes the architecture of CVE Services, the CVE Program's automated tooling for CVE ID reservation, CVE Record publication, and user management. It is maintained by the [Automation Working Group (AWG)](https://github.com/CVEProject/automation-working-group). + +## Table of Contents + +- [CVE Program Automation Support System (CPASS)](#cve-program-automation-support-system-cpass) + - [CPASS Data Flow Summary](#cpass-data-flow-summary) +- [High-Level Architecture Overview](#high-level-architecture-overview) +- [Component Descriptions](#component-descriptions) + - [CVE Services Core Components](#cve-services-core-components) + - [CVE Services Clients](#cve-services-clients) + - [Community-Developed Tools](#community-developed-tools) + - [Data & Schema](#data--schema) + - [Environments](#environments) +- [CVE Record Workflow (Sequence)](#cve-record-workflow-sequence) +- [ADP Workflow](#adp-workflow) + - [Key Differences](#key-differences) +- [Organizational Roles](#organizational-roles) +- [Additional Resources](#additional-resources) + +## CVE Program Automation Support System (CPASS) + +The CPASS diagram shows the broad end-to-end data flow of vulnerability information through the CVE Program. + +```mermaid +--- +title: CVE Program Automation Support System (CPASS) — End-to-End Data Flow +--- + +flowchart LR + + subgraph Vulnerability_Data_Ingress + A[IT Product Vendors / Vulnerability Researchers] + B[CNAs / ADPs] + end + + subgraph CVE_Services ["CVE Services (REST API)"] + C[CVE ID Reservation - IDR] + D[Record Submission Upload - RSUS] + E[Authorized Data Publishing] + end + + subgraph Storage + F[(CVE Record Repository - GitHub)] + end + + subgraph Access ["Data Access (conceptual)"] + H[CVE Program Website] + I[CVE Repository Search GUI] + end + + A --> B + B --> C + B --> D + C --> F + D --> F + E --> F + + F <-.-> H + F <-.-> I + + B --> E + + +``` + +### CPASS Data Flow Summary + +| Stage | Components | Description | +|---|---|---| +| **Vulnerability Data Ingress** | IT Product Vendors, Vulnerability Researchers → CNAs / ADPs | Vulnerabilities are discovered and reported to authorized CVE Numbering Authorities or Authorized Data Publishers for processing. | +| **CVE Services** | IDR, RSUS, Authorized Data Publishing | CNAs reserve CVE IDs, submit structured vulnerability records, and publish them through the authorized data publishing pipeline. | +| **Storage** | CVE Record Repository | All validated CVE Records are stored in the canonical repository ([cvelistV5](https://github.com/CVEProject/cvelistV5)). | +| **Access** | Open Search (Search GUI), JSON CVE Records, CVE Program Website, General Public | CVE data is distributed as machine-readable JSON records and made searchable via the CVE Program website for the general public. | + +[↑ Back to Table of Contents](#table-of-contents) + +## High-Level Architecture Overview + +The following diagram expands on the CPASS view above, showing the detailed internal architecture of CVE Services including the API layer, clients, authentication, and environments. + +```mermaid +--- +title: CVE Services High Level Architecture +--- + +graph TB + subgraph Actors + CNA["CNA Personnel
(Authenticated Users)"] + OA["Organizational
Administrators (OAs)"] + ADP["Authorized Data
Publishers (ADPs)"] + SEC["CVE Secretariat"] + end + + subgraph Clients ["CVE Services Clients"] + VG["Vulnogram
(Web App)"] + CC["cveClient
(Web App)"] + CL["cvelib
(CLI / Library)"] + CUSTOM["Custom / Build-
Your-Own Client"] + end + + subgraph API ["CVE Services API"] + direction TB + PROD_API["Production API
cveawg.mitre.org/api"] + TEST_API["Test API
cveawg-test.mitre.org/api"] + end + + subgraph CoreServices ["CVE Services Core Components"] + direction TB + IDR["CVE ID Reservation
(IDR) Service"] + RSUS["CVE Record Submission
& Upload Service (RSUS)"] + UR["CVE Services
User Registry"] + end + + subgraph DataStores ["Data & Schema"] + direction TB + SCHEMA["CVE Record Format
(JSON Schema v5.x)
github.com/CVEProject/cve-schema"] + CVELIST["CVE List Repository
(cvelistV5)
github.com/CVEProject/cvelistV5"] + end + + subgraph Publication ["Public-Facing"] + direction TB + CVEORG["cve.org
(Production Website)"] + TESTORG["test.cve.org
(Test Website)"] + end + + CNA --> VG + CNA --> CC + CNA --> CL + CNA --> CUSTOM + OA --> VG + OA --> CC + OA --> CL + ADP --> CUSTOM + SEC --> PROD_API + + VG --> PROD_API + VG --> TEST_API + CC --> PROD_API + CC --> TEST_API + CL --> PROD_API + CL --> TEST_API + CUSTOM --> PROD_API + CUSTOM --> TEST_API + + PROD_API --> IDR + PROD_API --> RSUS + PROD_API --> UR + TEST_API --> IDR + TEST_API --> RSUS + TEST_API --> UR + + RSUS -- "Publish / Update
CVE Records" --> CVELIST + RSUS -- "Validates against" --> SCHEMA + UR -- "Authenticates &
manages users" --> IDR + UR -- "Authenticates &
manages users" --> RSUS + + CVELIST -- "Hourly publish
cycle" --> CVEORG + CVELIST -- "Test data" --> TESTORG + + %% Color tiers + style Actors fill:#F9D7FA,stroke:#F9D7FA,stroke-width:2px + style Clients fill:#F9D7FA,stroke:#F9D7FA,stroke-width:2px + style API fill:#FAF9D7,stroke:#FAF9D7,stroke-width:2px + style CoreServices fill:#FAF9D7,stroke:#FAF9D7,stroke-width:2px + style DataStores fill:#D7FAF9,stroke:#D7FAF9,stroke-width:2px + style Publication fill:#D7FAF9,stroke:#D7FAF9,stroke-width:2px +``` + +[↑ Back to Table of Contents](#table-of-contents) + +## Component Descriptions + +### CVE Services Core Components + +| Component | Description | +|---|---| +| **CVE ID Reservation (IDR) Service** | Provides direct and on-demand CVE ID reservations. CNAs can reserve any number of CVE IDs, in sequential or non-sequential order. | +| **CVE Record Submission & Upload Service (RSUS)** | Allows CNAs to populate details of a CVE Record, submit a CVE Record for publication on the CVE List, and update CVE Records on-demand. | +| **CVE Services User Registry** | Authenticates and manages the users of the services for CNA organizations. Each user authenticates with a User ID, CNA Short Name, and API Secret. | + +> [!IMPORTANT] +> The CVE Secretariat (currently [The MITRE Corporation](https://www.mitre.org/)) operates with elevated privileges across all CVE Services components. Unlike CNAs and ADPs — who can only manage their own CVE Records and user accounts — the Secretariat can: +> - **Cross-CNA Record Management**: View, update, or reject CVE Records owned by any CNA, for quality assurance, corrections, or policy enforcement +> - **User & Organization Administration**: Create, modify, or deactivate CNA organizations and Organizational Administrator (OA) accounts across the entire CVE Services User Registry +> - **System-Wide CVE ID Management**: Reserve, reassign, or manage CVE IDs across all CNA scopes, including handling disputes or transfers between CNAs. +> - **Infrastructure Operations**: Manage the CVE Services API deployments (production and test), schema updates, and the publication pipeline to cve.org. + +### CVE Services Clients + +| Client | Type | Description | +|---|---|---| +| **[Vulnogram](https://vulnogram.github.io/)** | Web Application | A robust CVE Record editor/submission web application. Can be downloaded, installed as a server, or accessed via a website. Supports user account management. | +| **[cveClient](https://github.com/CERTCC/cveClient)** | Web Application | A CVE Record editor/submission tool that simplifies the creation and submission of CVE Records. Can be downloaded as a server or accessed via a website. | +| **[cvelib](https://github.com/RedHatProductSecurity/cvelib)** | CLI / Library | A Python library and command line interface for the CVE Services API. Can be integrated into existing vulnerability management infrastructure or used stand-alone. | +| **Custom Client** | Any | CNAs may build their own client using the [CVE Services API documentation](https://cveawg.mitre.org/api-docs/). | + +### Community-Developed Tools + +| Tool | Description | +|---|---| +| **[cvelint](https://github.com/mprpic/cvelint)** | CLI tool that validates CVE Records for possible errors not enforceable by the schema or validated by CVE Services. | +| **[CVE CNA Bot](https://github.com/marketplace/actions/cve-cna-bot)** | GitHub Action that validates CVE JSON records and optionally submits them to the CVE RSUS service. | + +### Data & Schema + +| Resource | Description | +|---|---| +| **[CVE Record Format (cve-schema)](https://github.com/CVEProject/cve-schema)** | The JSON schema defining the structure of CVE Records (currently v5.2.0). Maintained by the CVE Quality Working Group (QWG). | +| **[CVE List (cvelistV5)](https://github.com/CVEProject/cvelistV5)** | The authoritative repository of published CVE Records in CVE Record Format. | + +> [!NOTE] +> To search existing CVE Records, visit cve.org or download bulk data from the [cvelistV5 repository](https://github.com/CVEProject/cvelistV5). + +### Environments + +| Environment | API Endpoint | Website | Notes | +|---|---|---|---| +| **Production** | `https://cveawg.mitre.org/api` | [CVE.ORG](https://www.cve.org/) | Published content is immediately public. | +| **Test** | `https://cveawg-test.mitre.org/api` | [TEST.CVE.ORG](https://test.cve.org/) | All content is public — use fake data only. Separate credentials required. | + +> [!NOTE] +> Individual non-credentialed users cannot directly use CVE Services. It is intended for use by authorized CNAs. + +[↑ Back to Table of Contents](#table-of-contents) + +## CVE Record Workflow (Sequence) + +```mermaid +--- +title: CVE Record Flow +--- + +sequenceDiagram + participant CNA as CNA User + participant Client as CVE Services Client + participant API as CVE Services API + participant IDR as IDR Service + participant UR as User Registry + participant RSUS as RSUS + participant Schema as CVE Record Format Schema + participant CVEList as CVE List (cvelistV5) + participant Web as cve.org + + CNA->>Client: Authenticate (User ID, CNA Short Name, API Secret) + Client->>API: POST /authenticate + API->>UR: Validate credentials + UR-->>API: Auth token + API-->>Client: Auth token + + Note over CNA,Client: Step 1: Reserve CVE ID(s) + CNA->>Client: Request CVE ID reservation + Client->>API: POST /cve-id (with auth token) + API->>IDR: Reserve ID(s) + IDR-->>API: CVE ID(s) (RESERVED state) + API-->>Client: CVE ID(s) + Client-->>CNA: CVE ID(s) confirmed + + Note over CNA,Client: Step 2: Populate & Submit CVE Record + CNA->>Client: Create/edit CVE Record content + Client->>API: POST /cve/{id}/cna (CNA Container) + API->>RSUS: Validate & store record + RSUS->>Schema: Validate against CVE Record Format v5.x + Schema-->>RSUS: Validation result + RSUS-->>API: Record accepted (PUBLISHED state) + API-->>Client: Success + Client-->>CNA: Record published + + Note over CVEList,Web: Step 3: Publication to cve.org + RSUS->>CVEList: Commit record to cvelistV5 + CVEList->>Web: Hourly publish cycle + Web-->>Web: Record visible on cve.org + + Note over CNA,Client: (Optional) Step 4: Update CVE Record + CNA->>Client: Edit existing CVE Record + Client->>API: PUT /cve/{id}/cna (updated CNA Container) + API->>RSUS: Validate & update record + RSUS-->>API: Record updated + API-->>Client: Success +``` + +[↑ Back to Table of Contents](#table-of-contents) + +## ADP Workflow + +Authorized Data Publishers (ADPs) enrich **existing** CVE Records published by CNAs. Unlike CNAs — who create and own CVE Records — ADPs add supplementary data such as affected product lists, severity scores, or additional references to records they do not own. + +```mermaid +--- +title: ADP Workflow vs. CNA Workflow +--- +sequenceDiagram + participant CNA as CNA User + participant ADP as ADP User + participant API as CVE Services API + participant RSUS as RSUS + participant CVEList as CVE List (cvelistV5) + + Note over CNA,CVEList: CNA Workflow (record owner) + CNA->>API: POST /cve/{id}/cna (create CNA Container) + API->>RSUS: Validate & store + RSUS->>CVEList: Publish CVE Record + + CNA->>API: PUT /cve/{id}/cna (update CNA Container) + API->>RSUS: Validate & update + RSUS->>CVEList: Update CVE Record + + Note over ADP,CVEList: ADP Workflow (enrichment only) + ADP->>API: POST /cve/{id}/adp (create ADP Container) + API->>RSUS: Validate & store + RSUS->>CVEList: Append ADP data to existing record + + ADP->>API: PUT /cve/{id}/adp (update ADP Container) + API->>RSUS: Validate & update + RSUS->>CVEList: Update ADP data on existing record +``` + +### Key Differences + +| Aspect | CNA | ADP | +|---|---|---| +| **API Endpoints** | `POST /cve/{id}/cna` · `PUT /cve/{id}/cna` | `POST /cve/{id}/adp` · `PUT /cve/{id}/adp` | +| **Relationship to Record** | Creates and owns the CVE Record | Enriches an existing record they do not own | +| **Data Container** | CNA Container (required fields: descriptions, affected products, references) | ADP Container (supplementary fields: additional affected products, severity scores, additional references) | +| **Record Lifecycle** | Can reserve CVE IDs, create, update, and reject records | Cannot reserve CVE IDs or create new records; can only add/update ADP data on published records | +| **Example Organizations** | Product vendors, CERTs, coordinators | [CISA ADP](https://www.cve.org/ProgramOrganization/ADPs) | + +> [!NOTE] +> A CVE Record can contain one CNA Container and multiple ADP Containers. The CNA Container represents the authoritative vulnerability description from the assigning CNA, while ADP Containers provide additional context from authorized third parties. + +[↑ Back to Table of Contents](#table-of-contents) + +## Organizational Roles + +Roots and TLRs provision OA credentials for their CNAs. The OA then creates individual user accounts within their CNA organization. + +```mermaid +--- +title: CVE Services Account Onboarding +--- +graph LR + TLR["Top-Level Roots
(CISA, MITRE)"] + ROOT["Roots
(CISA ICS, CERT@VDE,
ENISA, Google, INCIBE,
JPCERT/CC, Red Hat,
Thales Group)"] + OA["CNA Organizational
Administrator (OA)"] + USER["CNA User"] + + OA -. "1. Requests OA
credentials from" .-> ROOT + OA -. "1. Requests OA
credentials from" .-> TLR + ROOT -. "2. Issues OA
credentials" .-> OA + TLR -. "2. Issues OA
credentials" .-> OA + OA -. "3. Creates user
account" .-> USER + + style OA fill:#fff3e0,stroke:#e65100,stroke-width:2px + style USER fill:#e8f4fd,stroke:#1a73a7,stroke-width:2px + style ROOT fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px + style TLR fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px +``` + +```mermaid +--- +title: CVE Services Account Management (Ongoing) +--- +graph LR + OA["Organizational
Administrator (OA)"] + USER1["CNA User A"] + USER2["CNA User B"] + USER3["CNA User C"] + UR["CVE Services
User Registry"] + + OA -- "Creates / deactivates
accounts" --> UR + OA -- "Resets credentials" --> UR + UR -- "Authenticates" --> USER1 + UR -- "Authenticates" --> USER2 + UR -- "Authenticates" --> USER3 + OA -- "Ensures individual
accountability" --> USER1 + OA -- "Ensures individual
accountability" --> USER2 + OA -- "Ensures individual
accountability" --> USER3 + + style OA fill:#fff3e0,stroke:#e65100,stroke-width:2px + style UR fill:#fff3e0,stroke:#e65100,stroke-width:2px + style USER1 fill:#e8f4fd,stroke:#1a73a7,stroke-width:2px + style USER2 fill:#e8f4fd,stroke:#1a73a7,stroke-width:2px + style USER3 fill:#e8f4fd,stroke:#1a73a7,stroke-width:2px +``` + +[↑ Back to Table of Contents](#table-of-contents) + +## Additional Resources + +- [CVE Services page on cve.org](https://www.cve.org/AllResources/CveServices) +- [CVE Services GitHub Repository](https://github.com/CVEProject/cve-services) +- [CVE Schema GitHub Repository](https://github.com/CVEProject/cve-schema) +- [CVE List (cvelistV5) GitHub Repository](https://github.com/CVEProject/cvelistV5) +- [CVE Services API Documentation (Production)](https://cveawg.mitre.org/api-docs/) +- [CVE Services API Documentation (Test)](https://cveawg-test.mitre.org/api-docs/) +- [AWG Charter](https://github.com/CVEProject/automation-working-group/blob/master/AWG_Charter.md) + +[↑ Back to Table of Contents](#table-of-contents) diff --git a/docs/charts.md b/docs/charts.md new file mode 100644 index 000000000..d02a935a9 --- /dev/null +++ b/docs/charts.md @@ -0,0 +1,80 @@ +## Data Flow + +```mermaid +flowchart TB + subgraph CNA_Tools["CNA Tools"] + Custom["Custom Tooling"] + Vulnogram["Vulnogram"] + CLI["CLI"] + end + subgraph AWS["AWS"] + API["CVE Services API + (Node.js + Mongoose)"] + Mongo["MongoDB"] + Publisher["CVE Publisher"] + end + Researchers["Researchers"] --> CNAs["CNAs"] + CNAs --> Custom & Vulnogram & CLI + Custom --> API + Vulnogram --> API + CLI --> API + API --> Mongo + Mongo --> Publisher + Publisher --> GitHub["CVE Records + (cvelistV5 GitHub)"] + CVEOrg["CVE.org"] --> GitHub + Consumers["CVE Consumers"] --> CVEOrg + Scanners["Scanners & Defenders"] --> GitHub + Consumers --> Scanners + + Mongo@{ shape: cyl} + Researchers@{ shape: text} + Consumers@{ shape: text} +``` + +## Process Flow + +```mermaid +flowchart TB + +%% Actors +CNA["CNA Organizations +(Vendors, OSS Projects)"] +Researchers["Security Researchers"] +Tools["Security Tools & Platforms +(Scanners, SBOM, Vuln Mgmt)"] + +%% Core System +subgraph CVE_Ecosystem["CVE Program Ecosystem"] + direction TB + + subgraph CVE_Services["CVE Services"] + API["CVE Services API"] + Auth["Authentication & Authorization"] + Workflow["CVE Workflow Engine +(ID reservation, submission, updates)"] + end + + CVERepo["CVE Records Repository +(CVE List / JSON Records)"] + +end + +%% Downstream Ecosystem +NVD["National Vulnerability Database (NVD)"] +Intel["Threat Intelligence +& Security Data Providers"] + +%% Flows +CNA -->|"Reserve / Publish CVE"| API +API --> Auth +Auth --> Workflow +Workflow --> CVERepo + +Researchers -->|"Report vulnerabilities"| CNA + +CVERepo -->|"Public CVE Data"| NVD +CVERepo -->|"CVE feeds"| Intel +NVD -->|"Enriched vulnerability data"| Tools +Intel --> Tools +``` diff --git a/docs/inspiration.png b/docs/inspiration.png new file mode 100644 index 000000000..95f4b5e54 Binary files /dev/null and b/docs/inspiration.png differ