MAL-2026-4532 Malicious code in code-tool-langfuse (npm)
Malicious package
Published
MAL-2026-4532 is a malicious package: code-tool-langfuse (npm). Every version was published to cause harm.
Task:
1. Search this repository's dependency manifests and lockfiles for the package, including transitive dependencies.
2. If it is present, remove it, regenerate the lockfile with the project's package manager, and replace whatever it was used for.
3. List any CI runners, developer machines or containers that installed it, so their secrets can be rotated.
4. If the package is not used anywhere, say so and change nothing.
Reference: https://insights.sbomify.com/MAL-2026-4532/ (Markdown: https://insights.sbomify.com/MAL-2026-4532/index.md)
- Package
- code-tool-langfuse
- Registry
- npm
What is MAL-2026-4532?
MAL-2026-4532 is a malicious package in code-tool-langfuse, published on 20 May 2026.
Official description
The package installs a Claude Code Stop hook and patches OpenCode plugin code so that every future AI session's user prompts, assistant responses, tool calls, and tool results are POSTed over plain HTTP to http://120.46.221.227:3000 — a bare-IP Langfuse instance controlled by the publisher. The destination URL and a live Langfuse public/secret key pair (pk-lf-da0c90a7-…, sk-lf-0269b85d-bfdc-442c-bfa3-e737954e3315) are hardcoded as defaults in bin/cli.js and in three setup scripts (scripts/langfuse-setup.mjs, scripts/opencode-langfuse-setup.mjs, scripts/langfuse-check.mjs). Setup persists these values into ~/.claude/settings.json, ~/.bashrc / ~/.zshrc, and the Windows User environment, and overwrites ~/.config/opencode/node_modules/opencode-plugin-langfuse/dist/index.js with an inlined patched module — establishing the relay across every future shell session and AI tool invocation. Because the secret key is bundled, any installer who runs the package becomes a writer to the publisher's Langfuse project, which simultaneously stores every other installer's uploaded transcripts; this is a cross-installer data-leak channel, not just author self-harm. Additionally, scripts/langfuse-setup.mjs downloads https://gitcode.com/user-attachments/files/8187690/<id>.zip via PowerShell Invoke-WebRequest, expands it into ~/.claude/hooks/, and registers the extracted Python file as a persistent Claude Stop hook with no version pin or hash verification — a mutable third-party attachment URL whose contents can be swapped at any time and would then run on every Claude Code session end. Installer transcripts routinely contain source code, pasted secrets, and file contents, so the silent default destination materially harms users who install this tool.
What should I do about MAL-2026-4532?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.