Onam Security

Dependencies and SBOM (SCA)

Dependency analysis runs on every repository scan. It reads manifests and lockfiles itself — no external scanner — matches each component to known advisories, and writes a CycloneDX SBOM.

From lockfile to risk score
From lockfile to risk score

Supported manifests and lockfiles

EcosystemFiles read
Pythonrequirements*.txt, Pipfile.lock, pyproject.toml, setup.cfg
npmpackage.json, package-lock.json, yarn.lock
Javapom.xml, build.gradle, build.gradle.kts
Gogo.mod
RustCargo.toml, Cargo.lock
RubyGemfile.lock
.NET*.csproj, packages.config
PHPcomposer.lock

Where a lockfile and its manifest are both present, the lockfile's pinned versions are used. A lockfile also lists transitive packages, so those are covered; from a manifest alone, only declared dependencies are known.

Not read today: poetry.lock, pnpm-lock.yaml, go.sum, Gradle lockfiles, and a Pipfile without its lock. For those stacks, generate an SBOM with your build tool and upload it.

Matching and enrichment

  1. Advisories — each component is matched against the OSV database, with the NVD as a fallback, from the same store the Vulnerability engine maintains.
  2. Exploit signals — each match gets its EPSS score and CISA KEV membership, cached and refreshed daily.
  3. Risk score — a composite 0–10 score from CVSS, EPSS, KEV and fix availability.
ScorePriority
8.0–10.0Immediate
6.0–7.9High
3.0–5.9Medium
0.0–2.9Low

EPSS and KEV move the score in both directions: a vulnerability with very low exploitation probability is scored down, and one on the KEV list is scored up. Onam does not perform call-graph reachability analysis.

SBOM

  • Output: CycloneDX 1.5, JSON, with package URLs.
  • Input: upload CycloneDX 1.4 or 1.5, or SPDX 2.3, in JSON. Uploaded SBOMs get the same enrichment.
  • Diff: compare any two SBOMs to see what was added, removed or changed.

SPDX export and XML formats are not available today.

VEX

Record a VEX statement against a component and vulnerability — not affected, affected, fixed or under investigation — with a justification. Advisories marked not affected are left out of that component's results.

License and policy checks

Licenses are classified as permissive, weak copyleft or strong copyleft. Built-in policies cover: no unmitigated critical vulnerabilities, no high vulnerabilities with a known fix left unpatched, no strong copyleft, every component licensed, no unrecognised licenses, and a maximum critical count.

License checks need license data. Uploaded SBOMs usually carry it; components found by parsing lockfiles usually do not, so run license policy on uploaded SBOMs.

NTIA minimum elements

Each SBOM can be checked against the NTIA minimum elements for an SBOM and scored 0–100, which is useful before sending one to a customer or regulator.

Not covered here

Container images are not scanned by Code Security today. Vulnerabilities in images and running workloads are covered by the Vulnerability and Container Security engines.