Semgrep publiserte 30. april en advisory om at PyPI-pakken lightning, KI-treningsrammeverket som er kjent som PyTorch Lightning, ble kompromittert i versjonene 2.6.2 og 2.6.3 samme dag. Et pip install lightning er nok til å aktivere koden. De infiserte versjonene inneholder en skjult _runtime/-mappe med obfuskert JavaScript som kjøres ved modul-import.
Angrepet er en variant av Shai-Hulud-kampanjen som tidligere rammet npm. Denne gangen er inngangen PyPI, men ormen sprer seg videre via npm hvis maskinen har publish-tokens. Kommit-meldingene bruker prefikset EveryBoiWeBuildIsAWormyBoi i stedet for det opprinnelige EveryBoiWeBuildIsaWormBoi. Stjålet data går ut over fire parallelle kanaler: HTTPS POST til C2, dead-drop via GitHub commit search, attacker-kontrollerte public repos med beskrivelsen «A Mini Shai-Hulud has Appeared», og push til offerets eget repo.
«Any machine that imported the malicious package during the affected window should be treated as fully compromised.» — Semgrep, advisory 30. april
Det nye er persistens-laget. Malwaren skriver en SessionStart-hook med matcher: "*" til .claude/settings.json i alle repos den får tilgang til. Hver gang du åpner Claude Code i et infisert prosjekt, kjøres node .vscode/setup.mjs uten varsel. En parallell hook i .vscode/tasks.json bruker runOn: folderOpen og treffer VS Code-brukere på samme måte. Semgrep mener dette er blant de første dokumenterte tilfellene der malware misbruker Claude Codes hook-system i et reelt angrep.
Dropperen setup.mjs laster ned bun-v1.3.13 fra GitHub releases hvis Bun ikke finnes lokalt, og kjører deretter en 14.8 MB obfuskert payload. Den scanner 80+ credential-filer for ghp_-, gho_- og npm_-tokens, dumper alle env-vars, prøver IMDSv2 mot AWS, bruker DefaultAzureCredential mot Azure og GoogleAuth mot GCP. På GitHub Actions Linux-runnere dumpes Runner.Worker-prosessens minne for å hente ut secrets markert isSecret: true.
Bonusnyttelasten er en GitHub Actions-workflow kalt Formatter som angriperen pusher til repoer der token har skrive-tilgang. Hver push dumper alle repo-secrets via ${{ toJSON(secrets) }} og laster dem opp som artifact-en format-results. Action-stegene er pinnet til spesifikke SHA-er for å se legitime ut.
Hva bør du gjøre?
- Sjekk
pip list | grep lightningpå alle utviklermaskiner og CI-runnere. Hvis du ser 2.6.2 eller 2.6.3, behandle maskinen som fullt kompromittert. - Roter alle GitHub-, AWS-, Azure- og GCP-tokens som har vært tilgjengelige i miljøet siden 30. april. Inkluder
~/.aws/credentials,gh auth-tokens, og org-secrets i GitHub Actions. - Søk repoene dine etter
.claude/router_runtime.js,.claude/setup.mjs,.vscode/tasks.jsonmedrunOn: folderOpen, og workflow-filer ved navnFormatter. Slett umiddelbart hvis du ikke har lagt dem inn selv. - Søk på GitHub etter commits med prefiks
EveryBoiWeBuildIsAWormyBoiog repo-beskrivelsen «A Mini Shai-Hulud has Appeared» for å sjekke om dine egne tokens har lekket.
Bakgrunn
Shai-Hulud-kampanjen dukket først opp på npm tidligere i år og målrettet pakker med høy nedlastningsfrekvens. Lightning er det mest brukte treningsrammeverket etter PyTorch selv, og finnes i dependency-treet til alt fra fine-tuning-skript til diffusion-pipelines. Cross-ecosystem-spredningen (PyPI inn, npm ut) er den nye varianten Semgrep har dokumentert.