Aikido

NPM-Paket „tensorlake“ durch den Shai-Hulud-Wurm kompromittiert

Verfasst von
Oliver Smith

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.mjs
    • 25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef
  • lib/Math_Symbol.js
    • b50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec

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_FILE

Pfade 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/token

Browser-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

​

Teilen:

https://www.aikido.dev/blog/tensorlake-npm-package-compromised

Nach Malware scannen

Kostenlos starten
4.7/5
Falschpositive Ergebnisse leid?

Probieren Sie Aikido, wie 100.000 andere.
Jetzt starten
Erhalten Sie eine personalisierte Führung

Von über 100.000 Teams vertraut

Jetzt buchen
Scannen Sie Ihre App nach IDORs und realen Angriffspfaden

Von über 100.000 Teams vertraut

Scan starten
Erfahren Sie, wie KI-Penetrationstests Ihre App testen

Von über 100.000 Teams vertraut

Testen starten

Werden Sie noch heute sicher,
schnell und kostenlos.

Sichern Sie Code, Cloud und Laufzeit in einem zentralen System.
Verbinden Sie ein Repository, um herauszufinden, was die Reasoning Agents in Ihrer Codebasis finden.

Keine Kreditkarte erforderlich | Scan-Ergebnisse in 32 Sekunden.
Von über 150.000 Unternehmen vertraut