634 wachtwoorden in 56 seconden
Een ontwikkelaar doorliep twee sollicitatierondes bij een nepbedrijf. Echte website, echte gezichten, echte technische gesprekken. Toen kwam de codeeropdracht. Binnen een minuut waren alle Chrome-wachtwoorden, de macOS Keychain en crypto wallet-data weg.
Een ontwikkelaar — securitybewust, ervaren, iemand die actief op zoek gaat naar oplichting — doorliep een meerdere fasen tellend sollicitatieproces bij een nepbedrijf. HR-gesprek. Technisch interview met twee engineers. Echte website met teamfoto's. Echte LinkedIn-profielen. Wekenlang relatiebeheer.
Daarna werd gevraagd om tijdens een schermgesprek een kleine codeeropdracht uit te voeren.
56 seconden later hadden de aanvallers 634 opgeslagen Chrome-wachtwoorden, het macOS Keychain-bestand (dat de sleutel bevat om ze te ontsleutelen) en MetaMask wallet-data.
Hoe de aanval werkte
De GitHub-repo zag er schoon uit. Een paar backend-bestanden, niets verdachts. Maar één dependency — winston-middleware, een onschuldig klinkend logging-pakket — had zelf een dependency: next-runtimejs.
Daar zat de wapening.
Op het moment dat npm install draaide, voerde een shell-script zichzelf uit. Geen meldingen, geen waarschuwingen. Het downloadde een in Go geschreven backdoor en registreerde die om bij elke boot automatisch te starten.
Dit was geen script kiddie-tool. Een eigen RC4-versleuteld C2-protocol. Commando's voor shell-uitvoering, bestandsdiefstal, het uitlezen van Chrome-wachtwoorden, exfiltratie van de Keychain en het aanvallen van crypto wallets. Professioneel gebouwd.
De backdoor startte om 16:16:37. De Chrome-wachtwoorden werden geopend om 16:17:33. De ontwikkelaar zag een macOS-melding over een uitgaande verbinding en zette binnen een minuut WiFi uit — maar de schade was al aangericht.
Waarom het interview ertoe deed
Deze aanval zou als koude e-mail falen. "Run deze repo" van een vreemde negeer je.
Maar na twee sollicitatierondes? Nadat jullie samen hadden gelachen over hoeveel nepvacatures er op ontwikkelaars gericht zijn? Nadat een van de interviewers glimlachend zei: "Voel je vrij om naar backdoors te zoeken"?
Op dat moment laat je je verdediging zakken. Vertrouwen is de exploit. De malware is alleen de payload.
De ontwikkelaar zei het het best: "Als het mij kan overkomen, kan het iedereen in jullie team overkomen."
Wat Chrome-wachtwoorden daadwerkelijk betekenen
Chrome versleutelt opgeslagen wachtwoorden met AES. De ontsleutelingssleutel staat in de macOS Keychain. De aanvallers stalen beide bestanden binnen een minuut.
Elk opgeslagen wachtwoord — bankieren, e-mail, GitHub, cloudconsoles — was aan hun kant leesbaar. Het Keychain-bestand kan offline gekraakt worden, zonder rate limits. De ontwikkelaar moest alles roteren.
Dit is het vuile geheim van in de browser opgeslagen wachtwoorden: ze zijn versleuteld met een sleutel die op dezelfde machine staat. Compromitteer de machine, en de "encryptie" is decoratie.
Het DPRK-patroon
De ontwikkelaar noemde dat ook zijn vorige werkgever drie maanden eerder door Noord-Korea was gehackt. Dit is de "Contagious Interview"-campagne — door de Noord-Koreaanse staat gesteunde aanvallers die nep-sollicitatiegesprekken voeren om malware op machines van ontwikkelaars te installeren.
Het is niet willekeurig. Ze richten zich specifiek op ontwikkelaars vanwege wat ontwikkelaars kunnen benaderen: productie-credentials, signing keys, cloudinfrastructuur en — steeds vaker — AI-agenttokens die nog meer toegang geven.
De schaal is industrieel. Nepbedrijven met gegenereerde gezichten. Gladde websites. Sollicitatieprocessen van meerdere weken. Ze investeren omdat de ROI er is.
"Wachtwoordbeheerders helpen niet"
De ontwikkelaar deed in de thread een interessante uitspraak: "Wachtwoordbeheerders helpen niet als ze via een backdoor als deze toegang tot je computer hebben, omdat ze later elk bestand kunnen doorsturen, speciaal voor jou een exploit kunnen maken, keyloggers, screenshots."
Dat is deels juist en deels onjuist.
Een wachtwoordbeheerder die zijn kluis op je lokale schijf bewaart, ontgrendeld met een masterwachtwoord dat je zelf typt — ja, een backdoor met keylogging en bestandstoegang kan die compromitteren.
Maar een wachtwoordbeheerder met hardware-gebonden sleutels — waarbij de ontsleutelingssleutel afgeleid wordt van een fysieke authenticator en nooit als bestand op schijf bestaat — is fundamenteel anders. De backdoor kan bestanden stelen, toetsaanslagen loggen, screenshots maken. Maar hij kan geen sleutel extraheren die alleen binnen een hardware security module bestaat tijdens een fysieke aanraking.
De 634 Chrome-wachtwoorden werden gestolen omdat zowel de versleutelde data als de ontsleutelingssleutel bestanden op het filesystem waren. Als de ontsleutelingssleutel fysiek bezit van een apparaat vereist, levert bestanden stelen alleen versleutelde blobs op en verder niets.
Wat je moet doen
- Voer nooit codeeropdrachten van interviews uit op je primaire machine. Gebruik een VM of een apart apparaat.
- Draai
npm install --ignore-scriptsop elke onbekende repo voordat je iets uitvoert - Gebruik een outbound firewall (Little Snitch, LuLu) die meldt bij nieuwe verbindingen
- Stop met het opslaan van wachtwoorden in Chrome. Punt.
- Bewaar crypto op hardware wallets, niet in browserextensies
- Behandel elke codeeropdracht van een recruiter als potentieel vijandig, hoeveel gesprekken je ook gehad hebt
De ontwikkelaar overleefde doordat een macOS-melding de uitgaande verbinding op tijd zag. De meeste mensen hadden zonder nadenken op Allow geklikt.
56 seconden. Meer is er niet voor nodig.