AI News HubLIVE
In-site rewrite5 min read

UBEL: Free SCA, dependencies/Linux packages/Docker firewall, and AI-assisted SAST

UBEL is a multi-ecosystem software supply-chain security platform that detects vulnerabilities and enforces policies at install time, blocking malicious packages before they reach production. It supports package managers like npm, pip, Cargo, and more, along with Linux and Windows platform scanning.

SourceHacker News AIAuthor: ala_bouali

Notifications You must be signed in to change notification settings

Fork 0

Star 4

BranchesTags

Open more actions menu

Folders and files

NameName

Last commit message

Last commit date

Latest commit

History

182 Commits

182 Commits

node

node

python

python

tests

tests

vscode

vscode

.gitignore

.gitignore

DISCLAIMER.md

DISCLAIMER.md

LICENSE.md

LICENSE.md

README.md

README.md

ubel_logo.svg

ubel_logo.svg

Repository files navigation

Multi-Ecosystem Supply-Chain Security Platform

Ubel resolves dependencies, generates PURLs, scans them through OSV.dev and NVD, and enforces configurable security policies at install-time to block supply-chain attacks before they reach production.

!

What is UBEL?

UBEL is a software composition analysis (SCA) tool and install-blocking firewall built for developers and teams who care about what enters their supply chain at every layer. Unlike report-only scanners, UBEL enforces policy — if a scan fails, it blocks the operation and tells you exactly why.

It spans the entire delivery chain: from the moment a developer adds a dependency, through CI validation, to what is running on a deployment server or inside an AI agent's runtime environment.

Repository Structure

ubel/ ├── python/ # Python CLI — ubel-pip, ubel (Linux host scanner) ├── node/ # Node.js CLI — ubel-npm, ubel-pnpm, ubel-bun, ubel-agent, ubel-platform └── vscode/ # VS Code extension — bundles the node/ engine at package time

The VS Code extension imports the Node.js engine directly from node/src/ at package time via the prepackage script — no separate install step required when building locally.

Features

Full dependency resolution with PURL generation across all supported ecosystems

Vulnerability scanning via batched queries to OSV.dev and NVD's APIs

Concurrent enrichment (CVSS, EPSS, fix recommendations, references) with up to 40 parallel threads

Policy engine — block/allow by severity threshold and unknown-severity packages

Malicious package detection (MAL-* advisories) — always blocked regardless of policy

check mode — dry-run resolution and scan with no side effects

install mode — scan-gate before installation; blocks if policy violated

health mode — scan the current project's installed dependencies

Full-stack monorepo scanning — all supported ecosystems in a single pass

Platform scanning — Linux (dpkg/apk/rpm) and Windows (registry/PowerShell), no elevated privileges required

Atomic lockfile revert with TOCTOU SHA-256 integrity protection (Node.js)

Automatic report generation: timestamped JSON + HTML + SBOM (*.cdx.json) + SARIF (*.sarif.json) per scan, plus latest.* convenience links

Zero external runtime dependencies (stdlib only, in both Python and Node.js)

Complete, compliant, and enriched SBOM CycloneDX v1.6 with full dependency graph and vulnerabilities in VEX format

Complete, compliant, and enriched SARIF v2.1.0 output

Supported Ecosystems

Project / Repository Scanning

Ecosystem Package Manager Resolved From

Node.js npm, pnpm, yarn, bun node_modules/ (on-disk walk)

Python pip / virtualenv .dist-info / .egg-info inside venv site-packages/

PHP Composer vendor/

Rust Cargo Cargo.lock

Go Go Modules go.sum

C# / .NET NuGet packages.lock.json / obj/project.assets.json

Java / Kotlin Maven pom.xml resolved dependencies

Ruby Bundler Gemfile.lock

Each discovered package is deduplicated by PURL before submission — packages shared across sub-projects are scanned exactly once.

Platform Scanning (Linux)

Distribution Package Manager Source PURL type

Ubuntu dpkg /var/lib/dpkg/status pkg:deb/ubuntu/

Debian dpkg /var/lib/dpkg/status pkg:deb/debian/

Alpine / Alpaquita apk /lib/apk/db/installed pkg:apk/alpine/

Red Hat / RHEL rpm rpm -qa pkg:rpm/redhat/

AlmaLinux rpm rpm -qa pkg:rpm/almalinux/

Rocky Linux rpm rpm -qa pkg:rpm/rocky-linux/

CentOS / Fedora rpm rpm -qa pkg:rpm/redhat/

Platform Scanning (Windows)

Detected via registry probes and PowerShell — no elevated privileges required.

Category Components

Operating system Windows 10 / 11 (build-accurate CPE version)

Security Windows Defender

Runtimes Node.js, Python, PHP, Go, Rust, Ruby, JRE, JDK

.NET All installed .NET Core / Desktop / ASP.NET runtimes (multi-version)

Browsers Chrome, Firefox, Microsoft Edge

Developer tools Git, Docker Desktop, VS Code, Cursor

Shell PowerShell

Vulnerabilities are matched using CPE 2.3 identifiers against the CVE/NVD database.

Components

python/ — Python CLI

pip install ubel-python

Binary Purpose

ubel-pip Python / PyPI ecosystem (virtualenv scanning, dry-run installs)

ubel Linux host OS package scanning (dpkg, apk, rpm)

Requirements: Python >= 3.8, pip available in the target virtual environment.

