Der Befehl hieß aipoison
Socket fand ein Cluster von 18 npm-Paketen, die Alibabas privaten @ali-Scope imitieren. Keiner der Tarballs enthielt Malware. Der RAT setzte sich zur Installationszeit aus einer JSON-Datei in einem GitHub-Repository zusammen, das der Angreifer noch immer kontrolliert, und sein Persistenzplan sah vor, Python in den .skills-Verzeichnissen von KI-Coding-Tools zu patchen — mit Befehlen namens aipoison, aipoison_inject und aipoison_deploy. Den Code zu lesen hätte das nicht finden können. Bromure Agentic Coding beurteilt, was die ganze Zeit sichtbar war: Ein Paket ohne Reputation wartet am Host-Proxy auf Ihre Zustimmung, die drei Abrufe, die den Payload zusammensetzen, treffen auf eine Leitung, die nur mit von Ihnen genehmigten Zielen spricht, und jede Datei, die der RAT schreibt, landet in einer VM, die eine Aufgabe lang lebt.
Irgendwo im finalen Payload steckt ein Befehl namens aipoison. Seine
Aufgabe: in das Skills-Verzeichnis Ihres KI-Coding-Tools hineinzugreifen
und eine Python-Datei zu patchen, damit beim nächsten Arbeitsbeginn auch
der Angreifer beginnt.
Am 3. August 2026 berichtete The Hacker News
über Forschung, die Socket Ende Juli veröffentlicht hatte:
ein Cluster von rund achtzehn npm-Paketen, Ende April platziert, das drei
Monate im Registry lag, bevor es jemand entdeckte. Sie imitieren Alibabas
private @ali-Pakete, indem sie dieselben Namen ohne Scope veröffentlichen
(aone-cloud-cli, def-open-client, open-worker-cli, uniapi-bridge),
sodass ein Entwickler oder ein Build innerhalb der Zielorganisation den
öffentlichen Doppelgänger auflöst und einen Remote-Access-Trojaner in den
Abhängigkeitsbaum gepfropft bekommt. Socket-Forscher Karlo Zanki deutet das
Motiv als Industriespionage.
Nichts in den Paketen war bösartig
Öffnen Sie einen beliebigen dieser Tarballs, und Sie finden nichts zu
melden. Es gibt keinen postinstall-Hook, das Erste, wonach jeder greppt.
Die Köderpakete hängen von smart-config-manager ab, das von
cloud-config-fetcher und local-config-parser abhängt. Ein
Config-Manager, ein Fetcher, ein Parser: langweilige Utilities, jedes in
einer Minute lesbar.
Die Bosheit lebt in der Komposition, und in einer Datei, die der Angreifer
nie ausgeliefert hat. Beim Import lädt der Fetcher
defaults/preferences.json aus einem GitHub-Repository herunter, das der
Angreifer kontrolliert, und noch immer kontrolliert, und schreibt sie als
.cloud-preferences.json auf die Platte. Der Parser wertet die
„Transformationsregeln“ dieser Datei in einer Node-vm aus, und dort lebt
der Angriff. Eine Regel ist ein Sandbox-Ausbruch mit Folklore-Status:
var F = items.constructor.constructor; // recover Function
var p = F('return process')(); // recover process
Von process aus klettert er eine Fallback-Leiter hinab
(getBuiltinModule, mainModule.require,
mainModule.constructor._load), bis eine davon auf der jeweiligen
Node-Version require liefert. Dann holt er setting.js aus einem
Alibaba-Cloud-Storage-Bucket, das den Host fingerprintet und den Payload
installiert: Unter Windows wird Alilang, Alibabas eigene Sicherheits-App,
beendet und ihre app.asar durch eine trojanisierte Kopie ersetzt; unter
Linux landet eine Binärdatei in /tmp, läuft abgekoppelt, die Datei wird
gelöscht; unter macOS injiziert er sich in ~/.zshrc und registriert einen
LaunchAgent, der alle zehn Minuten feuert.
GBHackers packte das Design in seine Überschrift: Die Angreifer verteilten den RAT über Pakete, um isolierten Code-Reviews zu entgehen. Der Angreifer hat diese Kampagne gebaut, um das Gelesenwerden zu überleben. Prüfen Sie jedes Paket für sich, und es besteht. Prüfen Sie den ganzen Baum, und er besteht immer noch, denn der feindliche Teil ist eine JSON-Datei auf einem Server, abgerufen, nachdem Ihr Review beendet war, editierbar durch den Angreifer zwischen Ihrem Audit und Ihrer Installation.
Im Persistenzplan kommt Ihr Agent vor
Socket hat den finalen Payload als aone-cli geborgen. Er tut, was diese
Dinger tun: Shell-Befehle, Datei-Upload und -Download, Host-Recon,
Screenshots, ein verschlüsselter Reverse-TCP-Proxy und ein
dws_lateral-Befehl, der sich durch DingTalk bewegt. Sein C2-Verkehr trägt
gefälschte Origin- und Referer-Header, die vorgeben, von einer internen
Alibaba-Dokumentationsdomain zu stammen.
Eine Befehlsgruppe macht daraus eine Coding-Agent-Geschichte. Neben den
üblichen Verben liefert der RAT aipoison, aipoison_inject und
aipoison_deploy mit. Sie patchen Python-Skripte in den
.skills-Verzeichnissen bestimmter Entwickler-Tools und markieren den
injizierten Schnipsel mit # __INJECT_MARKER__, damit ein vom C2 gezogenes
Skript später läuft, aus dem Tooling heraus, als Sie. Unter den genannten
Zielen ist
Qoder,
Alibabas eigene agentische IDE, die binnen Monaten nach ihrem Start im
vergangenen August fünf Millionen Nutzer überschritt.
Jemand hat sich hingesetzt, die moderne Entwicklermaschine betrachtet und
den Skills-Ordner des Agenten als dauerhaften Halt gewählt: ein Verzeichnis
von Skripten, das zu Beginn jeder Sitzung mit Ihren Berechtigungen läuft
und das kaum jemand je diffs. Wir haben diesen Zug schon gesehen, als ein
Wurm sich nach .claude kopierte, damit
der nächste Agentenstart die Maschine neu infiziert. Er ist aufgestiegen:
vom improvisierten Trick eines Wurms zum benannten Befehl in einem
Spionage-Toolkit.
Die Teile, die der Angreifer nicht verstecken konnte
Den Code zu lesen würde das niemals finden. Der Angriff hatte trotzdem Voraussetzungen, und alle waren sichtbar: ein Paket ohne Historie und ohne Reputation, drei ausgehende Verbindungen, bevor er handeln konnte (die Regeldatei auf GitHub, die Cloud-Storage-Stufe, das C2), und eine Maschine, die morgen noch da wäre.
Bromure Agentic Coding legt auf jede davon eine Entscheidung, und trifft sie auf Ihrem Mac, außerhalb der Box, in der der Agent läuft, wo nichts von drinnen mitreden kann.
Die Installation hält am Registry an. Jeder Paketabruf durchquert den
hostseitigen Proxy, der die Supply-Chain-Policy Ihres Workspace auf die
Antwort anwendet, bevor ein Byte die VM erreicht. Schalten Sie die
Paketfilterung ein, und der Proxy befragt für jedes Artefakt einen
Reputationsanbieter. Einer der beiden wählbaren Anbieter ist Socket, um
dessen Forschung es in diesem Beitrag geht. Wenn keine aktivierte Quelle
ein Paket beurteilen kann, hält der Proxy den Download an und fragt Sie.
Doppelgänger eines privaten Scopes, letztes Quartal veröffentlicht, mit
einer Handvoll Downloads und nirgendwo Reputation, bleiben dort stehen. Die
Durchsetzung sitzt mit Absicht auf dem Host: Die .npmrc in der VM kann
die Policy verschärfen und nicht lockern, also hält die Regel auch dann,
wenn das kompromittierte Ding das Ding ist, das
kontrolliert.
Die Leitung verweigert den Zusammenbau. Dieses Design zerbricht an der
Egress-Zustimmung, denn wenn nichts Feindliches im Tarball steckt, ist das
Netzwerk der Angriff. Der Host-Proxy prüft jeden der drei Abrufe (die
Raw-Datei auf dem GitHub des Angreifers, das Storage-Bucket mit
setting.js, den C2-Host) gegen die Ziele, die Sie für dieses Profil
genehmigt haben. Das Registry, aus dem Sie installieren, steht auf der
Liste. Der Raw-Content-Pfad eines Fremden und ein Bucket, benannt nach
einem CLI, von dem Sie nie gehört haben, stehen nicht darauf. Der Proxy hat
keine Meinung zu items.constructor.constructor und braucht keine. Er
liest das Ziel, findet nichts Genehmigtes und kappt die Verbindung. Ihre
Installation läuft durch, Ihr Build läuft, und der RAT setzt sich nie
zusammen, weil seine Teile nie denselben Raum erreichen.
Die Persistenz bekommt eine Maschine mit der Lebensdauer einer
Aufgabe. Angenommen, die ganze Kette läuft trotzdem, weil Sie ein Ziel
breiter genehmigt haben als beabsichtigt und die Stufen landen. Die Zeile
in ~/.zshrc, der Zehn-Minuten-LaunchAgent, die trojanisierte app.asar,
das gepatchte .skills-Python: All das schreibt in eine Linux-Wegwerf-VM,
einen Hypervisor von macOS entfernt, die den Workspace dieser Aufgabe hält
und die Sie wegwerfen, wenn die Arbeit gemergt ist. aipoison ist eine
Wette darauf, dass das Tooling, das er patcht, und der kompromittierte Host
dieselbe langlebige Maschine sind. In einem Profil verliert diese Wette.
Die Recon, die zuerst läuft, kommt mit
Broker-Ködern zurück: Ihre echten
Zugangsdaten leben auf dem Host und werden nur für genehmigte Ziele an der
Leitung injiziert, also waren sie nie in der
VM, um eingesammelt zu werden.
Ein Artefakt zu prüfen sagt etwas über das Artefakt
Forscher lehren diese Lektion jede Woche in einer anderen Bibliothek neu. Gestern fiel ein Vertrauens-Flag, weil Prüfung und Laden zu verschiedenen Zeitpunkten stattfanden. Im Juni blieb ein Repository sauber, weil die Reverse Shell in einem DNS-Eintrag lebte. Jetzt lesen sich achtzehn Pakete sauber, weil der bösartige Teil eine JSON-Datei ist, die der Angreifer noch in der Hand hält.
Agenten verschärfen das, weil sie schnell sind. Ein Agent, der eine interne API anbinden soll, fügt die Abhängigkeit hinzu, führt die Installation aus und geht zum nächsten Schritt der Aufgabe über, während Sie das Fenster wechseln. Diese Geschwindigkeit ist der ganze Grund, warum Sie ihn gekauft haben. Legen Sie das Urteil dorthin, wo die Geschwindigkeit es nicht überholen kann: an den Registry-Abruf und an die Leitung, wo Ihr Mac gegen eine Policy entscheidet, die Sie einmal festgelegt haben, für jedes Paket und jede Verbindung des Agenten.
Lassen Sie den Agenten weiter Dinge installieren, denn dort liegt der Hebel. Installieren Sie Bromure Agentic Coding, schalten Sie die Supply-Chain-Schichten ein und geben Sie dem Profil eine Liste von Zielen, die für die Arbeit Sinn ergeben. Die nächste Kampagne wird ihren Payload woanders verstecken, die eine sichere Vorhersage in diesem Geschäft, und sie wird ihn trotzdem über eine Leitung holen müssen, die zuerst Sie fragt.