{"id":97674,"date":"2025-05-09T19:11:11","date_gmt":"2025-05-09T19:11:11","guid":{"rendered":"https:\/\/www.europesays.com\/de\/97674\/"},"modified":"2025-05-09T19:11:11","modified_gmt":"2025-05-09T19:11:11","slug":"remote-access-trojaner-in-npm-paket-mit-40-000-woechentlichen-downloads-gefunden","status":"publish","type":"post","link":"https:\/\/www.europesays.com\/de\/97674\/","title":{"rendered":"Remote-Access-Trojaner in npm-Paket mit 40.000 w\u00f6chentlichen Downloads gefunden"},"content":{"rendered":"<p>Auf npm sind kompromittierte Varianten des Pakets &#8222;rand-user-agent&#8220; aufgetaucht, die einen Remote-Access-Trojaner (RAT) an Bord hatten. Der Random User Agent ist zwar als veraltet gekennzeichnet, kommt aber nach wie vor auf gut 40.000 w\u00f6chentliche Downloads. Wer es in den vergangenen Wochen verwendet hat, k\u00f6nnte sich Schadcode eingefangen haben.<\/p>\n<p>Das Paket generiert User-Agents-Strings, also Zeichenketten, die Clients wie Browser an einen Server schicken. Der Herausgeber des Pakets WebScrapingAPI nutzt es f\u00fcr das Web-Scraping. Es l\u00e4sst sich aber auch f\u00fcr andere Zwecke wie automatisierte Tests oder Sicherheitschecks verwenden.<\/p>\n<p>Schleichende Updates mit Trojaner<\/p>\n<p>Die <a href=\"https:\/\/www.npmjs.com\/package\/rand-user-agent?activeTab=readme\" rel=\"external noopener\" target=\"_blank\">letzte offizielle Version 2.0.82<\/a> ist sieben Monate alt, und der Herausgeber WebScrapingAPI hat das Paket als deprecated (veraltet) gekennzeichnet. Das auf der npm-Seite verlinkte GitHub-Repository existiert inzwischen nicht mehr.<\/p>\n<p>Das auf Supply-Chain-Security spezialisierte Unternehmen aikido hat jedoch <a href=\"https:\/\/www.aikido.dev\/blog\/catching-a-rat-remote-access-trojian-rand-user-agent-supply-chain-compromise\" rel=\"external noopener\" target=\"_blank\">sp\u00e4ter ver\u00f6ffentlichte Versionen des Pakets auf npm gefunden<\/a>. Diese haben in der Datei dist\/index.js Schadcode eingef\u00fchrt, der in der Vorschau auf npm nicht auf Anhieb zu sehen und zudem mehrfach verschleiert war.<\/p>\n<p>Der Code richtet einen verdeckten Kanal zur Kommunikation mit einem Command-and-Control-Server (C2) ein und installiert Module in einem Ordner namens .node_modules. Der Client schickt anschlie\u00dfend unter anderem eine ID und Informationen zum verwendeten Clientbetriebssystem an den Server.<\/p>\n<p>Der Remote-Access-Trojaner listet hilfreich folgende Funktionen auf:<\/p>\n<p>| Command         | Purpose                                                       |<br \/>\n| &#8212;&#8212;&#8212;&#8212;&#8212; | &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- |<br \/>\n| cd              | Change current working directory                              |<br \/>\n| ss_dir          | Reset directory to script\u2019s path                              |<br \/>\n| ss_fcd:   | Force change directory to                               |<br \/>\n| ss_upf:f,d      | Upload single file f to destination d                         |<br \/>\n| ss_upd:d,dest   | Upload all files under directory d to destination dest        |<br \/>\n| ss_stop         | Sets a stop flag to interrupt current upload process          |<br \/>\n| Any other input | Treated as a shell command, executed via child_process.exec() |<\/p>\n<p>Windows bekommt einen vermeintlichen Python-Pfadeintrag als Extra<\/p>\n<p>Zus\u00e4tzlich legt das Initialisierungsskript unter Windows einen neuen Ordner an und f\u00fcgt ihn an den Start der Umgebungsvariablen PATH ein. Der Ordnername Python3127 soll suggerieren, dass es sich um einen offiziellen Ordner f\u00fcr die Programmiersprache handelt, und so Schadcode als vermeintliche Python-Tools erscheinen und sich wom\u00f6glich durch offizielle Python-Distributionen aufrufen lassen:<\/p>\n<p>const Y = path.join(<br \/>\n  process.env.LOCALAPPDATA || path.join(os.homedir(), &#8218;AppData&#8216;, &#8218;Local&#8216;),<br \/>\n  &#8218;Programs\\\\Python\\\\Python3127&#8216;<br \/>\n)<br \/>\nenv.PATH = Y + &#8218;;&#8216; + process.env.PATH<\/p>\n<p>Die kompromittierten Pakete sind inzwischen wieder von npm entfernt worden. Sie trugen die Versionsnummern 2.083, 2.084 und 1.0.110. Wer in den vergangenen Monaten das Paket verwendet hat, sollte \u00fcberpr\u00fcfen, ob sich Schadcode auf dem Rechner befindet oder eine Kommunikation mit dem C2 stattgefunden hat. Folgende Adressen und Protkolle nutzt der Schadcode:<\/p>\n<p>| Usage              | Endpoint                        | Protocol\/Method            |<br \/>\n| &#8212;&#8212;&#8212;&#8212;&#8212;&#8212; | &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- | &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; |<br \/>\n| Socket Connection  | http:\/\/85.239.62[.]36:3306      | socket.io-client           |<br \/>\n| File Upload Target | http:\/\/85.239.62[.]36:27017\/u\/f | HTTP POST (multipart\/form) |<\/p>\n<p>    Update<\/p>\n<p>    09.05.2025,<\/p>\n<p>  15:00<\/p>\n<p>      Uhr<\/p>\n<p>Die Adressen f\u00fcr den Remote Access wurden erg\u00e4nzt.<\/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","protected":false},"excerpt":{"rendered":"Auf npm sind kompromittierte Varianten des Pakets &#8222;rand-user-agent&#8220; aufgetaucht, die einen Remote-Access-Trojaner (RAT) an Bord hatten. Der Random&hellip;\n","protected":false},"author":2,"featured_media":97675,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135],"tags":[29,30,196,39447,39452,39453,39448,190,189,1687,39449,445,39450,194,191,39451,193,192],"class_list":{"0":"post-97674","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-npm","13":"tag-paketmanager","14":"tag-python","15":"tag-science","16":"tag-science-technology","17":"tag-security","18":"tag-software-supply-chain","19":"tag-softwareentwicklung","20":"tag-supply-chain-security","21":"tag-technik","22":"tag-technology","23":"tag-trojaner","24":"tag-wissenschaft","25":"tag-wissenschaft-technik"},"share_on_mastodon":{"url":"https:\/\/pubeurope.com\/@de\/114479463430410858","error":""},"_links":{"self":[{"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/posts\/97674","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=97674"}],"version-history":[{"count":0,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/posts\/97674\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/media\/97675"}],"wp:attachment":[{"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/media?parent=97674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/categories?post=97674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.europesays.com\/de\/wp-json\/wp\/v2\/tags?post=97674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}