Repository navigation
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.