Expanso cve-scan

SuspiciousAudited by ClawScan on May 10, 2026.

Overview

The skill is not clearly malicious, but it can give incomplete CVE-scan results and its MCP mode exposes an unauthenticated network endpoint, so it needs review before use.

Before installing, verify that the pipeline scans all relevant ecosystems and all packages in your SBOM. Avoid relying on MCP mode until it performs a real vulnerability lookup, bind any server to localhost or protect it with authentication, and only use the CLI with SBOMs you are comfortable sending to OSV. Prefer deploying the reviewed local pipeline rather than an unpinned remote URL.

Findings (6)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Large SBOMs or non-npm SBOMs may receive incomplete or incorrect results while the output suggests the scan covered all packages.

Why it was flagged

The CLI pipeline hard-codes the OSV ecosystem to npm and queries only the first 100 packages, but later reports the full SBOM package count as scanned.

Skill content
"ecosystem": "npm"  # Default to npm, could be inferred from purl ... }).slice(0, 100)  # OSV limit: 100 packages per batch ... root.scanned_packages = meta("package_count")
Recommendation

Do not rely on the CLI output for complete coverage until the pipeline batches all packages, infers ecosystem from purl/SPDX/CycloneDX data, and reports the actual number queried.

What this means

Using MCP mode could falsely report zero vulnerabilities for an SBOM that actually contains vulnerable packages.

Why it was flagged

The MCP pipeline constructs an empty vulnerability list and reports its length without querying OSV, NVD, or any vulnerability database.

Skill content
let vulnerabilities = [] ... root.vulnerabilities = $vulnerabilities ... "vulnerabilities_found": $vulnerabilities.length()
Recommendation

Avoid MCP mode for security decisions until it performs a real vulnerability lookup or clearly labels itself as a stub/non-scanning endpoint.

What this means

If started on a shared or exposed machine, unintended network clients may be able to interact with the scan endpoint.

Why it was flagged

The MCP/HTTP server binds to all network interfaces and the artifact does not show authentication, localhost-only binding, or origin restrictions.

Skill content
http: enabled: true; address: "0.0.0.0:${PORT:-8080}" ... path: /scan ... allowed_verbs: [POST]
Recommendation

Bind the server to 127.0.0.1 by default, add authentication or firewall guidance, and document when it is safe to expose the endpoint.

What this means

Your dependency inventory may leave your environment and be shared with OSV, which may be sensitive for private software.

Why it was flagged

The CLI pipeline sends SBOM-derived package names and versions to the OSV API for vulnerability lookup.

Skill content
url: "https://api.osv.dev/v1/querybatch"; verb: POST
Recommendation

Use this only with SBOMs you are comfortable sending to OSV, or require an offline/local vulnerability database for sensitive projects.

What this means

A user may deploy the live remote pipeline rather than the exact reviewed local artifact.

Why it was flagged

The cloud deployment example fetches a pipeline from a remote URL without a pinned hash or version in the instruction.

Skill content
expanso-cli job deploy https://skills.expanso.io/cve-scan/pipeline-cli.yaml
Recommendation

Inspect the remote pipeline before deployment, prefer deploying the reviewed local file, and pin by version or digest where possible.

What this means

Supplying an NVD key appears unnecessary for the shown pipelines and could create avoidable credential exposure.

Why it was flagged

The skill declares an optional credential, but the included pipelines use OSV without an API key and do not show NVD key handling.

Skill content
credentials:\n  - name: NVD_API_KEY\n    required: false\n    description: NVD API key for higher rate limits
Recommendation

Do not provide the NVD_API_KEY unless a reviewed pipeline version actually uses it and documents how it is protected.