Malicious code in gaarf-node-bq (npm)
gaarf-node-bq is a malicious npm package that acts as a dependency-confusion/typosquat canary targeting Google's internal gaarf package. The package's postinstall script collects host metadata and exfiltrates it to an external endpoint without user consent.
- Disclosed
- Last updated
- Blast radius
- Any organization or developer that mis-resolved the private gaarf package name to the public npm registry during installation.
- Ecosystems
- Attack vectors
- Affected entities
- gaarf-node-bqMalicious npm package designed as a dependency-confusion/typosquat canary targeting the internal google/ads-api-report-fetcher (gaarf) package
gaarf-node-bq is a malicious npm package published to the public registry as a dependency-confusion and typosquatting canary targeting the internal Google package google/ads-api-report-fetcher (gaarf). The package contains no legitimate functionality; its bin entry is an empty noop.
The malicious behavior is triggered via a postinstall lifecycle script that collects host identifiers including hostname, platform, architecture, Node.js version, package name, and npm lifecycle event. This metadata is then exfiltrated via an HTTP POST request to a hardcoded endpoint: https://yu7pug2j.instances.poc.jchunt.top/gaarf-node-bq.
The attack targets organizations or developers who misconfigure their npm registry resolution, causing the private gaarf package name to resolve to the public registry instead of the intended internal source. Installation of the malicious package triggers the data exfiltration automatically at install time without explicit user consent.
This incident was identified and credited to the OpenSSF's malicious-packages project.
Indicators of compromise
- Packages
- gaarf-node-bq
- Domains
- yu7pug2j.instances.poc.jchunt.top
Remediation
- Audit npm package installations and registry configurations to ensure private package names do not resolve to the public npm registry
- Review and revoke any npm tokens or credentials that may have been exposed
- Implement strict npm registry scoping and authentication policies for internal packages
- Monitor for any suspicious outbound connections to yu7pug2j.instances.poc.jchunt.top or similar external endpoints
- Use npm audit and supply chain security tools to detect dependency-confusion and typosquatting attempts
- Remove gaarf-node-bq from all affected systems and reinstall legitimate dependencies from the correct registry
Sources
- GitHub Advisory GHSA-mf44-x4mq-gp48 · GitHub Advisory Database
Cite this entry
"Malicious code in gaarf-node-bq (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 19, 2026; last updated August 19, 2026. https://supplychainattack.org/incident/malicious-code-in-gaarf-node-bq-npm-wp093h
Suggest a correction
Found an error or have a newer source? Corrections to factual errors take priority over new entries.
Related incidents
- containedcritical
Malicious code in bazelisk (npm)
A malicious npm package named bazelisk, impersonating Google's legitimate bazelbuild/bazelisk project, was published with a postinstall script that exfiltrates system and environment information to an attacker-controlled server. The package exhibits dependency-confusion and typosquatting characteristics, collecting hostname, platform, architecture, Node version, and npm lifecycle event data.
npmCompromised packageDependency confusionTyposquatting - resolvedcritical
Malicious code in localize-extract (npm)
localize-extract@1.0.0 on npm contained malicious postinstall code that exfiltrated host identifiers to an attacker-controlled endpoint. The package name resembled @angular/localize, suggesting a dependency-confusion or typosquatting attack.
npmCompromised packageTyposquattingDependency confusion - resolvedcritical
Malicious code in ngsw-config (npm)
A malicious npm package named ngsw-config was published to shadow Angular's legitimate tooling. The package's postinstall script collected and exfiltrated host identifiers (hostname, platform, architecture, Node version, package/lifecycle name, timestamp) to a hardcoded endpoint without consent or documentation, targeting dependency-confusion scenarios in internal build systems.
npmCompromised packageTyposquattingDependency confusion - resolvedcritical
Malicious code in depcruise-wrap-stream-in-html (npm)
depcruise-wrap-stream-in-html@99.9.1 is a malicious npm package that mimics an internal helper of dependency-cruiser. It is a hollow package that downloads and executes arbitrary code from a Google Cloud Storage bucket during installation.
npmCompromised packageDependency confusionTyposquatting