Skip to content
supplychainattack.orgSupply chain attack incident catalog
resolvedcritical

Malicious code in @xiaohhhh1/canvas-agent (npm)

The npm package @xiaohhhh1/canvas-agent contained malicious code that establishes a WebSocket connection to a remote relay server, allowing unauthenticated remote attackers to execute arbitrary commands and read arbitrary files on the host system without user approval.

ShareXLinkedInHacker News
Disclosed
Last updated
Blast radius
Any system with @xiaohhhh1/canvas-agent installed and executed; remote attacker gains unrestricted command execution and file access via relay server.
Ecosystems
Attack vectors
Affected entities
  • @xiaohhhh1/canvas-agentnpm package containing malicious code

The npm package @xiaohhhh1/canvas-agent was found to contain malicious code that creates a significant remote code execution vulnerability. Upon execution, the package's binary opens an outbound WebSocket connection to wss://canvas.xiaohhhh1.com/api/agent-relay and forwards relay messages as authenticated HTTP requests to a local server.\n\nThe malicious implementation exposes multiple dangerous endpoints through the relay mechanism. These include /agent/codex/turn and /agent/claude/turn which spawn local CLI tools, /agent/codex/approval for approval decisions, /agent/local-image which reads arbitrary image files from the filesystem, and /agent/local-file/reveal which opens arbitrary paths in the OS file manager. The codex-client.js component maps a caller-supplied permissionMode of 'full' to an unrestricted Codex sandbox with danger-full-access and approvalPolicy set to 'never'.\n\nThis configuration allows a remote peer connected to the vendor relay to execute arbitrary commands and modify files on the installer's host without any local approval prompt. The same relay path also permits pulling image files from arbitrary absolute paths on the victim's disk, enabling data exfiltration.\n\nThe incident was identified by the OpenSSF's malicious-packages project and assigned identifier MAL-2026-13398.

Indicators of compromise

Packages
  • @xiaohhhh1/canvas-agent
Domains
  • canvas.xiaohhhh1.com

Remediation

  • Immediately uninstall @xiaohhhh1/canvas-agent from all systems
  • Audit systems that had this package installed for signs of unauthorized access or file modifications
  • Review network logs for connections to canvas.xiaohhhh1.com
  • Rotate any credentials or tokens that may have been exposed
  • Check for unauthorized command execution or file access in system logs
  • Consider this a critical security incident and treat affected systems as potentially compromised

Sources

  1. GitHub Advisory GHSA-29wq-c378-jw6v · GitHub Advisory Database

Cite this entry

"Malicious code in @xiaohhhh1/canvas-agent (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 6, 2026; last updated August 7, 2026. https://supplychainattack.org/incident/malicious-code-in-xiaohhhh1-canvas-agent-npm-1pf29g

Suggest a correction

Found an error or have a newer source? Corrections to factual errors take priority over new entries.

  1. containedcritical

    Malware in svelte-dim-kit

    The npm package svelte-dim-kit was found to contain malware, potentially giving attackers full control of affected systems. All systems with this package installed should be considered compromised and secrets/keys rotated immediately from a different computer.

    npmCompromised package
  2. containedcritical

    Malicious code in @syncraft-labs/react (npm)

    The npm package @syncraft-labs/react contained obfuscated malicious code in its ESM distribution that implements the EtherHiding pattern, fetching and executing arbitrary code from an Ethereum smart contract via RPC endpoints. The tampering occurred post-build in the dist/index.js artifact.

    npmCompromised package
  3. containedcritical

    Malicious code in stillm4ddpocs-demo-sprocket (npm)

    The npm package stillm4ddpocs-demo-sprocket version 999.9.12 contains malicious code that exfiltrates system and project metadata via multiple channels (HTTPS, HTTP, and DNS) to a hardcoded callback host. The package uses a high version number to exploit dependency-confusion attacks against organizations with internal packages of the same name.

    npmCompromised packageDependency confusion
  4. resolvedcritical

    Malicious code in stillm4ddpocs-rtest-bravo (npm)

    The npm package stillm4ddpocs-rtest-bravo contained malicious code in its preinstall script that automatically executed during installation, collecting system information and internal package metadata and exfiltrating it to a third-party Interactsh collector via HTTPS and DNS tunneling.

    npmCompromised package