Skip to content

v2.0.1

Latest

Choose a tag to compare

@tstromberg tstromberg released this 10 Oct 08:07
· 19 commits to main since this release

Fixes

  • Make the GitHub token opt-in, and never send it to URLs from scanned files.
  • Restrict pkg:github lookups to owner/repo, blocking token use against other API endpoints.
  • Tighten SSRF: global-unicast IPv6 only, block ISATAP and special ranges and forbidden ports.
  • Route OCI pulls through Fetch, so every registry and CDN hop gets SSRF checks.
  • Stop registry responses from redirecting fetches through oci:// targets or crafted AUR paths.
  • Refuse off-registry PURLs with the new RegistryError::OffRegistry.
  • Stop third-party namespaces (PPA, tap, Conda, CPAN, JSR) from borrowing official records.
  • Require exact Maven and NuGet coordinate matches, rejecting look-alike artifacts.
  • Read Chrome Web Store stats only from store-rendered text, not developer-controlled fields.
  • Reject % in filename parts, blocking double-encoded path traversal.
  • Verify openSUSE mirror indexes and OCI manifests against their published digests.
  • Parse OCI references and digests strictly, and require HTTPS token realms.
  • Stop serving stale cache on 404/410/451, so removed malware stays visibly removed.
  • Length-prefix cache key parts, preventing URL/header key collisions.
  • Create cache and spool files 0600/0700 with create_new, preventing symlink write-through.
  • Cache sweeper skips roots owned by other users and refuses unexpected directories.
  • Cap in-memory bodies, sidecar JSON, index lines and xz decoder memory.
  • Add per-batch registry request and byte budgets with a one-hour deadline.
  • Clamp Retry-After to 24 hours, preventing overflow panics.
  • Error on distro index decompression over 512 MiB instead of silently truncating.
  • Share one decompression budget across OCI layers and add a 30-minute flatten deadline.
  • Match containerd OCI layering: last duplicate wins, whiteouts and directory replacement honored.
  • Refuse ambiguous OCI tar entries and build fresh headers, preventing forged rootfs entries.
  • Reject metacharacters and templated variables in install tokens, preventing forged PURLs.
  • Stop reporting identifiers, redirects, subshells and runner arguments as package names.
  • Recognize quoted packages, glued pipes and line continuations in install commands.
  • Scan scripts containing invalid UTF-8 instead of skipping them.
  • Raise the JS/Python AST node limit from 100k to 8M nodes.
  • Escape PURLs in fletch registry errors.

Features

  • Resolve child_process and VS Code ShellExecution commands through constants, templates and imports.
  • Report npm GitHub specs (github:o/r#rev) as pkg:github PURLs.
  • Scan Dockerfile exec-form instructions and UTF-16 Shell, Dockerfile and PowerShell scripts.
  • Recognize path-qualified and Windows tool names like /opt/venv/bin/pip and npm.cmd.
  • Accept uppercase URL schemes and IP:port targets for bare curl/wget/iwr.
  • Report Go /... install patterns by base path.
  • Add a per-request max_bytes ceiling.

Optimizations

  • Replace oci-client with a built-in client, dropping about 65 crates including aws-lc-sys.
  • Pull OCI blobs four at a time on scoped threads instead of a runtime per pull.
  • Make OCI whiteout checks, distro XML scanning and bare-URL scanning linear.
  • Build Python import alias maps once per file instead of per call.