See python/README.md for full documentation.

node/ — Node.js CLI

npm install -g @arcane-spark/ubel-node

Binary Purpose

ubel-npm npm ecosystem

ubel-pnpm pnpm ecosystem

ubel-bun bun ecosystem

ubel-agent AI agent workspace scan (OS, runtimes, tools, dependencies)

ubel-platform Host platform scan (OS, runtimes, tools)

Requirements: Node.js >= 18.0.0, target package manager binary on PATH.

yarn does not support a lockfile-only dry-run — yarn add always writes node_modules. UBEL supports yarn in health mode only and cannot provide install-blocking firewall coverage for it.

See node/README.md for full documentation.

vscode/ — VS Code Extension

From the Marketplace:

ext install Arcane-Spark.ubel-vscode

From VSIX:

Download ubel-vscode-extension.vsix from the releases page.

Open the Command Palette → Extensions: Install from VSIX…

Select the downloaded file.

Requirements: Node.js >= 18.0.0, VS Code ^1.85.0.

Command Shortcut (Win/Linux) Shortcut (Mac) What it scans

UBEL: Scan Project Ctrl+Alt+U Cmd+Alt+U All ecosystems inside the open workspace folder

UBEL: Scan Code Editor's Extensions Ctrl+Alt+X Cmd+Alt+X npm packages inside installed VS Code / Cursor extensions

UBEL: Scan Host Platform Ctrl+Alt+P Cmd+Alt+P System software installed on this machine

See vscode/README.md for full documentation.

Firewall Mechanics (Node.js)

ubel-npm/pnpm/bun check and install invoke the package manager's lockfile-only flag, resolving the full dependency tree and writing a candidate lockfile without touching node_modules/. UBEL scans the candidate lockfile, then makes a binary decision:

Clean — the candidate lockfile is accepted and the actual install proceeds.

Violation — the lockfile is reverted to its pre-scan state from the disk backup. node_modules/ is never touched.

Before any real install is allowed to proceed, SHA-256 digests of the candidate lockfile and package.json are re-verified to close the TOCTOU window between scan and install.

All three package managers are invoked with --ignore-scripts to block malicious pre/post install scripts.

Policy

Policy is stored as JSON at .ubel/local/policy/config.json relative to the project root (Linux host scanner and the VS Code extension's host scan use ~/.ubel/).

Default policy created on first run:

{ "severity_threshold": "high", "block_unknown_vulnerabilities": true }

Field Values Default Behaviour

severity_threshold low medium high critical none high Block packages at or above this severity

block_unknown_vulnerabilities true false true Block packages with CVEs but no CVSS score

Infections (MAL-*) — always blocked Cannot be toggled; unconditionally blocked

The threshold is inclusive — high blocks both high and critical. Setting none disables severity blocking but infections are still blocked.

Reports

Every scan writes files to a timestamped path and overwrites the latest.* convenience links:

.ubel/reports/latest.json .ubel/reports/latest.html .ubel/reports/latest.cdx.json .ubel/reports/latest.sarif.json

.ubel/local/reports////// __.json .html .cdx.json __.sarif.json

The HTML report is fully self-contained (no server required) and includes:

Dashboard with severity breakdown chart and policy decision

Searchable, filterable vulnerability table

Full inventory with state (safe / vulnerable / infected / undetermined)

Interactive force-directed dependency graph with vulnerable-subtree filter

Per-vulnerability detail modals (CVSS vector, fix recommendations, OSV/NVD references)

System and runtime metadata

The SBOM is a fully valid CycloneDX v1.6 document including all components, their dependency relationships, and enriched vulnerability data in VEX format. The SARIF output is a fully valid SARIF v2.1.0 file with deterministic SHA-256 fingerprinting per finding.

CI/CD Integration

All CLI commands exit non-zero on policy violations:

GitHub Actions

  • name: UBEL dependency scan

run: ubel-npm check # or ubel-pip check

  • name: UBEL firewall-gated install

run: ubel-npm install # or ubel-pip install

Dockerfile

RUN ubel-npm install RUN ubel-pip install

Programmatic API

Both engines expose a main() entry point for agents, CI tools, and the VS Code extension.

Node.js:

import { main } from "@arcane-spark/ubel-node";

const report = await main({ projectRoot : "/abs/path/to/project", engine : "npm", mode : "health", is_script : true, save_reports: true, scan_os : false, full_stack : false, scan_node : true, scan_scope : "repository", // repository | agent | developer_platform | editor_extension });

Python:

from ubel.main import main

report = main({ "project_root": "/abs/path/to/project", "engine": "pip", "mode": "health", "packages": [], "is_script": True, "save_reports": True, "scan_os": False, "full_stack": False, "scan_venv": True, "scan_scope": "repository", })

When called this way, the banner and interactive console output are suppressed. The return value is the same machine-readable report object written to disk.

Privacy

UBEL is fully local. The only external calls are to osv.dev's public API and NVD's API, which receive package PURLs (name + version) to check for known vulnerabilities. No file contents, no dependency graphs, no machine identifiers, and no telemetry are sent anywhere.

License

See LICENSE.md for details or contact [email protected] for commercial licensing.

Ubel — Secure every dependency, before it reaches production.

Resources

Readme

License

Activity

Stars

4 stars

Watchers

0 watching

Forks

0 forks

Report repository