TIP
← Initiatives / Security tools

SBOM / LICENSE POLICY / EVIDENCE

Evidence for every dependency decision.

Import an SBOM, check known vulnerabilities and license policy, and preserve the evidence. Share the assessment as a Word document or JSON report, together with the data behind it.

  • TypeScript / Python / PHP
  • SPDX / CycloneDX
  • Word / JSON
SecuLens character

SecuLens

SecuLens logo combining a shield and a lens
npm install -g seculens
seculens wizard
SBOM × OSV × license policy. Keep assessment inputs alongside the results.

01 /

Match the actual version

Match component versions against OSV affected ranges locally. Unsupported formats and missing information remain visible as assessment gaps.

02 /

Read the license expression

Evaluate SPDX expressions including AND, OR, and WITH, alongside individual licenses such as MIT and Apache-2.0. Distinguish allowed, denied, and review-required results.

03 /

Keep the evidence

Save the original SBOM, OSV data, and SHA-256 hashes. Recheck matches using the same evidence snapshot.

01 / FEATURE TOUR

Explore what you can do.

SECULENS / 01

Start with the SBOM you have.

Read SPDX or CycloneDX JSON and assess supported npm, PyPI, and Packagist versions. Choose a saved OSV snapshot or explicitly retrieve advisory candidates from OSV.

Read the guide on this page ↓
seculens scan sbom.json \
  --db database.json \
  --lang en --output reports
TypeScript CLI example. Provide your own SBOM and OSV database snapshot.

SECULENS / 02

Make your team’s policy explicit.

Define allowed and denied licenses in JSON. Unknown, custom, and missing declarations require review. Without a policy, licenses remain review-required rather than automatically approved.

Read the guide on this page ↓
{
  "allow": ["MIT", "Apache-2.0", "BSD-3-Clause"],
  "deny": ["AGPL-3.0-only", "AGPL-3.0-or-later"]
}
Illustrative policy. Adapt it to your distribution and usage conditions.

SECULENS / 03

From findings to an explainable report.

Export Word and JSON reports with Japanese or English headings and summaries. The customer layout adds a cover, prioritized findings, and numbered details. Optional source analysis identifies syntax-based review candidates for each implementation’s language.

Read the guide on this page ↓
seculens scan sbom.json --db database.json \
  --customer "Sample Company" --target "Web Service" \
  --lang en --report-style customer --output reports
Customer-report command example. Confirm vulnerability applicability and legal obligations through human review.

SECULENS / PRACTICAL GUIDE

From setup to reports, right here.

Start with the interactive wizard and review the settings before running. For repeated assessments, save the same inputs and options as a command. Examples below use the TypeScript edition. Python uses the same CLI name; PHP runs through php bin/seculens.

01 / SET UP

Choose an implementation and open the wizard

The three editions are independent implementations. Install one for SBOM assessment and reports. If you also want source analysis, choose the edition matching your source language.

TypeScript

Node.js 22+

npm install -g seculens

Start interactively

seculens wizard --lang en

Python

Python 3.10+

pip install seculens

Start interactively

seculens wizard --lang en

PHP

PHP 8.2+ / Composer 2

git clone https://github.com/masahiroid/seculens-php.git
cd seculens-php
composer install --no-dev

Start interactively

php bin/seculens wizard --lang en

In the wizard, choose assessment or SBOM generation, then set the input file, OSV data source, optional policy, and output folder. You can also set the customer, target, and author. Review the settings before starting; decline with n or cancel with Ctrl+C.

02 / SBOM & VULNERABILITY MATCHING

Prepare an inventory and match it against OSV

Import SPDX 2.2/2.3 JSON or CycloneDX 1.4–1.7 JSON. Components need a supported package URL for npm, PyPI, or Composer, plus a version. For an npm project with dependencies already installed, generate an inventory with:

seculens sbom ./my-project --format cyclonedx --output sbom.json

Generation invokes npm sbom and requires a compatible npm version. For Python, PHP, or containers, generate an inventory with an appropriate existing tool and import it.

Retrieve OSV advisory candidates

seculens scan sbom.json --fetch-osv --lang en --output reports

Send package names and ecosystems to OSV, then match versions against the returned advisory ranges locally. Network failure stops the assessment. Matching handles affected ranges, fixed versions, and withdrawn records; aliases are merged per component.

