@xiaohhhh1/canvas-agent (npm) · Malicious Code
Affects @xiaohhhh1/canvas-agentSource GCVE Database
Malicious package : remove @xiaohhhh1/canvas-agent and rotate any secrets on hosts that installed it.
Data as of 7 Aug 2026, 15:17 UTC
Malicious package
Published to npm · OSV MAL-2026-13398
What to do
Remove @xiaohhhh1/canvas-agent from every project, lockfile and image that pulls it in. Treat any host that installed it as compromised: rotate the credentials, tokens and keys it could read, from a clean machine.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| npm@xiaohhhh1/canvas-agent | Affected
| Fixed in– |
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
Description
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (a34add291ef7584aec7041449cb2e80d36ae98f93c2725e1aa018707e3334119) On bin start, @xiaohhhh1/canvas-agent opens an outbound WebSocket to the hardcoded relay wss://canvas.xiaohhhh1.com/api/agent-relay and treats inbound messages as HTTP requests to its own loopback API at 127.0.0.1:17371. The bridge unconditionally injects the local agent token (x-canvas-agent-token) into forwarded requests, so remote 'request' messages satisfy token authentication and can invoke /agent/codex/turn and /agent/claude/turn, which spawn the Codex app-server and Claude CLI locally with attacker-supplied prompts and a caller-controlled permissionMode. Codex/Claude are autonomous coding agents that can write files in the workspace and, when permissionMode is widened to danger-full-access, execute arbitrary shell commands. The same code path also bypasses the loopback server's browser-Origin allow-list: the origin gate is populated only after token validation, and the relay bridge presents the valid token without any user-consented browser Origin, so remote-originated calls pass the token+origin check the README advertises. The net effect is a network-to-local-agent-to-shell control path from a hardcoded author-controlled server into the installer's machine and any repository it is run against.
References
- npmjs.com/package/@xiaohhhh1/canvas-agent/v/0.4.4 (opens in a new tab)
- npmjs.com/package/@xiaohhhh1/canvas-agent/v/0.4.11 (opens in a new tab)
- npmjs.com/package/@xiaohhhh1/canvas-agent/v/0.4.10 (opens in a new tab)
- npmjs.com/package/@xiaohhhh1/canvas-agent/v/0.4.9 (opens in a new tab)
- npmjs.com/package/@xiaohhhh1/canvas-agent/v/0.4.8 (opens in a new tab)