[{"data":1,"prerenderedAt":336},["ShallowReactive",2],{"news-npm-angriff-chalk-debug-shai-hulud":3},{"id":4,"title":5,"author":6,"body":7,"cover":324,"date":325,"description":326,"extension":327,"hero":328,"meta":329,"navigation":330,"path":331,"seo":332,"showContactForm":333,"showTechNav":333,"stem":334,"__hash__":335},"content\u002Fnews\u002Fnpm-angriff-chalk-debug-shai-hulud.md","npm unter Beschuss: chalk, debug und der Wurm Shai-Hulud","Thomas K.",{"type":8,"value":9,"toc":317},"minimark",[10,14,19,31,34,48,53,106,110,117,121,131,184,236,260,280,284,292,296,313],[11,12,13],"p",{},"Innerhalb einer Woche wurde das npm-Ökosystem gleich zweimal schwer getroffen: erst durch gekaperte Pakete wie chalk und debug, dann durch den selbstverbreitenden Wurm Shai-Hulud. Lockfiles, gepinnte Abhängigkeiten, eine SBOM und regelmäßig rotierte CI-Secrets sind damit endgültig Pflicht für jedes Webprojekt.",[15,16,18],"h2",{"id":17},"was-ist-passiert","Was ist passiert?",[11,20,21,25,26,30],{},[22,23,24],"strong",{},"Angriff 1: chalk und debug."," Am 8. September 2025 übernahmen Angreifer das npm-Konto eines bekannten Maintainers. Der Weg dorthin war klassisches Phishing: Eine angebliche Aufforderung zum Zurücksetzen der Zwei-Faktor-Authentifizierung kam von der Domain ",[27,28,29],"code",{},"npmjs.help",", die laut Aikido erst drei Tage zuvor registriert worden war. Anschließend veröffentlichten die Angreifer manipulierte Versionen von 18 Paketen, darunter debug mit rund 358 Millionen und chalk mit rund 300 Millionen wöchentlichen Downloads. Zusammen kommen die betroffenen Pakete auf mehr als zwei Milliarden Downloads pro Woche.",[11,32,33],{},"Der Schadcode zielte auf Webanwendungen im Browser: Er klinkte sich in Netzwerkfunktionen und Wallet-Schnittstellen ein und tauschte Empfängeradressen von Kryptowährungs-Transaktionen gegen Adressen der Angreifer aus. Laut Berichten waren die manipulierten Versionen nur rund zwei Stunden verfügbar, bevor sie entfernt wurden. Wer in diesem Zeitfenster Abhängigkeiten aktualisiert und ausgeliefert hat, sollte trotzdem genau prüfen.",[11,35,36,39,40,43,44,47],{},[22,37,38],{},"Angriff 2: Shai-Hulud."," Ab dem 15. September tauchten weitere manipulierte Pakete auf, darunter ",[27,41,42],{},"@ctrl\u002Ftinycolor"," und Pakete von CrowdStrike. Diesmal ging es um Zugangsdaten. Beim Installieren startet ein ",[27,45,46],{},"postinstall","-Skript, das mit dem Werkzeug TruffleHog nach Secrets sucht, darunter GitHub- und npm-Tokens sowie Cloud-Schlüssel. Gefundene Daten landen in öffentlichen GitHub-Repositories mit dem Namen „Shai-Hulud“. Zusätzlich legt die Malware GitHub-Actions-Workflows an, die Secrets abfließen lassen, und macht private Repositories öffentlich. Findet sie npm-Tokens, veröffentlicht sie infizierte Versionen weiterer Pakete des betroffenen Maintainers. So verbreitet sie sich selbstständig wie ein Wurm. Sicherheitsforscher zählten bis zum 16. September bereits mehr als 180 kompromittierte Pakete, Tendenz steigend.",[11,49,50],{},[22,51,52],{},"So verbreitet sich Shai-Hulud:",[54,55,60],"pre",{"className":56,"code":57,"language":58,"meta":59,"style":59},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flowchart LR\n  A[\"Entwickler installiert infiziertes Paket\"] --> B[\"postinstall-Skript startet\"]\n  B --> C[\"TruffleHog sucht nach Secrets: GitHub, npm, Cloud\"]\n  C --> D[\"Secrets landen in öffentlichem Repo 'Shai-Hulud'\"]\n  C --> E[\"npm-Token gefunden?\"]\n  E -->|ja| F[\"Infizierte Versionen weiterer Pakete des Maintainers veröffentlicht\"]\n  F --> A\n","mermaid","",[27,61,62,70,76,82,88,94,100],{"__ignoreMap":59},[63,64,67],"span",{"class":65,"line":66},"line",1,[63,68,69],{},"flowchart LR\n",[63,71,73],{"class":65,"line":72},2,[63,74,75],{},"  A[\"Entwickler installiert infiziertes Paket\"] --> B[\"postinstall-Skript startet\"]\n",[63,77,79],{"class":65,"line":78},3,[63,80,81],{},"  B --> C[\"TruffleHog sucht nach Secrets: GitHub, npm, Cloud\"]\n",[63,83,85],{"class":65,"line":84},4,[63,86,87],{},"  C --> D[\"Secrets landen in öffentlichem Repo 'Shai-Hulud'\"]\n",[63,89,91],{"class":65,"line":90},5,[63,92,93],{},"  C --> E[\"npm-Token gefunden?\"]\n",[63,95,97],{"class":65,"line":96},6,[63,98,99],{},"  E -->|ja| F[\"Infizierte Versionen weiterer Pakete des Maintainers veröffentlicht\"]\n",[63,101,103],{"class":65,"line":102},7,[63,104,105],{},"  F --> A\n",[15,107,109],{"id":108},"warum-betrifft-sie-das","Warum betrifft Sie das?",[11,111,112,113,116],{},"Fast jedes moderne Webprojekt, ob Nuxt, React, Vue oder ein Node-Backend, zieht hunderte bis tausende npm-Pakete nach. Pakete wie chalk oder debug stecken als indirekte Abhängigkeit in nahezu jedem Projekt, oft ohne dass das Team sie bewusst eingebunden hat. Besonders gefährlich ist Shai-Hulud für Build-Server: CI\u002FCD-Pipelines verfügen typischerweise über Tokens für Registries, Cloud-Konten und Repositories. Ein einziges ",[27,114,115],{},"npm install"," mit der falschen Version kann genügen, um diese Zugänge preiszugeben.",[15,118,120],{"id":119},"was-sie-jetzt-tun-sollten","Was Sie jetzt tun sollten",[122,123,124],"ul",{},[125,126,127,130],"li",{},[22,128,129],{},"Betroffenheit prüfen:"," Gleichen Sie Ihre Lockfiles mit den veröffentlichten Listen kompromittierter Versionen ab, zum Beispiel so:",[54,132,136],{"className":133,"code":134,"language":135,"meta":59,"style":59},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm ls chalk debug ansi-styles supports-color --all\ngrep -n \"tinycolor\" package-lock.json\n","bash",[27,137,138,163],{"__ignoreMap":59},[63,139,140,144,148,151,154,157,160],{"class":65,"line":66},[63,141,143],{"class":142},"sBMFI","npm",[63,145,147],{"class":146},"sfazB"," ls",[63,149,150],{"class":146}," chalk",[63,152,153],{"class":146}," debug",[63,155,156],{"class":146}," ansi-styles",[63,158,159],{"class":146}," supports-color",[63,161,162],{"class":146}," --all\n",[63,164,165,168,171,175,178,181],{"class":65,"line":72},[63,166,167],{"class":142},"grep",[63,169,170],{"class":146}," -n",[63,172,174],{"class":173},"sMK4o"," \"",[63,176,177],{"class":146},"tinycolor",[63,179,180],{"class":173},"\"",[63,182,183],{"class":146}," package-lock.json\n",[122,185,186,211,217,230],{},[125,187,188,191,192,195,196,199,200,203,204,207,208,210],{},[22,189,190],{},"Lockfiles konsequent nutzen:"," Committen Sie ",[27,193,194],{},"package-lock.json",", ",[27,197,198],{},"pnpm-lock.yaml"," oder ",[27,201,202],{},"yarn.lock"," und installieren Sie in CI ausschließlich mit ",[27,205,206],{},"npm ci"," statt ",[27,209,115],{},".",[125,212,213,216],{},[22,214,215],{},"Abhängigkeiten pinnen:"," Verzichten Sie bei kritischen Projekten auf breite Versionsbereiche und aktualisieren Sie gezielt, etwa über Renovate oder Dependabot mit Review.",[125,218,219,222,223,225,226,229],{},[22,220,221],{},"Install-Skripte einschränken:"," Prüfen Sie, ob Sie ",[27,224,46],{},"-Skripte in CI deaktivieren können (",[27,227,228],{},"npm ci --ignore-scripts","), und erlauben Sie sie nur dort, wo sie wirklich nötig sind.",[125,231,232,235],{},[22,233,234],{},"SBOM erstellen:"," Eine Software-Stückliste zeigt im Ernstfall in Minuten, welche Anwendungen betroffen sind:",[54,237,239],{"className":133,"code":238,"language":135,"meta":59,"style":59},"npm sbom --sbom-format cyclonedx > sbom.json\n",[27,240,241],{"__ignoreMap":59},[63,242,243,245,248,251,254,257],{"class":65,"line":66},[63,244,143],{"class":142},[63,246,247],{"class":146}," sbom",[63,249,250],{"class":146}," --sbom-format",[63,252,253],{"class":146}," cyclonedx",[63,255,256],{"class":173}," >",[63,258,259],{"class":146}," sbom.json\n",[122,261,262,268,274],{},[125,263,264,267],{},[22,265,266],{},"Secrets rotieren:"," Wenn betroffene Versionen installiert wurden, gelten alle erreichbaren Tokens als kompromittiert. Erneuern Sie npm-, GitHub- und Cloud-Zugänge und prüfen Sie Ihre GitHub-Organisation auf Repositories namens „Shai-Hulud“ und unbekannte Workflows.",[125,269,270,273],{},[22,271,272],{},"Tokens minimieren:"," Nutzen Sie kurzlebige, fein granulierte Tokens und OIDC statt dauerhafter Schlüssel in CI.",[125,275,276,279],{},[22,277,278],{},"Phishing-resistente MFA:"," Setzen Sie für Entwickler- und Registry-Konten auf Hardware-Schlüssel oder Passkeys statt auf Einmalcodes.",[15,281,283],{"id":282},"fazit","Fazit",[11,285,286,287,210],{},"Die Angriffe zeigen, dass Lieferketten-Sicherheit kein Thema nur für Konzerne ist. Jedes Projekt mit npm-Abhängigkeiten ist Teil dieser Kette. Die gute Nachricht: Die wirksamsten Gegenmaßnahmen sind bekannt und mit überschaubarem Aufwand umsetzbar, von sauberen Lockfiles bis zu abgesicherten Pipelines. Wenn Sie Ihre Webprojekte und CI\u002FCD-Prozesse darauf prüfen lassen möchten, ",[288,289,291],"a",{"href":290},"\u002Fkontakt","sprechen Sie uns an",[15,293,295],{"id":294},"quellen","Quellen",[122,297,298,306],{},[125,299,300],{},[288,301,305],{"href":302,"rel":303},"https:\u002F\u002Fwww.aikido.dev\u002Fblog\u002Fnpm-debug-and-chalk-packages-compromised",[304],"nofollow","Aikido Security: npm debug and chalk packages compromised",[125,307,308],{},[288,309,312],{"href":310,"rel":311},"https:\u002F\u002Fwww.wiz.io\u002Fblog\u002Fshai-hulud-npm-supply-chain-attack",[304],"Wiz: Shai-Hulud – Ongoing Package Supply Chain Worm Delivering Data-Stealing Malware",[314,315,316],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":59,"searchDepth":72,"depth":72,"links":318},[319,320,321,322,323],{"id":17,"depth":72,"text":18},{"id":108,"depth":72,"text":109},{"id":119,"depth":72,"text":120},{"id":282,"depth":72,"text":283},{"id":294,"depth":72,"text":295},"\u002Fimages\u002Fnews\u002Fnpm-angriff-chalk-debug-shai-hulud.webp","2025-09-17","Gekaperte npm-Pakete wie chalk und debug und der Wurm Shai-Hulud zeigen: Lockfiles, Pinning, SBOM und rotierte CI-Secrets sind Pflicht für jedes Webprojekt.","md",null,{},true,"\u002Fnews\u002Fnpm-angriff-chalk-debug-shai-hulud",{"title":5,"description":326},false,"news\u002Fnpm-angriff-chalk-debug-shai-hulud","rbfNIkSKOoYofZyjO2GE2WAs0s7u6iSH53w9N2BPolc",1793714089597]