
Technisches Dossier über den mit Nordkorea in Verbindung stehenden PolinRider-Lieferkettenangriff, das die Einschleusung von obfuskierten JS-Payloads, die Manipulation der Git-Historie, die C2-Infrastruktur sowie Anleitungen zur Behebung für 1.951 kompromittierte Repositorys dokumentiert.

Das Team von OpenSourceMalware hat eine massive Bedrohungskampagne aufgedeckt, die Malware in Repositories von GitHub-Nutzern und -Organisationen einschleust. Der Bedrohungsakteur PolinRider hat bösartige, verschleierte JavaScript-Payloads in hunderten öffentlichen GitHub-Repositories von hunderten eindeutigen Eigentümern platziert. Verwenden Sie das Tag #polinrider, um alle Bedrohungsberichte zu dieser Kampagne einzusehen, und springen Sie zum Ende dieses Blogbeitrags für die Liste der kompromittierten Repositories, einschließlich derer, die wir für sofortige Maßnahmen priorisieren. Bedenken Sie, dass das Tag die beste Möglichkeit ist, aktuelle Daten zu erhalten.
Die JavaScript-Payload wird an das Ende echter Projektkonfigurationsdateien angehängt – still und leise, nach dem legitimen Inhalt der Datei – sodass sie bei einer oberflächlichen Code-Überprüfung leicht übersehen werden kann. Der primäre Infektionsvektor scheint ein kompromittiertes npm-Paket zu sein, das während der Installation oder des Builds ausgeführt wird und sich selbst in Konfigurationsdateien im Projektstammverzeichnis einschleust. Noch schlimmer: Dieser Bedrohungsakteur hat dieselbe Technik auch verwendet, um bösartige NPM-Pakete zu erstellen.
Dieser Angriff war enorm erfolgreich: Ein kompromittiertes Open-Source-Projekt, Neutralinojs, verbreitete die Malware an Hunderte seiner Benutzer und Mitwirkenden. Neutralinojs ist ein sehr beliebtes Projekt mit 8400 Sternen, 495 Forks und Dutzenden aktiven Mitwirkenden. Dies zeigt die Macht dieser Art von Angriff: Die Bedrohung beschränkt sich nicht nur auf die ursprünglichen GitHub-Repositories, sondern erstreckt sich auf alle anderen Projekte, die diese Open-Source-Komponente verwenden.
Das OpenSourceMalware-Team hat diese Kampagne der DVRK zugeschrieben, und der Bedrohungsakteur PolinRider ist ein bekannter Mitwirkender der Lazarus-Gruppe mit Verbindungen zu den Kampagnen „Contagious Interview" und „TasksJacker".
Diese Kampagne hat seit der Erstveröffentlichung dramatisch zugenommen. Stand 2026-04-11 hat das OSM-Team 1.951 öffentliche GitHub-Repositories von 1.047 eindeutigen Eigentümern als kompromittiert bestätigt. Dies entspricht einem 2,9-fachen Anstieg in den fünf Wochen seit dem ursprünglichen Veröffentlichungsdatum (8. März: 675 Repos / 352 Eigentümer).
| Metrik | 8. März (anfänglich) | 11. April (aktuell) | Δ |
|---|---|---|---|
| Einzigartige infizierte Repositories | 675 | 1.951 | +1.276 |
| Einzigartige betroffene Eigentümer | 352 | 1.047 | +695 |
| – Einzelne Benutzer | 305 | ~930 | +625 |
| – Organisationen | 47 | ~117 | +70 |
| Beobachtete unterschiedliche Verschleierungsvarianten | 1 (rmcej%otb%) | 2 (rmcej%otb% + Cot%3t=shtP) | +1 |
| Bestätigte unterschiedliche Injektionsvektoren | 1 (Konfigurationsdatei) | 4 (Konfigurationsdatei, .vscode/tasks.json, gefälschte .woff2-Schriftart, bösartige npm-Abhängigkeit) | +3 |
| Dokumentierte unterschiedliche C2-Subdomains | 1 (260120.vercel.app) | 6+ (siehe C2-Infrastruktur) | +5 |
| Bekannte bewaffnete Take-Home-Vorlagen | 0 | 2+ (ShoeVista, StakingGame) | +2 |

