Executive Summary
The node-ipc incident is a high-severity npm supply-chain compromise in which malicious versions 9.1.6, 9.2.3, and 12.0.1 executed on import and targeted developer and CI/CD secrets for DNS-based exfiltration.
Technical teardown of the malicious node-ipc npm releases, including import-time execution, targeted secrets, DNS exfiltration, and concrete defender hunts.
Executive Summary
The node-ipc incident is a high-severity npm supply-chain compromise in which malicious versions 9.1.6, 9.2.3, and 12.0.1 executed on import and targeted developer and CI/CD secrets for DNS-based exfiltration.
Analyst Assessment
The most important technical distinction is that the payload did not rely on npm install hooks; defenders need to reason about projects and workflows that both resolved an affected version and actually imported node-ipc in environments where secrets were available.
Impact
Impacted organizations risk exposure of npm, GitHub, source-control, and cloud credentials from developer workstations and CI runners that loaded malicious node-ipc versions before remediation and credential rotation.
Exploitation Status
Malicious versions were publicly reported in the wild on May 14-15, 2026, with multiple independent sources corroborating active package-registry abuse.
Defender Guidance
Inventory affected node-ipc versions in lockfiles, SBOMs, caches, and built artifacts; hunt for DNS queries ending in .sh.azurestaticprovider.net; inspect the reported package file paths; and rotate any secrets exposed to runtimes that imported the malicious releases.
The node-ipc incident is significant because the malicious behavior rode inside a legitimate package name that many downstream environments already trusted. Malicious node-ipc releases 9.1.6, 9.2.3, and 12.0.1 were published to npm, and public reporting from Socket, StepSecurity, and Snyk converges on the same core point: the compromise did not depend on preinstall, install, or postinstall hooks. The code executed when consumer code imported node-ipc.
That distinction materially changes how defenders should think about exposure. Lockfile presence alone is not enough to establish compromise. The higher-risk case is a runtime that both resolved an affected version and actually loaded it while secrets were present. Public reporting identifies node-ipc/services.js and node-ipc/entities/EventParser.js as modified files and ties the incident to DNS-based exfiltration through attacker-controlled subdomains under sh.azurestaticprovider.net.
node-ipc releases 9.1.6, 9.2.3, and 12.0.1 to npm under the legitimate package name.node-ipc, rather than during npm lifecycle installation hooks.services.js and entities/EventParser.js harvested environment secrets from the runtime, including package, source-control, and cloud credentials.sh.azurestaticprovider.net.The public evidence is detailed enough to anchor defensive review without reproducing a runnable malware listing. The most useful artifacts are the reported file paths, the import-time execution model, and the concrete DNS exfiltration suffix.
node_modules/node-ipc/services.js
node_modules/node-ipc/entities/EventParser.js
.sh.azurestaticprovider.net
Read-only dependency validation patterns:
npm ls node-ipc
grep -R "node-ipc" package-lock.json npm-shrinkwrap.json
Those details are operationally important because they steer code review toward top-level import side effects and initialization behavior in the identified files. A lifecycle-script-only review would miss the mechanism that made this incident effective.
The public reporting also references additional mechanics such as the node-ipc.cjs entry path, the __ntw=1 gating flag, a bt.node.js helper, and a detached child process. Those details are useful as corroborating technical anchors, but the public material still falls short of a complete safe source reconstruction.
The behavior supported by the source set is credential theft from developer and CI/CD runtimes. The targeted secret classes include npm credentials, GitHub and source-control tokens, and cloud or API credentials exposed in environment variables such as NPM_TOKEN, GITHUB_TOKEN, AWS_ACCESS_KEY_ID, and GOOGLE_API_KEY.
The exfiltration channel is equally important. DNS is a low-friction path in many environments, and the public mechanics specifically describe exfiltration that pivots through resolver activity and port 443 rather than through a more obvious package lifecycle beacon. That means the incident may leave stronger evidence in resolver logs than in package-manager logs. The source set does not establish host persistence, lateral movement, or worm-like propagation beyond the supply-chain spread created by malicious package publication, so those claims should not be added without new evidence.
Dependency and SBOM inventory:
node-ipc@9.1.6
node-ipc@9.2.3
node-ipc@12.0.1
Read-only package hunt:
grep -R -E 'node-ipc@9\.1\.6|node-ipc@9\.2\.3|node-ipc@12\.0\.1|node-ipc' package-lock.json npm-shrinkwrap.json
DNS and resolver hunts:
SELECT timestamp, src_host, process_name, qname
FROM dns_logs
WHERE qname LIKE '%.sh.azurestaticprovider.net';
index=dns qname="*.sh.azurestaticprovider.net"
| stats count min(_time) max(_time) values(src_host) values(process_name) by qname
Filesystem and artifact review:
Inspect node_modules/node-ipc/services.js and node_modules/node-ipc/entities/EventParser.js in any cache, build artifact, or retained dependency tree that resolved an affected version.
The priority cases are systems that show an affected version plus evidence of import-time execution or DNS activity. Those should be treated as incident-response events, not just dependency-cleanup tasks.
Unknowns in the public reporting:
Defensive inferences that should remain labeled as inference:
The high-confidence facts are the affected versions, the modified file paths, the import-time trigger, the DNS exfiltration suffix, and the need to correlate dependency evidence with runtime and resolver telemetry.
| Issue | CWE | CVSS | EPSS | KEV | Summary |
|---|---|---|---|---|---|
| CVE-2026-4864 | N/A | N/A | N/A | No | Snyk tracks the malicious node-ipc release set under CVE-2026-4864. |
| Asset | Ecosystem | Affected versions | Fixed versions |
|---|---|---|---|
consumer repositories using node-ipc | GitHub Actions | workflow dependency resolution that installed affected node-ipc versions | None published |
node-ipc | npm | 12.0.1, 9.1.6, 9.2.3 | 10.1.0, 12.0.2, 9.2.2 |
2 indicators
| Indicator | Type | Confidence | Context | Source refs |
|---|---|---|---|---|
*.*.sh.azurestaticprovider.net | dns_pattern | High | Reported subdomain pattern used to encode stolen environment data in DNS lookups. | exfiltration:dns-exfiltration-to-sh.azurestaticprovider.net |
sh.azurestaticprovider.net | domain | High | DNS exfiltration destination domain reported by Socket and StepSecurity. | exfiltration:dns-exfiltration-to-sh.azurestaticprovider.net |
2 indicators
| Indicator | Type | Confidence | Context | Source refs |
|---|---|---|---|---|
node_modules/node-ipc/entities/EventParser.js | file_path | High | Installed package file path identified as modified in public technical analysis. | code_location:node-ipc/services.js and node-ipc/entities/EventParser.js |
node_modules/node-ipc/services.js | file_path | High | Installed package file path identified as modified in public technical analysis. | code_location:node-ipc/services.js and node-ipc/entities/EventParser.js |
1 indicators
| Indicator | Type | Confidence | Context | Source refs |
|---|---|---|---|---|
CVE-2026-4864 | cve | Medium-High | Advisory identifier associated with the malicious node-ipc release set. | vulnerability_id:CVE-2026-4864 |
ci-cd • ci
Prioritize workflow runs that both resolved an affected node-ipc version and exposed NPM_TOKEN, GITHUB_TOKEN, AWS_ACCESS_KEY_ID, GOOGLE_API_KEY, or similar secrets to the runtime. CI telemetry is strongest when it lines up with the compromise window and the affected workflow or package versions.
Source refs
affected_versions:node-ipc@9.1.6, node-ipc@9.2.3, node-ipc@12.0.1collection:developer-and-ci-environment-secretsremediation:upgrade-to-unaffected-node-ipc-release-and-rotate-secrets cache-review • ci
Review GitHub Actions and package-manager caches for retained affected node-ipc tarballs before restoring dependencies. CI telemetry is strongest when it lines up with the compromise window and the affected workflow or package versions.
Source refs
affected_versions:node-ipc@9.1.6, node-ipc@9.2.3, node-ipc@12.0.1remediation:upgrade-to-unaffected-node-ipc-release-and-rotate-secrets filesystem • host
Review node_modules/node-ipc/services.js and node_modules/node-ipc/entities/EventParser.js in any build or workstation snapshot that resolved node-ipc 9.1.6, 9.2.3, or 12.0.1. Host artifacts are most useful when they appear near the package-resolution window and corroborate network or workflow evidence.
Source refs
code_location:node-ipc/services.js and node-ipc/entities/EventParser.js secret-response • host
If affected versions executed, rotate npm, GitHub, cloud, and source-control tokens present in the runtime environment and inspect audit logs for subsequent use. Host artifacts are most useful when they appear near the package-resolution window and corroborate network or workflow evidence.
Source refs
collection:developer-and-ci-environment-secretsremediation:upgrade-to-unaffected-node-ipc-release-and-rotate-secrets dns • network
Alert on DNS queries where qname ends with .sh.azurestaticprovider.net, especially from CI runners, build containers, or developer workstations that resolved node-ipc. Isolated DNS or proxy hits can be noisy; prioritize overlaps with the affected package, workflow, or host artifacts.
Source refs
exfiltration:dns-exfiltration-to-sh.azurestaticprovider.net sql • network
SELECT timestamp, src_host, process_name, qname FROM dns_logs WHERE qname LIKE '%.sh.azurestaticprovider.net'; Isolated DNS or proxy hits can be noisy; prioritize overlaps with the affected package, workflow, or host artifacts.
Source refs
exfiltration:dns-exfiltration-to-sh.azurestaticprovider.net spl • network
index=dns qname="*.sh.azurestaticprovider.net" | stats count min(_time) max(_time) values(src_host) values(process_name) by qname Isolated DNS or proxy hits can be noisy; prioritize overlaps with the affected package, workflow, or host artifacts.
Source refs
exfiltration:dns-exfiltration-to-sh.azurestaticprovider.net dependency_inventory • repo
Search package-lock.json, npm-shrinkwrap.json, SBOM exports, artifact manifests, and CI dependency logs for node-ipc versions 9.1.6, 9.2.3, or 12.0.1. Dependency or workflow hits alone are not proof of execution; correlate with runtime or network evidence before escalating.
Source refs
affected_versions:node-ipc@9.1.6, node-ipc@9.2.3, node-ipc@12.0.1remediation:upgrade-to-unaffected-node-ipc-release-and-rotate-secrets Event time
May 14, 2026, 12:00 AM
Socket published primary technical reporting on malicious node-ipc versions 9.1.6, 9.2.3, and 12.0.1.
Event time
May 15, 2026, 12:00 AM
StepSecurity published response and detection guidance for the node-ipc npm supply-chain attack.
Event time
May 15, 2026, 12:00 AM
Snyk published advisory coverage, including CVE-2026-4864 and remediation guidance.
May 15, 2026, 12:00 AM
StepSecurity
Adds response workflow, host/workflow detection ideas, DNS lookup patterns, GitHub Actions mitigation guidance, and affected-version cleanup steps.
May 14, 2026, 12:00 AM
Socket
Identifies malicious node-ipc versions, the modified files, no-install-script execution path, DNS exfiltration behavior, and package/account abuse indicators.
May 15, 2026, 12:00 AM
The Hacker News
Corroborates the incident, affected versions, credential-stealing purpose, and expired-domain account-recovery hypothesis; does not materially expand technical detail beyond primary sources.
May 15, 2026, 12:00 AM
Snyk
Corroborates affected versions, package removal timing, maintainer-account compromise assessment, CVE reference, and upgrade/remediation guidance.