Am 8. Oktober 2026 veröffentlichte ein Angreifer eine manipulierte Version von „tensorlake“ auf npm. Die manipulierte Version ist 0.5.144 und enthält eine Variante des Shai-Hulud-Wurms, der „ secrets “ von infizierten Geräten abzieht und versucht, sich über verbundene Lieferketten selbst zu replizieren. Tensorlake ist eine serverlose Sandbox für KI-Agenten, und sein npm-Paket weist Berichten zufolge eine Gesamtzahl von über 100.000 Installationen auf.
Tensorlake vertreibt zudem ein Paket über PyPI und Cargo, doch gibt es zum Zeitpunkt der Erstellung dieses Artikels keine Anzeichen dafür, dass es dem Angreifer gelungen ist, das Paket in einem dieser beiden Ökosysteme zu veröffentlichen. Die Malware weist geringfügige Abweichungen gegenüber der letzten Shai-Hulud-Welle auf, sodass es sich wahrscheinlich um einen neuartigen Angriff handelt und nicht um eine fortlaufende Reinfektion.
Was die Malware tut
Die Malware wird über ein Skript vor der Installation ausgelöst, das Knoten lib/setup.mjs. setup.mjs (25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef) ist ein verschleiertes Skript, das dazu dient, „Bun“ auf einem infizierten Rechner abzusetzen und auszuführen lib/Math_Symbol.js (b50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec) mit der Bun-Laufzeitumgebung.
Math_Symbol.js enthält eine verschleierte Shai-Hulud-Nutzlast. Die Malware legt eine globale WORMTAG Marker vor der Ausführung von verschleiertem Code, der spezifisch für das infizierte TensorLake-Paket ist. Dieser Marker weist darauf hin, dass es sich bei dem Paket um eine neuartige Kompromittierung handelt und nicht um eine fortlaufende Reinfektion aus einer früheren Shai-Hulud-Welle.
Die Malware entschlüsselt Payloads zur Persistenz und Verbreitung sowie einen „Dead-Man’s-Switch“, der infizierte Rechner löscht, falls ein eingebettetes GitHub-Token widerrufen wird – ganz im Einklang mit früheren Shai-Hulud-Wellen. Ebenfalls im Einklang mit früheren Shai-Hulud-Wellen versucht die Malware, sensible Umgebungsvariablen und lokale secrets zu lesen und zu exfiltrieren. Ein vollständiges Verzeichnis der von der Malware ins Visier genommenen Daten ist am Ende dieses Beitrags verfügbar. Jedes von der Malware infizierte System oder jede infizierte Umgebung sollte als vollständig kompromittiert betrachtet werden, und alle darin enthaltenen „ secrets “ oder Anmeldedaten sollten mit höchster Priorität geändert werden.
Die Malware enthält die fest programmierte C2-Adresse iseekaigogo[.]com, enthält aber auch einen Blockchain-Dead-Drop-Mechanismus zur Einrichtung eines alternativen C2-Kanals. Die Malware ruft eine Lesefunktion des vom Angreifer kontrollierten Ethereum-Vertrags auf
0xb614155Fd88114d40549b259457Bcf921Df091B9 bis eth.llamarpc.com, rpc.ankr.com und ethereum.publicnode.com um eine alternative C2-/Exfiltrationsdomain abzurufen. Die jüngste Aktualisierung des Vertrags erfolgte am 21. September über die Wallet 0x779f83aE56309682beDb04816c19d358c4B21040, setzt diesen Wert auf dieselbe fest codierte C2-Adresse, iseekaigogo[.]com.
Die Malware unterscheidet sich von früheren Shai-Hulud-Wellen dadurch, dass sie versucht, sensiblere Daten aus den Speichern von Webbrowsern auszulesen. Die Malware versucht, Daten aus fest programmierten Dateipfaden auszulesen, die mit 14 Browser-Erweiterungen für Kryptowährungen in Verbindung stehen. Die Malware versucht, IndexedDB- und LevelDB-Dateien der Erweiterungen zu exfiltrieren. Zudem ruft die Malware von der C2-Adresse eine für das infizierte System geeignete „HackBrowserData“-Binärdatei ab und führt diese aus, um weitere Anmeldedaten aus den Browserspeichern zu erlangen. Diese Änderungen deuten möglicherweise darauf hin, dass der Betreiber sich stärker darauf konzentriert, infizierte Entwickler-Endpunkte schnell zu monetarisieren, als sich über die Lieferkette weiter zu verbreiten.
Die Infektionskette zurückverfolgen
Die Malware stammte aus dem GitHub-Repository „tensorlake“. Am 7. Oktober 2026 führte der Angreifer unter der Identität eines Betreuers verifizierte Commits durch. Die Malware wurde im Commit eingeschleust 41b38f0 über einen direkten Datei-Upload; anschließend versuchte der Angreifer, die Versionsnummer zu erhöhen und die Veröffentlichung auszulösen. Das Repository war etwa 20 Stunden lang kompromittiert, bevor es dem Angreifer gelang, die npm-Veröffentlichung auszulösen.
Wie Aikido dies erkennt
Wenn Sie ein Aikido-Benutzer sind, überprüfen Sie Ihren zentralen Feed und filtern Sie nach Malware-Problemen. Dies wird als kritisches Problem mit 100/100 angezeigt. Aikido führt nächtliche Rescans durch, aber wir empfehlen, jetzt einen manuellen Rescan auszulösen.
Wenn Sie noch kein Aikido-Nutzer sind, können Sie ein Konto erstellen und Ihre Repositories verbinden. Unsere Malware-Abdeckung ist im kostenlosen Plan enthalten, keine Kreditkarte erforderlich.
Für eine umfassendere Abdeckung Ihres gesamten Teams bietet Aikidos Device Protection Transparenz und Kontrolle über die Softwarepakete, die auf den Geräten Ihres Teams installiert sind. Es deckt Browser-Erweiterungen, Code-Bibliotheken, IDE-Plugins und Build-Abhängigkeiten ab, alles an einem Ort. Stoppen Sie Malware, bevor sie installiert wird.
Für zukünftigen Schutz sollten Sie Aikido Safe Chain (Open Source) in Betracht ziehen. Safe Chain integriert sich in Ihren bestehenden Workflow, fängt npm-, npx-, yarn-, pnpm- und pnpx-Befehle ab und prüft Pakete vor der Installation gegen Aikido Intel.
Indikatoren für Kompromittierung
NPM-Pakete:
- tensorlake 0.5.144
C2-Domäne:
iseekaigogo[.]com
Dateien:
lib/setup.mjs25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef
lib/Math_Symbol.jsb50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec
Sonstiges:
- Ethereum-Transaktion eines Angreifers:
-
0xb614155Fd88114d40549b259457Bcf921Df091B9
-
- Ethereum-Wallet eines Angreifers:
0x779f83aE56309682beDb04816c19d358c4B21040
Betroffene Variablen und Dateien
Umgebungsvariablen:
APPVEYOR
AWS_ACCESS_KEY_ID
AWS_CONFIG_FILE
AWS_CONTAINER_CREDENTIALS_FULL_URI
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
AWS_PROFILE
AWS_REGION
AWS_ROLE_ARN
AWS_SECRET_ACCESS_KEY
AWS_WEB_IDENTITY_TOKEN_FILE
bamboo_agentId
BITBUCKET_BUILD_NUMBER
BITRISE_IO
BUDDY_WORKSPACE_ID
BUILD_BUILDURI
BUILDKITE
CF_BUILD_ID
CF_PAGES
CI
CI_NAME
CIRCLECI
CIRRUS_CI
CODEBUILD_BUILD_ID
DISTELLI_APPNAME
DRONE
GITHUB_ACTIONS
GITLAB_CI
JB_SPACE_AUSFÜHRUNGSNUMMER
JENKINS_URL
KUBECONFIG
KUBERNETES_SERVICE_HOST
NETLIFY
NOW_GITHUB_DEPLOYMENT
SAILCI
SCREWDRIVER
SEMAPHORE
SHIPPABLE
TEAMCITY_VERSION
TRAVIS
VAULT_ADDR
VAULT_API_TOKEN
VAULT_AUTH_TOKEN
VAULT_AWS_ROLLE
VAULT_TOKEN
VAULT_TOKEN_DATEI
VAULT_TOKEN_PATH
VELA
VERCEL
WERCKER_MAIN_PIPELINE_STARTED
WS_SHARED_CREDENTIALS_FILEPfade zu den Anmeldedaten-Dateien:
~/.ansible
~/.azure
~/.cert/nm-openvpn
~/.config/atomic/Lokaler Speicher/leveldb
~/.config/discord/Lokaler Speicher/leveldb
~/.config/Element/Lokaler Speicher
~/.config/Exodus/exodus.wallet
~/.config/helm
~/.config/kwalletd
~/.config/Ledger Live
~/.config/remmina
~/.config/Signal
~/.config/telegram-desktop
~/.docker
~/.electrum-ltc/wallets
~/.electrum/wallets
/etc/openvpn
/etc/ssh
~/.ethereum/keystore
~/.kde4/share/apps/kwallet
~/.kde/share/apps/kwallet
~/.local/share/keyrings
~/.local/share/TelegramDesktop/tdata
~/.monero
~/.pki/nssdb
~/.remmina
~/.ssh
/var/lib/docker/containers
~/.foundry/keystores
~/.brownie/accounts
~/.config/github-copilot
~/.gnupg/private-keys-v1.d
~/.config/gcloud/legacy_credentials
~/.volta/tools/image/node
~/.kube/cache/discovery
~/.kube/http-cache
~/.near-credentials
~/.keplr
~/.config/keplr
~/.bitcoin/wallets
~/.nethermind/keystore
~/.local/share/io.parity.ethereum/keys
~/.config/exodus/exodus.wallet
~/.local/share/gopass/stores
/etc/ssl/private
/etc/letsencrypt/live
~/.mozilla/firefox
~/.config/google-chrome
~/.config/chromium
~/.config/BraveSoftware/Brave-Browser
~/.config/microsoft-edge
~/.config/opera
~/.config/vivaldi
/etc/ssl/cert.pem
~/.aws/credentials
~/.aws/config
~/.kube/config
~/.vault-token
/home/runner/.vault-token
/vault/token
/var/run/secrets/vault-token
/var/run/secrets/vault/token
/run/secrets/vault_token
/run/secrets/VAULT_TOKEN
~/.vault/token
/etc/vault/tokenBrowser-Erweiterungen:
nkbihfbeogaeaoehlefnkodbefgpgknn MetaMask
bfnaelmomeimhlpmgjnjophhpkkoljpa Phantom
hnfanknocfeofbddgcijnmhnfnkdnaad Coinbase Wallet-Erweiterung
acmacodkjbdgmoleebolmdjonilkdbch Rabby Wallet
egjidjbpglichdcondbcbdnbeeppgdph Trust Wallet
ibnejdfjmmkpcnlpebklmnkoeoihofec TronLink
fnjhmkhhmkbjkkabndcnnogagogbneec Ronin Wallet
bhhhlbepdkbapadjdnnojkbgioiodbic Solflare Wallet
dmkamcknogkgcdfhhbddcghachkejeap Keplr
aholpfdialjgjfhomihkjbmgjidlcdno Exodus Web3 Wallet
mcohilncbfahbmgdjkbpemcciiolgcge OKX Wallet
opfgelmcmbiajamepnmloijbpoleiama Rainbow
ppbibelpcjmhbdihakflkdcoccbgbkpo UniSat-Wallet
lgmpcpglpngdoalbgeoldeajfclnhafa SafePal-Erweiterung