Back to threat feed
CRITICAL Supply Chain Active High confidence

node-ipc Technical Analysis: Import-Time Credential Theft via Malicious npm Releases

Technical teardown of the malicious node-ipc npm releases, including import-time execution, targeted secrets, DNS exfiltration, and concrete defender hunts.

First seen
May 14, 2026, 12:00 AM
Last seen
May 14, 2026, 12:00 AM
Affected assets
2
IOCs
7
Detections
8
Sources
4
Timeline events
3
Incident mode
Supply Chain
Ecosystems
GitHub Actions - npm
Tags: account-abuse, ci-cd, credential-theft, dns-exfiltration, node-ipc, npm, supply-chain

Analyst Readout

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.

Technical Analysis

Attack Overview

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.

Step-by-Step Execution

  1. The attacker published malicious node-ipc releases 9.1.6, 9.2.3, and 12.0.1 to npm under the legitimate package name.
  2. Developer workstations and CI/CD jobs became exposed when they resolved those versions through normal dependency installation or cache restore behavior.
  3. The malicious path executed when an application, build, or test runtime imported node-ipc, rather than during npm lifecycle installation hooks.
  4. The modified logic in services.js and entities/EventParser.js harvested environment secrets from the runtime, including package, source-control, and cloud credentials.
  5. Collected data was encoded into DNS lookups to attacker-controlled subdomains under sh.azurestaticprovider.net.
  6. Effective response required more than version cleanup: defenders needed to inspect affected runtimes, review DNS evidence, and rotate credentials that may have been present when the package was imported.

Code-Level Mechanics

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.

Payload Behavior

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.

Detection Opportunities

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.

Evidence Gaps

Unknowns in the public reporting:

  • The exact maintainer-account takeover or recovery path is not proven in an npm audit trail or maintainer-side postmortem.
  • The full malware source listing, exact function names, and exact exfiltration encoding format are not fully published in the material used for this packet.
  • The public reporting does not establish downstream victim counts or identify every organization that imported the affected versions.
  • The packet inputs do not establish persistence behavior, lateral movement, or automated propagation beyond malicious version publication.

Defensive inferences that should remain labeled as inference:

  • The expired-domain maintainer-email recovery path is a public-reporting hypothesis, not definitive root-cause proof.
  • Treating CI/CD runs as especially high-risk is well supported when affected versions were imported in jobs with secrets present, but it should not be generalized to every repository that merely mentioned the package in a lockfile.
  • Focusing review on import-time side effects is a defensive interpretation of the documented execution path, not a claim that the entire unpublished malicious source has been reconstructed.

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.

Vulnerabilities

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.

IOCs

Affected Assets

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

Network IOCs

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

File, Path, Config, and Hash Artifacts

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

Other Technical Indicators

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

Detection Content

Identify CI jobs that combined affected node-ipc with exposed secrets

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

Review dependency caches for retained affected node-ipc tarballs

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

Inspect reported modified node-ipc files in affected dependency trees

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

Rotate and audit secrets after affected package execution

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

Detect DNS exfiltration to azurestaticprovider infrastructure

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

Example DNS hunt query for passive DNS or resolver logs

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

Splunk DNS exfiltration hunt

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

Hunt for affected node-ipc versions in dependency data

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

Timeline

Event time

May 14, 2026, 12:00 AM

report

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

response-guidance

StepSecurity published response and detection guidance for the node-ipc npm supply-chain attack.

Event time

May 15, 2026, 12:00 AM

advisory

Snyk published advisory coverage, including CVE-2026-4864 and remediation guidance.

Sources