Malicious code in @guangnao/agent-proxy (npm)
The npm package @guangnao/agent-proxy contained malicious code that established a hidden WebSocket connection to an attacker-controlled endpoint (hub.client-llm.com) and used the installer's stored OAuth credentials to proxy requests to Anthropic Claude and OpenAI ChatGPT APIs, monetizing the victim's paid subscriptions without consent.
- Disclosed
- Last updated
- Blast radius
- Users of @guangnao/agent-proxy who invoke the CLI tool with valid Claude or ChatGPT credentials; their authenticated sessions and paid subscriptions are exposed to remote operator control.
- Ecosystems
- Attack vectors
- Affected entities
- @guangnao/agent-proxynpm package containing malicious code in CLI
The @guangnao/agent-proxy npm package contained intentionally malicious code designed to abuse users' AI API credentials. When the CLI tool was invoked with agent-proxy start, it opened an outbound WebSocket connection to hub.client-llm.com, an endpoint obfuscated at runtime using XOR+base64 encoding with the key 'gnP2p!7xQ' to evade casual code review.\n\nThe malicious behavior accepted remote job messages from the hub operator containing arbitrary HTTP path and body fields. These were then POSTed through the local proxy to api.anthropic.com and ChatGPT/Codex upstream services using the installer's stored OAuth credentials. Responses were streamed back to the hub operator, effectively creating a remote-controlled command channel into the victim's authenticated AI session.\n\nThe attack included a gating mechanism (onlyIfCredentialed) that enrolled only installers with valid Claude or ChatGPT credentials as worker nodes, ensuring the attacker could only exploit users with paid subscriptions. This allowed the hub operator to silently monetize the victim's paid subscription by routing third-party requests through their authenticated session. The behavior was entirely undocumented; the package README falsely claimed the tool was 'self-use only' and warned that vendor ToS forbid account sharing—warnings the malicious code directly violated.\n\nThe incident was identified by Amazon Inspector and credited to the OpenSSF malicious-packages project.
Indicators of compromise
- Domains
- hub.client-llm.com
- Hashes
- 8da2cb00fa6d2b5a0e5f4a4bdca8ca0cfaedf7e583b0f9e9f54274bcf5c39e06
Remediation
- Immediately uninstall @guangnao/agent-proxy from all systems
- Revoke OAuth tokens and credentials for Claude and ChatGPT accounts that may have been exposed
- Review API usage logs for Claude and ChatGPT accounts for unauthorized requests during the period the package was installed
- Audit npm package dependencies to identify and remove any other packages from the same author or with similar obfuscation patterns
- Use npm audit to check for other known malicious packages
Sources
- GitHub Advisory GHSA-p2xx-33v2-xwcj · GitHub Advisory Database
Cite this entry
"Malicious code in @guangnao/agent-proxy (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 14, 2026; last updated August 14, 2026. https://supplychainattack.org/incident/malicious-code-in-guangnao-agent-proxy-npm-n1jp2r
Suggest a correction
Found an error or have a newer source? Corrections to factual errors take priority over new entries.
Related incidents
- resolvedcritical
Malicious code in rust-testing-utils (npm)
The npm package rust-testing-utils contained malicious code that impersonates the pino logger and executes remotely-fetched code with arbitrary privileges. The package spawns a child process that decodes a hardcoded URL, fetches attacker-controlled content, and executes it via Function constructor with full module-loading capability.
npmCompromised packageMalicious commit - resolvedcritical
Malicious code in @syncraft-labs/core (npm)
The npm package @syncraft-labs/core contained obfuscated malicious code in its ESM build that executes on import, fetching and executing attacker-controlled payloads from Ethereum blockchain via JSON-RPC endpoints. The CommonJS build was clean, indicating targeted injection into the ESM entry point.
npmCompromised packageMalicious commit - resolvedcritical
Malicious code in localize-translate (npm)
The npm package localize-translate contained malicious code in its postinstall lifecycle script that collected host identifiers and beaconed them to an attacker-controlled endpoint (gigww0v7.instances.poc.jchunt.top) without user consent. The reconnaissance callback fired automatically on every installation, collecting hostname, platform, architecture, Node version, package name, and timestamp.
npmCompromised packageMalicious commit - containedcritical
Malicious code in mutex-plus (npm)
The npm package mutex-plus contains hidden malicious code that enables remote code execution when a callback object with a specific jobId hash is passed to runExclusive(). The payload is encrypted at rest in lib/plusMutex.min.js and decrypted using the jobId as a key, then executed as a detached Node.js process.
npmCompromised packageMalicious commit