In einer Folgesuche, die am 10.04.2026 begann und bis zum 11.04.2026 andauerte, machte das OSM-Team mehrere wichtige Entdeckungen:
Die Kampagne hat sich in 5 Wochen mehr als verdoppelt. Eine motorübergreifende Aufzählung mittels GitHub Code Search und Sourcegraph (mit Verfeinerung über die API-Grenze von 1000 Ergebnissen hinaus – siehe Methodik unten) ergab am ersten Tag 1.556 eindeutige kompromittierte Repos in unserem v3-Master. Eine zweite Runde am zweiten Tag fügte über npm-Paketnamen-Pivots, VS-Code-tasks.json-/Cloud-Provider-Pivots und die neu entdeckte C2-Subdomain default-configuration.vercel.app weitere 215 neue Repos hinzu. Nach Deduplizierung gegen den bestehenden affected_repos.csv-Korpus beträgt der tatsächlich bekannte Umfang nun 1.951 eindeutige Opfer-Repos / 1.047 eindeutige Eigentümer.
Eine neue Variante wurde beobachtet. PolinRider hat alle eindeutigen Fingerabdrücke seines Verschleierers rotiert, während die Architektur erhalten blieb. Die neue Variante verwendet den Signaturmarker Cot%3t=shtP (war rmcej%otb%), den Misch-Seed 1111436 (war 2857687), den sekundären Seed 3896884 (war 2667686) und den Dekoder-Funktionsnamen MDy (war _$_1e42). Diese Rotation scheint eine Ausweichreaktion auf die veröffentlichte rmcej_otb_payload-YARA-Regel zu sein. Beide Varianten sind derzeit in freier Wildbahn aktiv. Siehe Neue Variante: Cot%3t=shtP weiter unten.
Der Bedrohungsakteur infiziert frühere Opfer erneut. Mindestens ein Opfer-Repo (HassanHabibTahir/testclient) enthält Marker BEIDER Varianten in verschiedenen Dateien, was darauf hindeutet, dass die Werkzeuge des Akteurs erneut gegen zuvor kompromittierte Hosts vorgehen und den neuen Verschleierer injizieren.
PolinRider und TasksJacker haben sich operationell zusammengeschlossen. Wir haben nun direkte Beweise dafür, dass derselbe Bedrohungsakteur sowohl die Konfigurationsdatei-Injektion als auch den .vscode/tasks.json-curl-to-shell-Infektionsvektor gegen dieselbe Opferpopulation einsetzt. 22 der 101 Opfer des temp_auto_push.bat-Verbreitungsskripts haben auch bösartige .vscode/tasks.json-Dateien, und es wurden mehrere bewaffnete Take-Home-/Fake-Interview-Vorlagenprojekte identifiziert – siehe Bewaffnete Take-Home-Vorlagen weiter unten. OSM konsolidiert die beiden Cluster künftig unter #polinrider.
Zwei bewaffnete Take-Home-Testprojekte identifiziert: ShoeVista (eine gefälschte Tailwind-E-Commerce-Bewertung, die mit bösartigem tailwindcss-style-animate ^1.1.6 in client/package.json ausgeliefert wird) und StakingGame (ein gefälschtes Blockchain-/VS-Code-Automatisierungsprojekt, identifiziert durch die UUID e9b53a7c-2342-4b15-b02d-bd8b8f6a03f9 in tasks.json). Mindestens 46 + 42 Entwickler haben diese Tests versucht und wurden kompromittiert. Teil des Contagious-Interview-Lockvogel-Spielbuchs.
Fünf neue C2-Subdomains entdeckt, die in .vscode/tasks.json-curl|bash-Payloads verwendet werden, alle gehostet auf Vercel:
default-configuration.vercel.app (am häufigsten verwendet, ~106 Opferreferenzen)vscode-settings-bootstrap.vercel.appvscode-settings-config.vercel.appvscode-bootstrapper.vercel.appvscode-load-config.vercel.appAlle folgen dem Muster https://<sub>.vercel.app/settings/(mac|linux|win)?flag=<N>. Zum Abschnitt C2-Infrastruktur hinzugefügt.