AIToday

UBEL: free SCA tool blocks supply-chain attacks at install time

Hacker News4h agoSend on LINE
UBEL: free SCA tool blocks supply-chain attacks at install time

Key takeaway

UBEL is a free, locally-running tool that scans software dependencies across eight programming-language ecosystems and Linux/Windows systems for known vulnerabilities, then enforces security policies to block installation if violations are found. Unlike traditional scanners that only report after the fact, UBEL acts as an install-time firewall, reverting changes atomically if a package fails policy checks. It supports Python, Node.js (npm, pnpm, yarn, bun), PHP, Rust, Go, C#/.NET, Java, and Ruby, plus system packages on Ubuntu, Debian, Alpine, RHEL, and Windows, with no telemetry—only external calls are to public vulnerability APIs.

Summaries like this, in your inbox every morning.

Sign up free →

3 Key Points

  • What happened

    Arcane Spark released UBEL, a free software composition analysis (SCA) tool and firewall that scans dependencies across Python, Node.js, PHP, Rust, Go, C#/.NET, Java, and Ruby ecosystems, plus Linux and Windows system packages. Unlike report-only scanners, UBEL enforces configurable security policies and blocks installation if a scan fails.

  • Why it matters

    Supply-chain attacks often slip past development because scanners only report findings after the fact. UBEL intercepts dependencies before they're installed—resolving each package through OSV.dev and NVD APIs, checking for vulnerabilities and malicious packages (MAL-* advisories, always blocked), and reverting lockfiles atomically if policy is violated. It runs locally with no telemetry, only sending package names and versions to public vulnerability databases.

  • What to watch

    UBEL is available as a Python CLI (ubel-pip, ubel), Node.js CLI (ubel-npm, ubel-pnpm, ubel-bun, ubel-agent, ubel-platform), and VS Code extension; it generates timestamped reports in JSON, HTML, CycloneDX v1.6 SBOM, and SARIF v2.1.0 formats. Policy defaults to blocking packages at 'high' severity or above and unknown-severity packages; malicious packages are always blocked regardless of policy.

In Depth

UBEL (Unified Bill / Enforced Law) is a free, open-source software composition analysis tool built to block supply-chain attacks before they reach production. Unlike traditional report-only scanners, UBEL acts as a firewall: it resolves dependencies, generates PURLs (Package URLs), scans them against OSV.dev and NVD vulnerability databases, and enforces configurable security policies at install time. If a scan fails, the operation is blocked and the user is told exactly why.

The tool spans three deployment layers. First, it integrates directly into development workflows through a Node.js CLI (ubel-npm, ubel-pnpm, ubel-bun, ubel-agent, ubel-platform), a Python CLI (ubel-pip, ubel), and a VS Code extension that bundles the Node.js engine. Second, it supports eight programming-language ecosystems: Node.js, Python, PHP, Rust, Go, C#/.NET, Java/Kotlin, and Ruby. Third, it scans system packages on Linux (dpkg on Ubuntu/Debian, apk on Alpine, rpm on RHEL/AlmaLinux/Rocky/CentOS/Fedora) and Windows (via registry and PowerShell, without requiring elevated privileges). This multi-ecosystem reach makes UBEL suitable for full-stack scans in monorepos and containerized environments.

UBEL's core firewall mechanics work as follows: in install mode, the tool invokes the package manager's lockfile-only flag to resolve the full dependency tree without touching node_modules/. UBEL then scans the candidate lockfile, matching packages by PURL against vulnerability databases and enriching findings with CVSS scores, EPSS ratings, fix recommendations, and references via up to 40 parallel threads. The policy engine evaluates each package against two configurable rules: a severity threshold (defaulting to 'high', which blocks packages at 'high' or 'critical' severity) and a flag to block unknown-severity packages (enabled by default). Packages flagged with MAL-* (malicious) advisories are always blocked, regardless of policy settings. If any package violates the policy or is malicious, UBEL reverts the lockfile to its pre-scan state from a disk backup and blocks the install. To close the time-of-check to time-of-use (TOCTOU) window, UBEL re-verifies SHA-256 digests of the candidate lockfile and package.json before the actual install proceeds. All package managers are invoked with --ignore-scripts to prevent malicious pre/post install scripts from running.

