- Fall eines Social-Engineering-Angriffs, bei dem ein Recruiter per LinkedIn-Nachricht Kontakt aufnahm und unter dem Vorwand, einen Lead Engineer zu suchen, um die Prüfung eines öffentlichen GitHub-Repositories bat
- Im zur Prüfung übermittelten Code war eine als Test-Suite getarnte Backdoor versteckt; die Bitte, sich ein Problem mit „deprecated Node modules“ anzusehen, war ein Köder, um
npm installauszuführen - Da Verdacht aufkam, wurde der Code nicht lokal, sondern auf einem temporären VPS mit einem schreibgeschützten Agenten geprüft, woraufhin die problematische Datei innerhalb von Sekunden erkannt wurde
- Sowohl die Commits im Repository als auch das Recruiter-Profil missbrauchten die Identität real existierender Personen und gaben sich jeweils als echter Entwickler bzw. Journalist aus dem Kunstbereich aus
- Es werden praktische Abwehrlektionen vermittelt: Misstrauen, Security Hygiene und der Einsatz eines schreibgeschützten Agenten waren wirksamer, als den Code direkt selbst zu lesen
Wie der Kontakt zustande kam
- Letzte Woche kam eine LinkedIn-Nachricht von einem Recruiter eines kleinen Krypto-Startups
- Über mehrere Tage wurden einige Nachrichten ausgetauscht, und er erklärte ein defektes Proof of Concept, für das ein Lead Engineer gebraucht werde
- Zur Prüfung schickte er ein öffentliches GitHub-Repository und bat darum, „das Problem mit deprecated Node modules zu prüfen“
- Solche Bitten zur Prüfung bestehender Codebasen sind an sich nicht ungewöhnlich, dennoch stellte sich ein ungutes Gefühl ein und erhöhte die Wachsamkeit
Vorgehen bei der Prüfung
- Statt nach dem Klonen die Abhängigkeiten zu installieren, wurde ein temporärer VPS bei Hetzner gestartet und das Repository dort geklont
- Pi wurde im schreibgeschützten Modus ausgeführt, wobei nur Dateilese-Tools aktiviert waren
- Verwendeter Befehl:
pi --tools read,grep,find,ls
- Verwendeter Befehl:
- Als der Agent gebeten wurde, die Codebasis zu prüfen und Verdachtsmomente zu markieren, blieb er fast sofort bei
app/test/index.jsstehen
Aufbau der Backdoor
- Das Repository bestand aus einem React-Frontend plus Node-Backend
- Die Falle steckte in
app/test/index.jsmit rund 250 Zeilen und war als Test-Suite getarnt - Darin wurde eine URL versteckt, indem sie in Teile zerlegt und wieder zusammengesetzt wurde
- Durch das Kombinieren von Variablen wie protocol, domain, separator, path, token und subdomain wurde
https://rest-icon-handler.store/icons/77aufgebaut
- Durch das Kombinieren von Variablen wie protocol, domain, separator, path, token und subdomain wurde
- Zwischen auskommentierten Test-Dummys war eine Payload verborgen, die alles, was der Server sendet, auf der Maschine des Nutzers ausführt
- Die Payload befand sich in Zeile 225
Auslösemechanismus
- Die Datei wartete nicht auf die Ausführung von Tests
app/index.jsführteconst test = require('./test')aus und lud bzw. startete damitapp/test/index.js
package.jsonverbandapp/index.jsmit der Startphase- Entscheidend war das
prepare-Skript: npm führtpreparenachnpm installautomatisch aus- Dadurch wurde die Backdoor bereits durch das Installieren der Abhängigkeiten ausgeführt
- Die Anweisung, das Problem mit „deprecated Node modules“ zu prüfen, war letztlich ein Köder, um
npm installauszuführen - Man hätte die Payload in einer Sandbox ausführen und eine zweite Stufe der Payload beobachten können, doch der Nachweis, dass vom Server gelieferter Code ausgeführt wird, reichte aus, um den Vorgang abzubrechen
Erste missbrauchte Identität
- Die Commits waren mit dem Namen und der E-Mail eines real existierenden Full-Stack-Entwicklers signiert
- Er verfügte über ein gewöhnliches LinkedIn-Profil, eine persönliche Website und einen seit Langem bestehenden GitHub-Account
- Unter dem Vorwand, die Codebasis übernommen zu haben, wurde dieser Entwickler kontaktiert
- Er antwortete, dass er nie für diese Firma gearbeitet habe, bereits früher auf GitHub imitiert worden sei und deshalb schon Repositories entfernt worden seien, und dass dieses Repository nichts mit ihm zu tun habe
- Er sagte außerdem, dass er selbst solche Repositories melde
- Die gesamte Commit-Historie mit 39 Commits wurde dem Namen eines Entwicklers zugeschrieben, der das Repository nie angerührt hatte
Zweite missbrauchte Identität
- Das Recruiter-Profil gehörte zu einem real existierenden Journalisten aus dem Kunstbereich, dessen Laufbahn nur kulturelle Stationen aufwies und keinerlei technische Elemente enthielt
- Als zurückgemeldet wurde, dass die Installation nicht funktioniere, verwandelte sich der nicht technische Journalist sofort in einen Experten für npm- und Node-Versionen und drängte auf die Ausführung von
npm install
Das kann jedem passieren
- Von solchen Angriffen hatte man bereits gehört und auch auf HN darüber gelesen, aber selbst zum Ziel zu werden, war dennoch überraschend
- Schon die erste Nachricht wirkte verdächtig, doch an einem müden oder hektischen Tag hätte man vielleicht
npm installausgeführt, bevor man weiter nachdachte
- Schon die erste Nachricht wirkte verdächtig, doch an einem müden oder hektischen Tag hätte man vielleicht
- LinkedIn-Nachrichten mit der Bitte, ein Repository zu prüfen, erfordern ein gewisses Maß an Vorsicht und Security Hygiene
- Die Prüfung des Codes mit einem schreibgeschützten Agenten war wirksamer, als den Code direkt selbst zu lesen
- Die Backdoor war als unbeholfener Anfänger-Code getarnt, wurde vom Agenten aber innerhalb von Sekunden erkannt
- Das Repository wurde bei GitHub und der Recruiter bei LinkedIn gemeldet, doch bislang hat sich nichts geändert und der Code ist weiterhin öffentlich verfügbar
1 Kommentare
Hacker-News-Kommentare
Ein Recruiter eines kleinen Krypto-Startups schickte ein öffentliches GitHub-Repository mit der Bitte, ein kaputtes Proof-of-Concept-Repo zu prüfen, und meinte, man solle sich das „deprecated Node modules issue“ ansehen — das Ganze stellte sich als Phishing, um zu
npm installzu verleiten, heraus.Das
prepare-Skript lief nachnpm installautomatisch und war eine Backdoor, die beliebigen, vom Server gelieferten Code lokal ausführte; dass man auf LinkedIn auf diese Weise Opfer von Phishing werden kann, wirkt erschreckend gravierend.$companyzu arbeiten; wenn es nur im Profil steht, erscheinen sie bereits auf der offiziellen Unternehmensseite.Unsere Firma hatte ebenfalls gefälschte Recruiter, die genau diesen Betrug versuchten; es waren durchaus glaubwürdige Fake-Profile mit vielen einschlägigen Beiträgen auf LinkedIn Premium, aber keine echten Mitarbeiter.
Egal wie oft wir sie meldeten, sie wurden nicht entfernt; am Ende habe ich einem Bekannten, der bei LinkedIn arbeitet, ein Bier ausgegeben und so das Problem gelöst, aber nicht jedes Startup hat solche Kontakte.
Wenn man sieht, wie Leute weiterhin in genau so etwas hineinlaufen, ist kaum nachvollziehbar, warum man nicht Tools wie PNPM nutzt und dabei die offensichtlichste und am häufigsten missbrauchte Lücke schließt: die Ausführung beliebigen Codes beim Herunterladen von Code.
Tools, die in dem Moment beliebigen Code ausführen, in dem man Code herunterladen will, sollten endlich aufhören.
Das Letzte, woran ich mich erinnere, war ein Download, der als Windows-
.scr-Bildschirmschonerdatei getarnt war; dass es jetzt bei LinkedIn angekommen ist, ist noch eine Stufe schlimmer.Die Plattform wird sich wohl wenig darum kümmern, weil es wie „mehr Jobs“ aussieht — ähnlich wie Werbenetzwerke wie Google oder Meta sich auch nicht besonders um betrügerische Anzeigen scheren.
bullshitpowershellladendoucument.pdf.docxverschickt wurden, aber es direkt per LinkedIn-DM zu senden, ist schon eine ziemlich dreiste Strategie.Das dürfte eindeutig kriminell sein, und ich verstehe nicht, warum es keine bekannte Anlaufstelle wie einen Cybercrime-911 gibt, wo man so etwas melden und Hilfe bekommen kann.
Die Gesellschaft muss echte Risiken schneller einholen und Unterstützungsstrukturen aufbauen; gegen organisierte Kriminalität braucht es organisierte Verteidigung.
Wahrscheinlich bekommt man keine Antwort, aber für US-Bürger, vielleicht auch für alle anderen, ist das soweit ich weiß das Nächste an einem Internet-911.
Das zweite Problem ist die Asymmetrie: Solche Betrugsmaschen zu bauen kostet fast nichts, aber sie zu verfolgen und strafrechtlich zu ahnden erfordert enormen Aufwand und astronomische Kosten.
Es liegt in einer ähnlichen Kategorie wie Betrugsanrufe, bei denen sich jemand als Microsoft-Support ausgibt und ältere Menschen ins Visier nimmt; die Verdächtigen zu fassen ist fast unmöglich.
Entweder verwischen sie ihre Spuren sehr gut oder, häufiger, sie leben in Ländern, deren Regierungen sich nicht dafür interessieren, wenn Westler betrogen werden, oder es sogar stillschweigend dulden.
Wenn man ein Verbrechen meldet, ist die Wahrscheinlichkeit groß, dass einem weder geholfen noch geantwortet wird.
Das ist mittlerweile unangenehm nah an einer ganz normalen Interview-Aufgabe.
Wenn jemand ein Repository schickt und sagt, die Installation sei kaputt und man solle mal draufschauen, wirkt das natürlich, und viele Entwickler könnten, wenn sie müde sind oder gerade einen Job suchen,
npm installausführen, bevor sie groß darüber nachdenken.Man will nicht langsam wirken und überspringt deshalb den Schritt, überhaupt zu fragen, ob man das ausführen sollte.
„Das Repository wurde GitHub gemeldet, der Recruiter LinkedIn, aber bisher hat sich nichts geändert und der Code ist immer noch online“ — ach ja, Microsoft.
Sie führten zu einem Fake-Video, in dem der kanadische Premier ein Krypto-Investmentprogramm für alle Kanadier ankündigte, inklusive Anmeldelink; ich habe es gemeldet und als Antwort bekommen, dass die Untersuchung keinen Richtlinienverstoß ergeben habe.
Alle drei haben Sicherheits- oder Zuverlässigkeitsprobleme, und je tiefer Microsoft in AI einsteigt, desto eher scheint es schlechter statt besser zu werden.
Ich frage mich, wohin die AI-Produktivität innerhalb des Unternehmens fließt — diese Produktivität, die angeblich um den Faktor 10 steigen sollte.
Dann wäre es sofort entfernt worden.
Offenbar wird dieselbe Domain gegen mehrere Ziele verwendet.
Es gibt auch einen ähnlichen Reddit-Thread von vor drei Monaten: https://www.reddit.com/r/openclaw/comments/1rlet0h/someone_t...
Ich verstehe nicht, warum noch nicht alle Betriebssysteme weltweit npm blockieren.
Diese Leute werden es offenbar nie lernen.
Solche Betrugsmaschen wären auch mit vielen anderen Technologien möglich gewesen, sogar mit einem Makefile.
Ich wünschte, es gäbe auf dem Mac endlich ein ordentliches Virtualisierungs-Framework.
Es ist inzwischen ziemlich ermüdend, wie 1995 ungeschützt zufällige Skripte aus dem Internet herunterzuladen.
Wenn man Fremde trifft und ihre Sachen tief ins eigene System lässt, sollte man seine Schutzausrüstung nicht vergessen.
curl | bash-Skripte von GitHub, AUR oder NPM auszuführen ist genauso schlimm, aber viele Entwickler hier haben gegenüber dieser schlechten Praxis offenbar immer noch fragwürdige Annahmen.Mehrere kleinere Shai-Hulud-artige Vorfälle der letzten Wochen zeigen, wie schlecht das wirklich ist.
In IntelliJ kann man einstellen, dass npm-Befehle innerhalb eines Docker-Containers ausgeführt werden.
Alle Jobangebote, die ich auf LinkedIn bekommen habe, wirkten extrem verdächtig.
Es hieß dann, man solle sich über die Plattform bewerben, ein Vorstellungsvideo aufnehmen oder einen Coding-Test zur Kalibrierung auf einer Code-Plattform absolvieren.
Man wollte, dass er einen Scheck als Kaution für einen Firmenlaptop ausstellt; das war schon oberflächlich betrachtet unsinnig, aber nach langer Jobsuche war er verzweifelt und wirklich glücklich, endlich Arbeit gefunden zu haben.
Langzeitarbeitslose werden oft so verzweifelt, dass sie selbst massive Warnsignale übersehen, auf die jemand mit ausreichenden Ersparnissen oder in ungekündigter Beschäftigung bei einem Jobwechsel niemals hereinfallen würde.
Werden heutzutage nicht die meisten NPM-Paketbetreuer auf diese Weise gehackt?
Der Verantwortliche für axios scheint über LinkedIn auf dieselbe Art angesprochen worden zu sein.
Ich nutze LinkedIn nur wegen der Stellenanzeigen, aber in den letzten Monaten sind dort viel zu viele nutzlose Angebote aufgetaucht.
Es erscheinen massenhaft Inserate von Firmen wie Ladders, Swooped und ähnlichen, und ich glaube, es ist Zeit, LinkedIn ganz aufzugeben.