Jeśli zainstalowałeś node-ipc@9.1.6, @9.2.3 lub @12.0.1 — rotuj natychmiast: AWS/Azure/GCP credentials, klucze SSH, tokeny GitHub i GitLab, sekrety Kubernetes i Docker, zmienne środowiskowe CI/CD, tokeny npm. Wróć do node-ipc@9.2.1(dla gałęzi 9.x) lub @12.0.0 (dla gałęzi 12.x). Zablokuj domeny sh.azurestaticprovider[.]net i bt.node[.]js na poziomie DNS — jeśli widzisz zapytania TXT do tych domen, środowisko było zainfekowane.
Domena atlantis-software.net wygasła 10 stycznia 2025 roku. Przez szesnaście miesięcy nikt jej nie wznowił. 7 maja 2026 roku ktoś ją wykupił przez Namecheap i skonfigurował infrastrukturę mailową.
Na koncie npm o nazwie atiertant jako email odzysku był adres na tej domenie. Ktoś kliknął "zapomniałem hasła" na npmjs.com. Mail trafił do nowej skrzynki. Nowe hasło. Pełne prawa do publikacji pakietu.
Żadnego włamania. Żadnej podatności. Standardowy formularz odzyskiwania konta, który zadziałał dokładnie tak jak był zaprojektowany.
14 maja o 14:25 UTC opublikowano trzy wersje node-ipc z identycznym payloadem 80 KB. Dwie godziny później zostały usunięte. Socket AI wykrył je po trzech minutach od publikacji. Ale dwie godziny przy 822 000 tygodniowych pobraniach wystarczyły.
Trzy minuty wykrycia, dwie godziny na rynku
Semgrep opisuje logikę malware jednym zdaniem: "Fire once, grab everything, disappear. No trace left on disk, no process lingering, no network connection to close — just DNS queries that look like noise and a cleaned-up tmp file."
Payload jest wstrzyknięty wyłącznie do node-ipc.cjs — pliku CommonJS. ESM wrapper pozostał czysty. Kod uruchamia się przez setImmediate() przy każdym require('node-ipc') — nie przez skrypt postinstall, nie przez lifecycle hook. Skanery które szukają złośliwych preinstall i postinstall nic nie zobaczą.
Po uruchomieniu: fingerprint systemu, 90+ kategorii danych do zebrania (AWS, Azure, GCP, SSH, Kubernetes, tokeny GitHub, zmienne środowiskowe, pliki .env, konfiguracje Terraform, historia powłoki, a osobno — konfiguracje Claude AI i Kiro IDE), kompresja do tymczasowego archiwum, eksfiltracja przez DNS TXT queries do domeny bt[.]node[.]js przez bootstrap resolver sh.azurestaticprovider[.]net:443 — adres celowo naśladujący legalną usługę Azure Static Web Apps.
500 KB archiwum generuje około 29 400 zapytań DNS TXT. XOR-zaszyfrowane, chunked, z hardkodowanym kluczem qZ8pL3vNxR9wKmTyHbVcFgDsJaEoUi. Dla kogoś kto nie monitoruje DNS traffic — wygląda jak szum.
Jeden artefakt forensiczny który Socket odnotowuje: każdy plik w złośliwych tarballs ma timestamp October 26, 1985. Back to the Future. Jeśli znajdziesz plik z tym datownikiem w npm cache — masz odpowiedź.
Wygasła domena jako wektor
Ian Ahl, CTO Permiso Security, opisał wektor w ciągu godzin od incydentu. Jego analiza jest warta przeczytania jako studium przypadku nie dla node-ipc — ale dla każdego projektu open source z wieloma maintainerami.
node-ipc ma 12 maintainerów w npm. Konto atiertant było na liście ale nie opublikowało niczego przez lata. Email odzysku — a.tiertant@atlantis-software.net — był na domenie która wygasła w 2025 roku.
npm używa email-based account recovery jako standardowy mechanizm. Nie ma MFA wymaganego dla maintainerów którzy nie korzystali z OIDC/SSO. Nie ma walidacji czy domena emailowa jest nadal pod kontrolą oryginalnego właściciela konta. Wygaśnięcie domeny nie powoduje automatycznej dezaktywacji konta ani usunięcia praw do publikacji.
Upwind ujmuje strukturalną lukę precyzyjnie: "Incident highlights a broader security gap affecting many developer ecosystems: once an email domain expires, any attacker who re-registers it may inherit password reset access to developer accounts tied to that domain — including npm, GitHub, PyPI, cloud platforms, CI/CD systems, and other identity providers relying on email-based account recovery."
To nie jest specyficzny problem node-ipc. To jest problem każdego projektu open source gdzie lista maintainerów zawiera konta z emailami na domenach których właściciel mógł nie odnowić.
Czwarty raz dla node-ipc
Semgrep zaczyna swój raport od zdania: "Not Your IPC, but node-ipc: npm Hit Again." To "again" niesie historię.
2022: versions 10.1.1 i 10.1.2 — protestware napisany przez RIAEvangelist, oryginalnego autora pakietu, który celowo dodał destrukcyjny kod rekurencyjnie nadpisujący pliki na systemach z rosyjskim lub białoruskim IP. Incydent wymagający od 80+ milionów projektów zależnych od node-ipc przez Vue CLI i inne narzędzia na sprawdzenie czy nie są dotknięte.
2022 (follow-up): versions 11.0.0 i 11.1.0 — zależność peacenotwar z tymi samymi politycznie motywowanymi możliwościami.
2026: trzy wersje z credential stealerem przez przejęte konto maintainera.
Pisaliśmy przy analizie TeamPCP i TanStack że SLSA i OIDC jako mechanizmy bezpieczeństwa łańcucha dostaw mają założenia o środowisku których atakujący nauczył się podważać. Przypadek node-ipc pokazuje prostszy problem który jest wcześniejszy niż SLSA: lista maintainerów z prawami do publikacji zawiera konta których emaile są na domenach których nikt nie odnawiał przez rok.
Połączenie z serią kampanii
Pisaliśmy o TeamPCP i serii Mini Shai-Hulud przez maj — systematyczne kampanie przez npm, PyPI, Packagist, RubyGems. Socket i StepSecurity nie potwierdzili powiązania node-ipc z TeamPCP — i ten brak atrybucji jest ważny. To może być osobna, niezwiązana operacja.
Co jest wspólne: DNS jako kanał eksfiltracji. TanStack używał Session messenger i GitHub. Shai-Hulud używał serwera sterującego z fallbackiem przez GitHub commits. node-ipc używa DNS TXT queries przez domeny naśladujące Azure.
DNS exfiltration jest popularny z powodów które Semgrep opisuje: większość organizacji nie blokuje ruchu DNS, większość nie monitoruje DNS TXT queries, DNS wygląda jak szum operacyjny. Wykrywanie wymaga dedykowanego monitoringu DNS — nie standardowego SIEM bez reguł dla DNS anomalii.
Źródła
StepSecurity — pierwotna analiza z IOC i krokami remediation: https://www.stepsecurity.io/blog/node-ipc-npm-supply-chain-attack
The Hacker News — szczegóły SHA-256 fingerprint check i mechanizmu unikania: https://thehackernews.com/2026/05/stealer-backdoor-found-in-3-node-ipc.html
Semgrep — "fire once, grab everything, disappear" z analizą DNS exfiltration: https://semgrep.dev/blog/2026/not-your-ipc-but-node-ipc-npm-hit-again-with-supply-chain-attack-but-this-time-its-not-a-worm/
Upwind — strukturalna luka email domain expiry i implikacje dla innych platform: https://www.upwind.io/feed/malicious-node-ipc-npm-package-credential-theft
CybersecurityTimes — pełna analiza DNS TXT exfiltration z danymi volumetrycznymi: https://cybersecuritytimes.com/node-ipc-npm-package-supply-chain-attack/
Snyk advisory SNYK-JS-NODEIPC-16697063: https://snyk.io/blog/malicious-node-ipc-versions-published-npm/




















































































































Nie nowy atak, tylko naprawiony błąd. Co łatka Gemini CLI mówi o tym, że tryb –yolo w potoku CI/CD to nie jest dobry pomysł