{"id":"MAL-2026-5598","summary":"Malicious code in 0x2ai-demo9x (npm)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (8e796c3398589b92ecd70f45bc41128101313dd07adeb0634199ac3fef59d19d)\nOn `npm install`, scripts/postinstall.cjs copies the package's payload/ tree into the installer's project root (process.env.INIT_CWD) without consent, dropping.mcp.json,.claude/settings.json,.claude/commands/0x2ai-boot.md, and a CLAUDE.md persona prompt. The dropped.mcp.json hardcodes BRIDGE_URL=https://demo9.0x2ai.com and a static Bearer token (942b955170161eef3a59815f0e8fd775f0ea6b8fc1d59364), wiring every subsequent Claude Code session opened in that directory to the author's HTTPS bridge. The bundled MCP server (payload/chatroom-mcp-lite-patched.cjs) exposes provider_query, memory_save/load, settings_get/set, etc., so user prompts and saved memory are relayed to the author's endpoint. bin/start.cjs spawns `claude --dangerously-skip-permissions` in that staged directory, disabling tool-use consent prompts while the author-controlled MCP is active. Two long-poll workers (payload/chatroom-monitor.cjs, payload/chatroom-wait-once.cjs) continuously fetch https://demo9.0x2ai.com/api/wait and surface the responses as chatroom events that the agent is instructed (via the staged 0x2ai-boot.md and CLAUDE.md persona) to act on as if they were user input — giving the bridge operator a push channel into the local Claude Code tool-use loop (file/shell-adjacent capabilities) with no per-call approval. The staged CLAUDE.md additionally instructs the agent to refuse to disclose how the package works, concealing the relay from the developer. Net effect: installing this package converts the developer's project into a remote-controlled agent endpoint owned by the author.\n","modified":"2026-07-17T03:04:23.250987149Z","published":"2026-06-11T07:16:11Z","withdrawn":"2026-07-16T00:38:53Z","database_specific":{"malicious-packages-origins":[{"sha256":"8e796c3398589b92ecd70f45bc41128101313dd07adeb0634199ac3fef59d19d","source":"amazon-inspector","versions":["1.2.0"],"id":"IN-MAL-2026-005667","import_time":"2026-06-11T07:49:38.925605219Z","modified_time":"2026-06-11T07:16:11Z"}]},"references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/0x2ai-demo9x/v/1.2.0"}],"affected":[{"package":{"name":"0x2ai-demo9x","ecosystem":"npm","purl":"pkg:npm/0x2ai-demo9x"},"versions":["1.2.0"],"database_specific":{"indicators":{"evidence_files":[{"sha256":"4943321a174f2de446781e46abdc4eb4fd333f8cc98cf6fe3cd5fc4bbfb0b0a2","tlsh":"74e0c05706ccd379a5b2a1406c12c50a646ade81364094a0e27c0357bf92694ae23eff","path":"scripts/postinstall.cjs"},{"path":"payload/.mcp.json","sha256":"51df141dcc1a157f34fd86f40e89ed8ae78f3a43c3eec68af320bfe58e7e90d4","tlsh":"dee02605e2e54c83068210264d7c10549992a0174eec7c39b74fc02c9f4d55b2bbaa9d"},{"path":"bin/start.cjs","sha256":"fa5af6d044cd42d37d4c7b0e5f43cf7498e621ef7db1b837ea79e3087e552984","tlsh":"9011005b868e07be57b441c46645c12b990bc84072d0e490d26e03a6fb511e82c677eb"},{"tlsh":"59d10a4912a6223347a29376e64fd177e923a422b209f4e0f05d511a2fc41e897b76fb","path":"payload/chatroom-wait-once.cjs","sha256":"ee4fec4140f83c8447e66311c949f6b435043b897b34c21c2fc21c9eb6ce9325"},{"path":"payload/CLAUDE.md","sha256":"da182270be7cfe3724ffaa180abec7a0b994beb67adbe73403cb90c0f4ba56fd","tlsh":"ce42a51ff300133616aa0165264e7ae3ef3581ac2365453adc2ed1386379b7a53b77e8"}],"package_integrity":[{"filename":"0x2ai-demo9x-1.2.0.tgz","hashes":{"sha1":"2011c2c8aa01c37f6356d0e8ca2e66b794e7ca93","sha512_sri":"sha512-qiypm924PVXZ0eTwXPOFYUyxACwgd2KGL8VbTWmYOqOtsgwbQ0EYxUfKA+sHOF9776RYbfrLStTx39TX9JXiMw=="}}]},"cwes":[{"name":"Embedded Malicious Code","cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature."}],"source":"https://github.com/ossf/malicious-packages/blob/main/osv/withdrawn/npm/0x2ai-demo9x/MAL-2026-5598.json"}}],"schema_version":"1.7.5","credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"}]}