2 Punkte von GN⁺ 4 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • 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 install auszufü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
  • Als der Agent gebeten wurde, die Codebasis zu prüfen und Verdachtsmomente zu markieren, blieb er fast sofort bei app/test/index.js stehen

Aufbau der Backdoor

  • Das Repository bestand aus einem React-Frontend plus Node-Backend
  • Die Falle steckte in app/test/index.js mit rund 250 Zeilen und war als Test-Suite getarnt
  • Darin wurde eine URL versteckt, indem sie in Teile zerlegt und wieder zusammengesetzt 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.js führte const test = require('./test') aus und lud bzw. startete damit app/test/index.js
  • package.json verband app/index.js mit der Startphase
  • Entscheidend war das prepare-Skript: npm führt prepare nach npm install automatisch 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 install auszufü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 install ausgeführt, bevor man weiter nachdachte
  • 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

 
GN⁺ 4 시간 전
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 install zu verleiten, heraus.
    Das prepare-Skript lief nach npm install automatisch 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.

    • LinkedIn bietet Unternehmen keine Möglichkeit, Nutzer zu bestreiten, die behaupten, bei $company zu 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 dir jemand wichtig ist, solltest du nicht zulassen, dass er NPM benutzt.
      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.
    • Diese Methode war besonders während des Krypto-/NFT-Booms 2021–2022 auf Upwork ein bewährter Trick und hat sich irgendwann von Krypto-Projekten auf viele andere Kategorien ausgeweitet.
      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.
    • Ich habe schon Phishing erlebt, bei dem E-Mail-Adressen gesammelt und dann Dinge wie bullshitpowershellladendoucument.pdf.docx verschickt wurden, aber es direkt per LinkedIn-DM zu senden, ist schon eine ziemlich dreiste Strategie.
    • Ich hatte in letzter Zeit viele Bewerbungsgespräche und bin dabei auch ein paar offensichtlichen Betrügern begegnet; ich hoffe, das liegt daran, dass solche Maschen häufiger werden, und nicht daran, dass ich dumm genug aussehe, darauf hereinzufallen.
  • 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.

    • Leider kennen bösartige Cyberkriminelle den einen seltsamen Trick: „Begehe Verbrechen in einem Land, das sich nicht für Verbrechen interessiert.“
    • https://www.ic3.gov
      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 Kernproblem ist, dass es kein weltweit funktionierendes globales 911 gibt.
      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.
    • Zynisch gesagt sitzt das auf dem Baum der schlimmen Dinge, die Menschen einander antun, ziemlich weit oben auf einem schwer erreichbaren Ast.
      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.
    • Das FBI hat zwar IC3, aber die Reaktion auf Cyberkriminalität ist miserabel und faktisch nutzlos.
      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 install ausführen, bevor sie groß darüber nachdenken.

    • Im Bewerbungskontext ist es noch schlimmer.
      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.

    • Ich habe auf LinkedIn schon Anzeigen gesehen, die wie CBC Canada News aussahen.
      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.
    • Ist das nicht seltsam? Microsoft besitzt LinkedIn, GitHub und NPM.
      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.
    • Man hätte es als DMCA-Verstoß melden sollen.
      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.

    • Mit npm selbst hat das nichts zu tun.
      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.

    • Zufällige 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.
    • Auf dem Mac gibt es dafür bereits eine brauchbare Lösung.
      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.

    • Mein Bruder war wegen einer Krankheit lange arbeitslos und bekam auf LinkedIn ein scheinbar glaubwürdiges „Jobangebot“.
      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.

    • Fühlt sich an, als wäre er auf seine eigene Masche hereingefallen.
  • 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.