{"id":38042,"date":"2026-04-17T13:04:38","date_gmt":"2026-04-17T11:04:38","guid":{"rendered":"https:\/\/enginsight.com\/?p=38042"},"modified":"2026-04-17T15:30:00","modified_gmt":"2026-04-17T13:30:00","slug":"axios-npm-supply-chain-kompromittierung","status":"publish","type":"post","link":"https:\/\/enginsight.com\/de\/blog\/axios-npm-supply-chain-kompromittierung\/","title":{"rendered":"Axios NPM Supply Chain Kompromittierung"},"content":{"rendered":"<p>Am 30. M&#xE4;rz 2026 wurde das weit verbreitete NPM-Paket <em>axios<\/em> durch nordkoreanische Angreifer kompromittiert. &#xDC;ber einen &#xFC;bernommenen Maintainer-Account ver&#xF6;ffentlichten sie zwei manipulierte Versionen, die den Remote-Access-Trojaner &#x201E;WAVESHAPER.V2&#x201C; f&#xFC;r Windows, macOS und Linux enthielten.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Enginsight nutzt das Paket ebenfalls, hatte die spezifische, kompromittierte Version (1.14.1) aber nicht installiert und ist somit nicht betroffen!<\/strong><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Betroffene-Versionen-und-Sicherheitskennungen\">Betroffene Versionen und Sicherheitskennungen<\/h2>\n\n\n\n<p>Zwei manipulierte axios-Versionen wurden &#xFC;ber den kompromittierten Account ver&#xF6;ffentlicht, beide mit einer neuen b&#xF6;sartigen Abh&#xE4;ngigkeit <code>plain-crypto-js<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Paket<\/th><th>Version<\/th><th>npm-Tag<\/th><th>Status<\/th><\/tr><tr><td><strong>axios<\/strong><\/td><td><strong>1.14.1<\/strong><\/td><td>latest<\/td><td>Entfernt durch npm<\/td><\/tr><tr><td><strong>axios<\/strong><\/td><td><strong>0.30.4<\/strong><\/td><td>legacy<\/td><td>Entfernt durch npm<\/td><\/tr><tr><td><strong>plain-crypto-js<\/strong><\/td><td><strong>4.2.1<\/strong><\/td><td>&#x2014;<\/td><td>Security Hold, ersetzt durch Stub 0.0.1-security.0<\/td><\/tr><tr><td>plain-crypto-js<\/td><td>4.2.0<\/td><td>&#x2014;<\/td><td>Sauberes T&#xE4;uschungspaket (18h vorher ver&#xF6;ffentlicht)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Sichere Versionen:<\/strong> <code>axios@1.14.0<\/code> (letztes legitimes 1.x-Release) und axios@0.30.3 (letztes legitimes 0.x-Release). Weitere betroffene Pakete im &#xD6;kosystem: @shadanai\/openclaw (mehrere Versionen) und @qqbrowser\/openclaw-qbot@0.0.130, die den manipulierten axios transitiv auslieferten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ablauf des Angriffs<\/h2>\n\n\n\n<p>Die Angriffskette begann mit der Vorbereitung einer b&#xF6;sartigen Abh&#xE4;ngigkeit. Der Angreifer ver&#xF6;ffentlichte zun&#xE4;chst das Paket plain-crypto-js als nahezu identischen Klon von crypto-js, um Vertrauen aufzubauen und eine unauff&#xE4;llige Historie in der npm-Registry zu erzeugen. Wenige Stunden sp&#xE4;ter folgte eine neue Version, die ein manipuliertes postinstall-Skript enthielt.<\/p>\n\n\n\n<p>Anschlie&#xDF;end wurden zwei scheinbar legitime <em>axios<\/em>-Versionen ver&#xF6;ffentlicht. Der einzige Unterschied bestand darin, dass sie die pr&#xE4;parierte Abh&#xE4;ngigkeit plain-crypto-js einbanden. Der eigentliche Schadcode befand sich somit nicht direkt in <em>axios<\/em>, sondern versteckt in dieser transitiven Abh&#xE4;ngigkeit.<\/p>\n\n\n\n<p>Beim Ausf&#xFC;hren von npm install wurde automatisch das b&#xF6;sartige <em>postinstall<\/em>-Skript gestartet. Dieses war stark verschleiert, entschl&uuml;sselte sich zur Laufzeit und lud ben&ouml;tigte Systemfunktionen dynamisch nach. Danach identifizierte es das Betriebssystem und nahm Kontakt zu einem Command-&amp;-Control-Server auf.<\/p>\n\n\n\n<p>Im n&#xE4;chsten Schritt wurde je nach Plattform ein passender Remote-Access-Trojaner nachgeladen und ausgef&#xFC;hrt. Dabei nutzte der Angreifer Tarntechniken, etwa unauff&#xE4;llige Domainnamen, um die Kommunikation weniger verd&#xE4;chtig erscheinen zu lassen.<\/p>\n\n\n\n<p>Abschlie&#xDF;end f&#xFC;hrte die Malware Anti-Forensik-Ma&#xDF;nahmen durch. Dabei l&#xF6;schte das Installationsskript sich selbst und manipulierte Dateien so, dass die Installation wie eine harmlose Version wirkte. Sicherheitspr&#xFC;fungen wie npm audit schlugen daher nicht an. Der einzige verbleibende Hinweis auf eine Kompromittierung war das Vorhandensein des verd&#xE4;chtigen Pakets im node_modules-Verzeichnis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Indicators of Compromise<\/h2>\n\n\n\n<p><strong>Malicious npm Packages<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>axios@1.14.1 &#xB7; shasum: 2553649f2322049666871cea80a5d0d6adc700ca<\/li>\n\n\n\n<li>axios@0.30.4 &#xB7; shasum: d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71<\/li>\n\n\n\n<li>plain-crypto-js@4.2.1 &#xB7; shasum: 07d889e2dadce6f3910dcbc253317d28ca61c766<\/li>\n<\/ul>\n\n\n\n<p><strong>Network Indicators<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C2 domain &#xB7; <a href=\"http:\/\/sfrclak.com\" target=\"_blank\" rel=\"noopener\">sfrclak.com<\/a><\/li>\n\n\n\n<li>C2 IP &#xB7; 142.11.206.73<\/li>\n\n\n\n<li>C2 URL &#xB7; <a href=\"http:\/\/sfrclak.com:8000\/6202033\" target=\"_blank\" rel=\"noopener\">http:\/\/sfrclak.com:8000\/6202033<\/a><\/li>\n\n\n\n<li>C2 POST body (macOS) &#xB7; <a href=\"http:\/\/packages.npm.org\/product0\" target=\"_blank\" rel=\"noopener\">packages.npm.org\/product0<\/a><\/li>\n\n\n\n<li>C2 POST body (Windows) &#xB7; <a href=\"http:\/\/packages.npm.org\/product1\" target=\"_blank\" rel=\"noopener\">packages.npm.org\/product1<\/a><\/li>\n\n\n\n<li>C2 POST body (Linux) &#xB7; <a href=\"http:\/\/packages.npm.org\/product2\" target=\"_blank\" rel=\"noopener\">packages.npm.org\/product2<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>File System Indicators<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>macOS &#xB7; \/Library\/Caches\/com.apple.act.mond<\/li>\n\n\n\n<li>Windows (persistent) &#xB7; %PROGRAMDATA%\\wt.exe<\/li>\n\n\n\n<li>Windows (temp, self-deletes) &#xB7; %TEMP%\\6202033.vbs<\/li>\n\n\n\n<li>Windows (temp, self-deletes) &#xB7; %TEMP%\\6202033.ps1<\/li>\n\n\n\n<li>Linux &#xB7; \/tmp\/ld.py<\/li>\n<\/ul>\n\n\n\n<p><strong>Attacker-Controlled Accounts<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>jasonsaayman &#xB7; compromised legitimate axios maintainer, email changed to <a href=\"mailto:ifstap@proton.me\">ifstap@proton.me<\/a><\/li>\n\n\n\n<li>nrwise &#xB7; attacker-created account, <a href=\"mailto:nrwise@proton.me\">nrwise@proton.me<\/a>, published plain-crypto-js<\/li>\n<\/ul>\n\n\n\n<p>Quelle: <a href=\"https:\/\/www.stepsecurity.io\/blog\/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan#indicators-of-compromise\" target=\"_blank\" rel=\"noopener\">https:\/\/www.stepsecurity.io\/blog\/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan#indicators-of-compromise<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erkennung durch Enginsight SIEM<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Die Streams wurden anhand der unten aufgef&#xFC;hrten Quellen erarbeitet. Da das Paket nicht mehr zur Verf&#xFC;gung steht, konnten bisher keine Tests durchgef&#xFC;hrt werden.<\/strong><\/pre>\n\n\n\n<p><strong>Kill Chain Windows:<\/strong><\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Der Entwickler hat auf axios@1.14.1 aktualisiert, wodurch automatisch der postinstall- Hook, &#xFC;ber das Paket plain-crypto-js ausgef&#xFC;hrt wird. Dadurch erzeugt node eine cmd.exe oder cscript.exe als Kindprozess<br><code>sysmon.EventID:&quot;1&quot; AND sysmon.ParentImage_str:&quot;node&quot; AND (sysmon.Image_str:&quot;cmd.exe&quot; OR sysmon.Image_str:&quot;cscript.exe&quot;)<\/code><\/li>\n\n\n\n<li>Es wird eine Verbindung zum C2 Server aufgebaut (siehe Indicators of Compromise) <code>sysmon.EventID:&quot;3&quot; AND gen.dest.ip_str: &quot;142.11.206.73&quot; AND (gen.dest.port:&quot;8000&quot; OR gen.dest.port:&quot;3000&quot;)<\/code><\/li>\n\n\n\n<li>Es wird eine unbenannte Powershell-Kopie wt.exe und eine versteckte Batch Datei system.bat (als Fallback Loader) in %PROGRAMDATA% abgelegt. %PROGRAMDATA% erfordert keine Admin-Rechte und wird von vielen AV-L&#xF6;sungen weniger restriktiv behandelt.<br><code>sysmon.EventID:&quot;11&quot; AND sysmon.TargetFilename_str:in(&quot;C:\\ProgramData\\wt.exe&quot;, &quot;C:\\ProgramData\\system.bat&quot;)<\/code><\/li>\n\n\n\n<li>Als letzten Schritt schreibt der Dropper den Registry-Eintrag HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\MicrosoftUpdate mit dem Wert %PROGRAMDATA%\\system.bat Damit wird sichergestellt, dass system.bat bei jedem Login des aktuellen Benutzers automatisch ausgef&#xFC;hrt wird<br><code>sysmon.EventID:&quot;13&quot; AND sysmon.TargetObject_str: &quot;\\CurrentVersion\\Run\\MicrosoftUpdate&quot;<\/code><\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<p>Quellen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/gist.github.com\/N3mes1s\/0c0fc7a0c23cdb5e1c8f66b208053ed6\" target=\"_blank\" rel=\"noopener\">https:\/\/gist.github.com\/N3mes1s\/0c0fc7a0c23cdb5e1c8f66b208053ed6<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.elastic.co\/security-labs\/axios-one-rat-to-rule-them-all\" target=\"_blank\" rel=\"noopener\">https:\/\/www.elastic.co\/security-labs\/axios-one-rat-to-rule-them-all<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Am 30. M&#xE4;rz 2026 wurde das weit verbreitete NPM-Paket axios durch nordkoreanische Angreifer kompromittiert. &#xDC;ber einen &#xFC;bernommenen Maintainer-Account ver&#xF6;ffentlichten sie zwei manipulierte Versionen, die den Remote-Access-Trojaner &#x201E;WAVESHAPER.V2&#x201C; f&#xFC;r Windows, macOS und Linux enthielten. Enginsight nutzt das Paket ebenfalls, hatte die spezifische, kompromittierte Version (1.14.1) aber nicht installiert und ist somit nicht betroffen! Betroffene Versionen und [&#x2026;]<\/p>\n","protected":false},"author":34,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_eb_attr":"","footnotes":""},"categories":[334],"tags":[],"class_list":["post-38042","post","type-post","status-publish","format-standard","hentry","category-schwachstellen"],"_links":{"self":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/38042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/comments?post=38042"}],"version-history":[{"count":4,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/38042\/revisions"}],"predecessor-version":[{"id":38067,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/38042\/revisions\/38067"}],"wp:attachment":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/media?parent=38042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/categories?post=38042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/tags?post=38042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}