This release adds 6 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+13 more
Affected surfaces
Summary
AI summaryAdded multi‑language URL scan, Ruby and Python eval detectors, per‑ecosystem typosquat lists, Cargo build‑hook detector, and binary‑dropper carve‑outs.
Full changelog
aegis-cli v0.9.0
Supply-chain security CLI for npm / bun / yarn / pnpm.
Verifying releases
All artifacts are checksummed (checksums.txt) and the checksums file
is signed via cosign keyless OIDC. To verify:
cosign verify-blob \
--certificate-identity-regexp 'https://github.com/qwexvf/aegis-cli/.github/workflows/release.yml.*' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--certificate checksums.txt.pem \
--signature checksums.txt.sig \
checksums.txt
sha256sum -c checksums.txt
SLSA build provenance is attached to every artifact and can be
verified with gh attestation verify <file> --owner qwexvf.
Detection-gap roadmap fully closed. Every historical incident in the rogues' gallery (internal/infra/heuristics/incidents_test.go) now PASSes — 8 t.Skip blocks lifted across PyPI, RubyGems, and crates.io.
Added
- Language-agnostic URL scan (Plan A) — host-blocklist (pastebin / discord webhooks / telegram bots / ipinfo / cloudflare-dns / ngrok / ...) + IDN-homoglyph detection now runs over
.py,.pyi,.pyx,.rb,.gemspec,.rs, and.gosource, not just JS. NewisAnalyzableSourcegate. - Ruby
eval(Net::HTTP.get(...))detector (Plan B) — newrubyObfuscatedPayloadPattern+isRubySourcegate covers the canonical Ruby fetch-then-execute idiom (eval(Net::HTTP.{get,post}(...)),eval(open("https://...")),eval(URI.{open,read}(...))). Catches the 2019rest-clientandstrong_passwordcompromises. - Python
exec(urlopen(...))/exec(b64decode(...))detector (Plan C) — newpythonObfuscatedPayloadPattern+isPythonSourcegate coversexec/evalofurllib.request.urlopen,urllib2.urlopen,requests/httpx/aiohttp.{get,post},base64.b64decode,codecs.decode, andcompile(base64.…)wrappers. - Per-ecosystem typosquat lists (Plans D + E + F) —
topPackagesis now keyed bydomain.Ecosystem. Adding an ecosystem = one line + atop_<eco>_packages.txtfile. New curated lists for PyPI (~120 entries) and crates.io (~80 entries) with cherry-picks for known typosquat targets (colorama,dateutil,jellyfish,rust_decimal,bigdecimal). Catches 2017colouramaand 2022rustdecimal. - Cargo
build.rsinstall-hook detector (Plans G + H) —DetectCargoBuildHookreuses the existingscriptMatchesMalwarePatternset against the contents ofbuild.rswhen the ecosystem isEcoCrates. Catches the 2023xrvrvbuild-time shell-payload shape. - Per-ecosystem binary-dropper carve-outs (Plans I + J) —
isExpectedNativePath(eco, filename)recognises canonical "this is supposed to be a binary" packaging shapes. PyPI: CPython ABI-tagged.so(.cpython-*-*.so,.abi3.so),.pyd, and bundled-library paths (<pkg>/.libs/,<pkg>/_vendor/). Crates: no carve-out (legitimate-syscrates ship.a/.lib, the suspicious-extension list never matched those anyway). Catches 2024ultralytics(stray.sooutside C-extension paths) and 2024big_decimal(precompiled.soin a crate).
Changed
DetectTyposquatno longer hard-gates onEcoNpm. Ecosystems without a top-list are silently skipped (no false positives), so adding one is purely additive.DetectBinaryDropperno longer hard-gates onEcoNpm. Same shape — gated on the carve-out function, ecosystems without carve-outs default to "no exception" (everything on the suspicious-extension list flags).
Tests
- 728 pass with race detector across 26 packages (+53 from 0.8.0). All 20 incident replays in
TestIncidents_*are now active (was 12 active + 8 skipped).
Apache-2.0 — see LICENSE.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About qwexvf/aegis-cli
All releases →Related context
Beta — feedback welcome: [email protected]