Every scan generates reports in four formats: JSON, HTML (fully self-contained, queryable with no server required), CycloneDX v1.6 SBOM (including full dependency graph and VEX-format vulnerability data), and SARIF v2.1.0 (with deterministic SHA-256 fingerprinting per finding). Reports are written to a timestamped path and convenience links (latest.json, latest.html, latest.cdx.json, latest.sarif.json) are overwritten. The HTML dashboard shows a severity breakdown chart, a searchable vulnerability table, full inventory with per-package state (safe, vulnerable, infected, or undetermined), an interactive force-directed dependency graph filterable by vulnerable subtrees, and system/runtime metadata. UBEL runs entirely locally; the only external calls are to osv.dev and NVD's public APIs, which receive only package names and versions. No file contents, dependency graphs, machine identifiers, or telemetry leave the machine. For CI/CD integration, all CLI commands exit non-zero on policy violations, allowing GitHub Actions workflows and Dockerfiles to enforce security gates. Both the Node.js and Python engines expose a main() entry point for programmatic use by AI agents, CI tools, and the VS Code extension, returning machine-readable report objects when called this way.

Context & Analysis

UBEL addresses a gap in traditional software supply-chain security: detection alone is insufficient if malicious or vulnerable packages reach production before a violation is caught. By running at install time—whether through the CLI, CI/CD pipeline, or VS Code extension—UBEL enforces policy before dependencies are written to disk. This approach aligns with the principle of failing fast and safely: if a scan detects a policy violation or malicious package, the operation is blocked and the lockfile is reverted atomically, backed by SHA-256 integrity checks to close the window between scan and install.

The tool's breadth is notable. Rather than focusing on a single ecosystem (e.g., Node.js or Python), UBEL spans eight language ecosystems plus system-level packages on multiple Linux distributions and Windows. This full-stack coverage is particularly relevant for containerized and multi-language environments—a developer working with both Node.js dependencies and Alpine Linux system packages in Docker can use a single policy and reporting framework. The concurrent enrichment of up to 40 parallel threads means scan latency scales gracefully with dependency count.

FAQ

What package managers and languages does UBEL support?
UBEL covers Node.js (npm, pnpm, yarn, bun), Python (pip/virtualenv), PHP (Composer), Rust (Cargo), Go (Go Modules), C#/.NET (NuGet), Java/Kotlin (Maven), and Ruby (Bundler). It also scans system packages on Linux (Ubuntu, Debian, Alpine, RHEL, AlmaLinux, Rocky Linux, CentOS, Fedora via dpkg, apk, or rpm) and Windows (via registry and PowerShell, with no elevated privileges required).
How does UBEL block malicious packages?
UBEL scans resolved dependencies through OSV.dev and NVD APIs, matching packages by PURL (Package URL). Malicious packages flagged with MAL-* advisories are always blocked regardless of the configured policy. In install mode, if any package violates the policy or is malicious, UBEL reverts the lockfile to its pre-scan state and blocks the operation; node_modules/ is never touched.
Does UBEL send data outside my machine?
UBEL is fully local. The only external calls are to osv.dev and NVD's public APIs, which receive only package names and versions (PURLs) to check for known vulnerabilities. No file contents, dependency graphs, machine identifiers, or telemetry are sent anywhere.
What formats does UBEL use for scan reports?
Every scan generates timestamped JSON, HTML (self-contained, no server required), CycloneDX v1.6 SBOM with full dependency graph and VEX-format vulnerabilities, and SARIF v2.1.0 output. Convenience links (latest.json, latest.html, latest.cdx.json, latest.sarif.json) are overwritten after each scan.

Get the latest AI Safety & Alignment news every morning

AI-summarized, only the topics you pick — one digest a day via Email, Slack, or Discord.

Free · takes 30 seconds · unsubscribe anytime

Discussion

No comments yet. Be the first to share your thoughts!

Log in to join the discussion

Related Articles

Stay ahead with AI news

Get curated AI news from 200+ sources delivered daily to your inbox. Free to use.

Get Started Free

Free · takes 30 seconds · unsubscribe anytime