Kerättävää ei pitäisi olla
Kompromoitu Bitwarden CLI keräsi SSH-avaimia, pilvivaltuuksia ja npm-tunnuksia 334 kehittäjän koneelta. Varsinainen ongelma ei ole se, miten haittaohjelma pääsi sisään. Ongelma on se, että jokainen salaisuus istui siinä tavallisena tiedostona, valmiina luettavaksi.
Eilen Bitwardenin CLI:n kompromoitu versio keräsi SSH-avaimia, AWS-valtuuksia, npm-tunnuksia, ympäristömuuttujia, komentorivihistoriaa ja Git-salaisuuksia 334 kehittäjän koneelta.
Tänään kyseessä oli Bitwarden. Viime kuussa Axios. Sitä ennen Checkmarx. Huomenna se on VS Code -laajennus, tai Acrobat, tai Homebrew-kaava, tai Docker-kuva. Vektori vaihtuu viikoittain. Tulos on aina sama.
Haittaohjelma saapuu. Se lukee ~/.ssh/. Se lukee ~/.aws/credentials. Se lukee ~/.npmrc. Se lukee ~/.git-credentials. Se lukee komentorivihistorian, ympäristömuuttujat, selainten salasanavarastot. Se pakkaa kaiken ja lähettää sen C2-palvelimelle.
Ja se toimii. Joka kerta.
Keruu
Bitwardenin hyötykuorma — 10 Mt:n sekoitettu tiedosto nimeltä bw1.js — ei yrittänyt murtaa salausta. Sitä ei edes tarvittu. Tässä on se, mitä se keräsi, Socketin ja Aikidon dokumentoimana:
- SSH-avaimet ja isäntäkoneiden sormenjäljet
- AWS:n, GCP:n ja Azuren pilvivaltuudet
- npm:n todennustunnukset
- Git-valtuudet ja etäosoitteet
- Ympäristömuuttujat
- Komentorivihistoria
- Claude Code -todennus ja MCP-konfiguraatiot
Sen jälkeen se käytti varastettuja npm-tunnuksia uudelleenjulkaistakseen muita uhrin ylläpitämiä paketteja ja levittäytyen näin edelleen. Uhreista tuli vektoreita.
Mikään tästä ei vaatinut salauksen murtamista. Jokainen näistä salaisuuksista oli tiedosto tiedostojärjestelmässä, jonka mikä tahansa käyttäjän oikeuksin toimiva prosessi voi lukea.
Tämä ei ole Bitwarden-tarina
Bitwardenin holvin salausta ei murrettu. Heidän zero knowledge -arkkitehtuurinsa piti. Haittaohjelma ei koskaan koskettanut holvia.
Sitä ei ollut tarvetta.
Holvi suojaa sen sisältöä. Mutta SSH-avaimet eivät olleet holvissa. AWS-valtuudet eivät olleet holvissa. npm-tunnukset, Git-valtuudet, .env-tiedostojen API-avaimet — mikään näistä ei elä salasanojen hallintaohjelmissa. Ne elävät dotfile-tiedostoissa, tekstimuodossa, jokaisen kehittäjän koneella.
Hyökkääjä ymmärsi tämän. Holvi on lukittu kassakaappi talossa, jossa jokainen laatikko on auki.
Todellinen hyökkäyspinta
Avaa pääte juuri nyt. Katso, mitä koneellanne on.
~/.ssh/id_ed25519 — yksityinen avaimenne. Tekstimuotoinen tiedosto.
~/.aws/credentials — pilvikäyttöoikeutenne. Tekstimuotoinen tiedosto.
~/.npmrc — julkaisutunnuksenne. Tekstimuotoinen tiedosto.
~/.git-credentials — reposiinne käyttöoikeutenne. Tekstimuotoinen tiedosto.
~/.env kymmenessä projektihakemistossa — API-avaimet, tietokannan salasanat, allekirjoitussalaisuudet. Kaikki tekstimuotoisia tiedostoja.
Mikä tahansa käyttäjänänne oikeuksin toimiva prosessi voi lukea kaiken tämän. Ei tarvita oikeuksien laajentamista. Ei tarvita hyödyntämiskoodia. Riittää cat.
Tämä on kehittäjän oletusasetus vuonna 2026. Laitamme salasanat salattuun holviin ja jätämme kaiken muun suojaamatta.
Väärä kysymys
Jokaisen toimitusketjuhyökkäyksen jälkeen ala kysyy samaa kysymystä: miten estämme haittaohjelman pääsyn sisään?
Parempi CI/CD-turvallisuus. Koodin allekirjoitus. Riippuvuuksien skannaus. Eristetyt ajoympäristöt. Nämä ovat kaikki hyviä. Mikään niistä ei ole riittävä. Hyökkäyspinta on liian laaja. Vektoreita on liian monia — paketinhallinta, selainlaajennukset, IDE-liitännäiset, OAuth-sovellukset, kompromoidut työkalut. Te ette voi sulkea jokaista sisääntulopistettä.
Oikea kysymys on: kun haittaohjelma väistämättä saa suoritusoikeuden kehittäjän koneelle, mitä se löytää?
Jos vastaus on "satoja tekstimuotoisia valtuuksia ennalta arvattavissa tiedostopoluissa", toimitusketjun lujittamisella ei ole merkitystä. Pelaatte puolustusta kentällä, jonka takana maali on auki.
Kerättävää ei pitäisi olla
Korjaus ei ole parempi haittaohjelmien havaitseminen. Korjaus ei ole npm install -komennon eristäminen. Korjaus ei ole nopeampi vasteaika.
Korjaus on: salaisuuksia ei pitäisi olla olemassa tiedostoina levyllä.
SSH-avaimet, jotka johdetaan laitteistosta todennushetkellä — ei tallenneta hakemistoon ~/.ssh/. Pilvivaltuudet, jotka myönnetään istuntokohtaisesti laitteistoon sidotusta identiteetistä — ei kirjoiteta tiedostoon ~/.aws/. API-tunnukset, jotka ovat rajattuja, tilapäisiä ja laitteistolla suojattuja — eivät istu .env-tiedostoissa.
Kun valtuus on olemassa vain laitteistoturvamoduulin sisällä ja käytön aikana tilapäisessä prosessin muistissa, haittaohjelmalla ei ole mitään luettavaa. Ei tiedostoa vietäväksi. Ei dotfile-tiedostoa raavittavaksi. Prosessi käynnistyy, se ei löydä mitään, se jatkaa eteenpäin.
Tämä ei ole teoreettista. Laitteistoon sidotut valtuudet ovat olemassa jo tänään. WebAuthn PRF voi johtaa kryptografisia avaimia fyysisestä todennuslaitteen kosketuksesta — avaimia, jotka eivät koskaan koske tiedostojärjestelmää. Teknologia on olemassa. Ala vain ei ole ottanut sitä käyttöön oletuksena.
Mitä tehdä nyt
Jos Bitwardenin CLI-kompromissi vaikutti teihin:
- Vaihtakaa koneen jokainen valtuus — SSH-avaimet, pilvitunnukset, npm-tunnukset, API-avaimet, kaikki dotfile-tiedostoissa ja ympäristömuuttujissa
- Tarkistakaa, onko ylläpitämiänne npm-paketteja julkaistu uudelleen
- Tarkastakaa GitHub-aktiviteetti ja CI/CD-työnkulut luvattomien muutosten varalta
Jos ette olleet vaikutuksen alaisia, toimi on sama. Katsokaa konettanne. Laskekaa tekstimuotoiset salaisuudet. Kysykää itseltänne, mitä tapahtuu kun — ei jos — jotain haitallista suorittuu käyttäjänänne oikeuksin.
Vastauksen pitäisi olla: ei mitään. Kerättävää ei pitäisi olla.