Assess offline using a saved snapshot

seculens scan sbom.json --db database.json --lang en --output reports-offline

Use OSV data saved by a previous run or another suitable snapshot as database.json. This mode uses no network. The same SBOM and database reproduce matching results, although report dates and Word metadata can differ.

npm uses SemVer, PyPI uses PEP 440, and Packagist supports specified numeric version forms. Some Composer-specific forms and GIT-only advisory ranges remain unevaluated. Distinguish “no match” from “not evaluated.”

03 / LICENSE POLICY

Define allowed, denied, and review-required licenses

Save the following as policy.json. Adapt allow and deny to your usage and distribution requirements, then add --policy policy.json to the assessment command.

{
  "allow": ["MIT", "Apache-2.0", "BSD-3-Clause"],
  "deny": ["AGPL-3.0-only", "AGPL-3.0-or-later"]
}
seculens scan sbom.json --db database.json --policy policy.json \
  --lang en --output reports
  • AND: every branch must be allowed.
  • OR: at least one alternative must be allowed.
  • WITH: explicitly allow the full expression including its exception.
  • Unknown, custom, or missing licenses, and assessments without a policy, require review.

The assessment uses licenses declared in the SBOM. It does not verify declarations against source code or determine actual distribution obligations or customer usage conditions.

04 / SOURCE REVIEW & REPORTS

Combine source review candidates with an evidence report

Source review is optional. In the TypeScript edition, add --source ./src to inspect constructs such as eval, new Function, and innerHTML, plus complexity and nesting. Python and PHP editions analyze their own languages. These are syntax-based review candidates, not interprocedural data-flow or exploitability determinations.

seculens scan sbom.json --db database.json --policy policy.json \
  --source ./src --customer "Sample Company" --target "Web Service" \
  --issuer "Review Team" --lang en \
  --report-style customer --output reports/customer

The customer layout includes a cover, severity-sorted findings, numbered details, coverage, and evidence hashes. Colors and labels distinguish severity, such as red for Critical/High and yellow for Medium. Missing severity data remains Unrated; severity is not inferred from license or syntax findings.

Files to review in the output folder
FileContents & interpretation
report.docxWord document with a cover, summary, findings, and details. Japanese localization covers main headings and summaries; advisory text may remain in its original language.
report.jsonMachine-readable findings, license decisions, assessment gaps, and severity evidence.
sbom.jsonCopy of the assessed inventory, providing evidence for component names and versions.
database.jsonThe OSV data used for assessment. Reuse the snapshot to recheck matches.

Exit behavior for CI

With --fail-on-findings, affected vulnerabilities, denied licenses, and security review candidates produce exit code 1. Code 0 means completion without coverage gaps; items may still require review. Invalid inputs, execution errors, and coverage gaps produce 2, with finding-related 1 taking priority. Review the JSON alongside the exit code.

02 / FROM INPUT TO ACTION

A path from inspection to action.

01

Import the inventory

Import existing SPDX or CycloneDX JSON. Supported npm projects can also generate an SBOM.

02

Set the assessment inputs

Select an OSV snapshot, license policy, and optional source analysis.

03

Share results with evidence

Read Word, integrate JSON, and connect findings and assessment coverage to the saved inputs.

03 / COVERAGE

Know the scope of your assessment.

Three native implementations

Separate TypeScript, Python, and PHP CLIs and libraries. Source analysis targets each implementation’s own language.

Visible assessment gaps

Unsupported ecosystems and version formats remain unevaluated. “No match” means no matching advisory in the supplied data.

04 / GET STARTED

Get started in three steps.

01

Choose an implementation

The TypeScript edition requires Node.js 22 or later. See the separate repositories for Python and PHP installation.

npm install -g seculens
02

Open the setup wizard

Choose the SBOM, advisory source, and report destination interactively, then review the settings before running.

seculens wizard
03

Review findings and coverage

Read the Word summary and JSON details. Retain the source data for future assessments and review.

START WITH YOUR PROJECT

Make review part of your everyday work.

SecuLens

How data is handled

The --db mode uses a local OSV snapshot without network access. --fetch-osv sends package names and ecosystems to OSV; version matching stays local. Source code and the full SBOM are not sent.

EXPLORE THE APPS / TIP

Three perspectives on your software.

Choose an app to explore its features and how to use it.