Plans: Every plan. On Free, VEX documents stay readable and downloadable, but new ones are refused. Who: any
member uploads, retires and reactivates VEX documents and uses their statements; owners and admins create the API
tokens that pipelines use.
What Pharus applies and what stays evidence
A VEX status you set yourself always wins. Pharus never changes it because of a document.
Supported formats
XML and SPDX documents aren’t read. The limits are 4 MB as sent, 50 MB uncompressed and 50 000 statements per document.
Vulnerabilities inside an SBOM count too. When an SBOM from Trivy or Grype carries a
vulnerabilities section, Pharus
keeps it as a VEX document attached to that SBOM, and the SBOM’s page says “VEX in this SBOM” with the counts.
How statements bind to your components
Pharus binds each statement to the family’s components by purl or CPE, by a CycloneDX BOM-link, or to the product as a whole. A statement that names nothing Pharus can bind is counted as such on the document’s page and changes nothing.- Product version. A document uploaded with a Product version holds for that version only. Without one, it holds for every version the family has.
- Newest wins. The newest statement per component and product version counts.
- Replacement. A later document from the same tool for the same version replaces the earlier one. govulncheck, Trivy, Grype, Dependency-Track and OSV-Scanner each count as one source; for other documents, the source is the document’s own id.
Upload a VEX document
1
Open the upload dialog
Go to SBOMs and select Upload VEX.
2
Choose the family and version
Pick the Product family. Enter the Product version the document is about, or leave it empty when it holds for
every version.
3
Choose the file
Drop a
.json file on VEX file, or select Choose file. Use the sample loads govulncheck-style statements
for the sample SBOM.4
Upload
Select Upload VEX. Pharus confirms with the number of statements and findings, matches the family again and opens
the document’s page.
Send VEX from CI
Pipelines send VEX documents toPOST /api/v1/vex with the same API token as the family’s SBOMs.
The VEX tab of Connect a pipeline on the SBOMs page has ready-made steps with your endpoint filled in:
- govulncheck:
govulncheck -format openvexsent to/api/v1/vex. - Trivy or Grype: a CycloneDX SBOM with the findings inside, sent to
/api/v1/sbomsas usual. - Dependency-Track: the project’s VDR, exported with
?variant=vdr&format=jsonand sent to/api/v1/vex. It carries your analysis with the justification and details.
The VEX documents list
Each family card on the SBOMs page has a VEX documents section with up to 10 documents, active ones first:
Retired documents are shown muted and marked “Retired”.
A VEX document’s page
Select a document to open it.- Details: Product family, Applies to, Format, Tool, Author, Document ID, Document version, Issued, SHA-256 and size, Source, Sent by and Received. A document that came inside an SBOM names it under Came in SBOM.
- Contents: how many statements have a verdict, how many are scanner findings without one, how many name nothing Pharus can bind, and how many current matches carry them.
- Statements: each Vulnerability, Component, Status and Why (the justification, then the impact or action statement), up to 200 rows.
gateway-g3-4.2.openvex.json. Every
member can download it, also while the workspace is read-only.
Use the statements as your VEX
To take over one statement, select Use on the match. See use a statement as your own. To take over every not-affected statement in a document at once:1
Open the document
On SBOMs, select the document in the family’s VEX documents section.
2
Use the statements
Select Use n not-affected statements, read the confirmation and select Use statements.