Changelog
Current channels: stable 2.0.0 (aur-scanner / ks-aur-scanner). See
Install for how the channels differ. Every release tag is
GPG-signed — verify with git verify-tag v<version>.
This page tracks notable changes. The format follows Keep a Changelog; full per-release notes live on GitHub Releases.
2.0.0 — 2026-06-17 (stable)
Major release. Promotes the 1.2.0-rc1 line to stable. The default scan is
unchanged — fully offline and static; everything new is opt-in or additive.
Install with paru -S aur-scanner.
Added — opt-in threat intelligence
- VirusTotal & URLhaus lookups. With
enable_threat_intelset and your own key, the scanner checks declaredsha256sumsagainst VirusTotal andsource=URLs against abuse.ch/URLhaus, emittingTI-VT-001/TI-URLHAUS-001on a malicious verdict. Off by default — only already-public hashes/URLs are sent, every lookup fails open, and all egress is isolated in one auditable file. See Threat Intelligence. The VirusTotal-by-hash idea came from @SuitablyMysterious (#9). - Active verdict cache. The per-user, MAC-authenticated cache now backs threat-intel lookups so repeat scans respect VirusTotal’s request quota; transient failures are never cached as a verdict.
Added — broader coverage & integrations
- Every maintained AUR helper is covered by the
systemaudit and the pacman hook — yay, paru, pikaur, aura, pakku, trizen, aurutils, rua, pat-aur — at each helper’s real PKGBUILD location. The shell integration also wrapspikaur/trizen/pakkualongsideparu/yay. - Nushell integration (
install/integration.nu) joins bash/zsh/fish. --no-colorglobal flag (andNO_COLORenv) for clean output in logs/CI.
Changed
-c/--confignow applies to every command, includingsystem— so a threat-intel config can VT-check every installed AUR package, not justscan.
1.2.0-rc1 — 2026-06-17 (release candidate — promoted to 2.0.0)
The release candidate that became 2.0.0 above. Lived in the
repository while it baked, then
shipped as stable 2.0.0.
1.1.0 — 2026-06-15 (stable)
Stable. Promotes the 1.1.0 release-candidate line and adds a second hardening wave that closes the residual evasion classes from an adversarial self-audit. Install with paru -S aur-scanner.
Detection — evasion classes closed
- Variable-indirection (taint pass). A fetch/exec hidden behind a shell variable now resolves and is flagged — it used to trip nothing.
- Case-insensitive analyzers, host-aware URL/IOC matching, and a supply-chain / packaging-metadata analyzer (dependency confusion, core-package displacement, signature theatre, sensitive
backup=, malformed hashes). - Quote-aware printed-message filtering (a
;inside a quotedechono longer false-positives).
Hardening
- Authenticated cache verdicts (per-user MAC), an allowlisted
makepkgbuild environment,--forcecan never override an unscannable package, and--localonly attributes a verdict to a name that provably matches.
Quality
- A self-adversarial evasion fuzzer runs as a release gate — every malicious fixture is mutated through semantics-preserving evasion transforms and the gate must still block each variant.
Threat reports that informed this line: #2 (@LunarEclipse363) and #10 (@zebulon2).
1.1.0-rc2 — 2026-06-14 (release candidate)
Proactive detection expansion, prompted by a live obfuscated AUR campaign. Try
it with paru -S aur-scanner-rc.
Anti-evasion
- De-obfuscation pass. A new wave hid a
bun add <js-payload>in apost_installhook using ANSI-C quoting ($'\x63') and adjacent-quote word-splitting ("b"'u''n') — the previous RC caught it only as a generic high “hex payload.” The scanner now decodes ANSI-C escapes and collapses quote-splitting, then runs every rule against the decoded text, so the whole catalog resists this evasion at once. That sample is now correctly flagged critical.
Detection — catalog 72 → 106 codes
- Reverse/bind shells beyond bash/nc: perl, php, ruby/lua/awk, node, openssl
s_client,mkfifobackpipe, busybox-nc/telnet/ncat-ssl. - Exfiltration: DNS tunnelling, HTTP upload, Slack/Teams webhooks, anonymous file-drop/tunnel hosts, environment dumps, cloud/CI credential + keyring/wallet access.
- Auth & system tampering: privileged-account creation, password changes,
writes to the auth database, doas/NOPASSWD, PAM, pacman
SigLevel=Never, disabling security controls, rogue CA trust anchors. - Supply-chain trust: pacman-key / gpg key imports, package-index overrides, obfuscated IPs in source URLs.
- More obfuscation & RCE forms: printf assembly, base32/16 decode, interpreter
here-strings,
sh -c "$(curl)", detachedsetsid/nohup.
Other
aur-scan installcleans up its own build directory after a successful install (--keep-buildto retain).
1.1.0-rc1 — 2026-06-13 (release candidate)
Security-hardening release resolving a full security & quality audit. Try it with
paru -S aur-scanner-rc; read the behavior changes before pointing automation at it.
⚠️ Behavior changes (read before upgrading)
- The scanner now fails closed. The
paru/yaywrapper and the pacman hook previously continued past a fetch/scan error, a timeout, or a non-interactive prompt; they now deny in those cases. If you driveparu/yayfrom a script, cron, or CI (no TTY), an install that can’t be fully analyzed is refused rather than silently proceeding. A security gate that fails open is not a gate. scan --format json/--format sarifemit only the machine document on stdout. The human-readable summary moved to stderr, soaur-scan scan --format json | jqworks. If you scraped the summary out of stdout, read stderr instead.
Security
- Input-validation chokepoint for package names/bases — illegal identifiers are rejected before they can become URL path segments or filesystem paths, closing a path-traversal vector and request-injection into the AUR RPC.
- Network hardening: redirects refused, HTTPS-only enforced, response bodies size-capped (streaming), all RPC URLs percent-encoded.
- Pacman hook drops root (groups → gid → uid, verified irreversible) before reading user cache files, validates names, and refuses symlinked PKGBUILDs.
- Detection-evasion fixes: backslash-newline line-continuation splicing;
quote- and comment-aware brace scanning (no more
echo "}"/# }truncation); broadened reverse-shell and bare crypto-address detection; checksum SKIP-laundering closed across all hash arrays. - Dependency advisory RUSTSEC-2026-0007 resolved (
bytes→ 1.11.1).
Added
SRC-007: warns when a VCS source isn’t pinned to a commit (Low).- CLI integration suite that runs the real binary against PKGBUILD fixtures.
- CI (format, clippy-as-error, tests, release build) and
cargo-denysupply-chain gating, plus a weekly advisory scan. - The rolling
aur-scanner-gitpackage now verifies the signed HEAD commit at build time.
Fixed
- False positive: a printed
note "...~/.config/..."message no longer tripsHIDDEN-001(it mentions a path; it doesn’t write one) — seen ongoogle-chromeandvisual-studio-code-bin. - Parser:
source+=(...)appends are no longer dropped; inline comments are handled quote-aware; single-line function bodies are captured. - Cache writes are atomic (
0600) in an owner-only (0700) directory, entries are key-bound, and a corrupt entry is a miss rather than trusted data. - Provenance store distinguishes an absent baseline from a corrupt one.
- Removed a panicking
AurClient::default()and a responseunwrap.
1.0.3 and earlier
Released before this changelog was introduced. See the
GitHub Releases for
1.0.3 (race-free install, dependency-tree SBOM), 1.0.1 (INSTALL-004 —
language package managers in install hooks), and 1.0.0 (first public release).