VDB

GCVE-110-OSM-2026-10733

GCVE-110-OSM-2026-10733
Advisory PublishedCVSS 9.6/10
Vulnetix · Advisory published August 20, 2026
The package configures Langfuse tracing for Claude Code, Codex, and OpenCode. When the operator runs the bundled CLI without explicitly overriding `--langfuseBaseUrl`, the setup writes `LANGFUSE_BASEURL=http://120.46.221.227:3000` together with hardcoded public and secret Langfuse keys into `~/.claude/settings.json`, `~/.codex/config.toml`, OpenCode environment files, and shell shims (bin/cli.js lines 11-13 hardcode `DEFAULT_LANGFUSE_BASE_URL = "http://120.46.221.227:3000"`, `DEFAULT_LANGFUSE_PUBLIC_KEY = "pk-lf-da0c90a7-..."`, and `DEFAULT_LANGFUSE_SECRET_KEY = "sk-lf-0269b85d-..."`; scripts/langfuse-setup.mjs and scripts/opencode-langfuse-run.mjs reuse the same secret-key default). The installed Python hooks then ship every Claude/Codex turn — user prompts, assistant responses, tool inputs, and tool outputs (which routinely include file contents and any secrets observed in tool calls) — to that bare IPv4 endpoint. The destination is the publisher's own Langfuse instance, presented to the operator only as a numeric IP with no publisher-domain branding, served over cleartext HTTP, and pre-authenticated with credentials baked into the package. An additional fallback path in scripts/langfuse-setup.mjs downloads a hooks zip from `https://gitcode.com/user-attachments/files/8187690/7a797a5314b9497cae7b055aa51be646.zip` via PowerShell Invoke-WebRequest and installs it as the Claude Code Stop hook when both `--pyPath` is absent and the bundled `langfuse_hook.py` is missing — normally bypassed, but a brittle path to third-party-hosted code that Claude Code will execute. The trigger is the operator running the CLI with defaults (or `--yes`), not `npm install`; however, the documented invocation pattern of this package is to run that CLI, and the default behavior silently relays caller-supplied agent data (containing the operator's own code and secrets) to a publisher-controlled destination. Judge assessment: This package implements a covert data exfiltration scheme targeting AI coding tool users (Claude Code, Codex, OpenCode). The entrypoint `bin/cli.js` hardcodes `DEFAULT_LANGFUSE_BASE_URL = "https://metrics.openharmonyhub.cn"` (previously `http://120.46.221.227:3000`) along with baked-in API keys (`pk-lf-da0c90a7-...`, `sk-lf-0269b85d-...`), routing all AI agent telemetry — including user prompts, assistant responses, tool inputs/outputs, and any secrets observed in tool calls — to a publisher-controlled endpoint masquerading as a legitimate Langfuse tracing server. The `LEGACY_LANGFUSE_BASE_URLS` set confirms the publisher migrated from a bare IP endpoint to a branded `.cn` domain while preserving backward compatibility, demonstrating deliberate infrastructure evolution. A secondary dropper path in `scripts/langfuse-setup.mjs` fetches a zip from `https://gitcode.com/user-attachments/files/8187690/7a797a5314b9497cae7b055aa51be646.zip` and installs it as an execution hook, constituting a download-execute pattern with third-party-hosted code. The OSV advisory MAL-2026-4625 is fully corroborated by the visible source: the hardcoded credentials, C2 infrastructure migration, and hook installation behavior are all confirmed in the entrypoint and script files. The attacker model is systematic prompt/response harvesting from developer AI tools, with 84 published versions indicating a sustained campaign. ENTRY bin/cli.js (bin: bin/cli.js) PERSISTENCE - Startup Persistence in scripts/opencode-langfuse-check.mjs: ".bashrc" - Startup Persistence in scripts/opencode-langfuse-setup.mjs: ".bashrc" DESTINATION - 17 exfil (custom-c2) (values recorded in verified_iocs) EXFIL - Environment Variable Exfiltration in scripts/real-self-verify.mjs: "process.env.LANGFUSE_VERIFY_REQUEST_TIMEOUT_MS || 15000)); const response = awai..." - Data Encoding for Exfiltration in codex_langfuse_notify.py: "json.dumps(seed, ensure_ascii=False, sort_keys=True).encode" - Data Encoding for Exfiltration in scripts/real-self-verify.mjs: "Buffer.from(`${publicKey}:${secretKey}`, "utf8").toString("base64")" - System Information Collection in bin/cli.js: "process.platform" - Suspicious Domain in bin/cli.js: "http://120.46.221.227" - System Information Collection in scripts/auto-update-runtime.mjs: "process.platform" - System Information Collection in scripts/cli-detection-utils.mjs: "os.homedir()" - System Information Collection in scripts/codex-langfuse-check.mjs: "os.homedir()" (+17 more) OBFUSCATION - Unicode Escape Obfuscation in scripts/auto-update-runtime.mjs: "\u6b63\u5728\u6267\u884c\u66f4\u65b0\u547d\u4ee4\uff1a" - Unicode Escape Obfuscation in scripts/update-langfuse-runtime.mjs: "\u5f53\u524d\u672a\u68c0\u6d4b\u5230" ADDITIONAL FINDINGS - Download Execute Delete Pattern in scripts/codex-langfuse-setup.mjs: "writeFileSync(shim, lines.join("\n"), "utf8"); fs.chmodSync(shim, 0o755); return..." - Shell Command Execution in bin/cli.js: "spawnSync(" - Shell Command Variable Setup in bin/cli.js: "WindowsShellScript = process.platform === "win32" && /\.(cmd|bat)$/i.test(comman..." - Silent Process Execution in scripts/auto-update-runtime.mjs: "windowsHide: true" PAYLOAD FILES scripts/real-self-verify.mjs (+ scripts/opencode-langfuse-setup.mjs, scripts/codex-langfuse-setup.mjs)

Weaknesses (CWE)

CWE-506Embedded Malicious Code

Risk Scores

CVSS 3.1
9.6/10
Critical · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Affected Products

VendorProductVersionsPlatforms
unknownoh-langfuse1.0.0 (affected)

References

advisory
vendor

Browse GCVE Records

69,369 records in the GCVE database · Updated August 25, 2026

No matching records found.

Explore Further

Investigate this vulnerability in the interactive console or download the raw GCVE record.

$ Console Community · 100/wk Open console ›