{"id":"MAL-2026-4533","revision":null,"records":[{"revision":"47fa36e75772490cb9cb6d6082af1811","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"MAL-2026-4533","aliases":[],"title":"Malicious code in codebuff-cli (npm)","description":"The npm package `codebuff-cli` impersonates the legitimate `codebuff` package (README copied verbatim from the official CodebuffAI project) and relays authenticated Codebuff traffic — API key, source code, context and chat messages — to an attacker-controlled backend instead of codebuff.com.\n\nThese three versions are not part of the existing OSV record MAL-2026-4533 (Amazon Inspector):\n- 1.0.4 and 1.0.10: the `bin` entry launches an embedded manipulated binary directly (no install hook); its default endpoint is `fireworks-endpoint--57crestcrepe.replit.app` (present in both the binary and its source-map).\n- 1.1.3: default backend `fireworks-api-backend.vercel.app`; downloads the payload from a foreign GitHub repository and disables TLS certificate verification for the launched payload.\n\nThe package was previously disclosed by Amazon Inspector (MAL-2026-4533); this report extends the confirmed-malicious set with three additional versions, determined by static code and dataflow review of the published npm tarballs.\n\nThis report is scoped to the additional versions (1.0.4, 1.0.10, 1.1.3) not yet listed, to avoid duplicating the existing record.\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (bdf777f03e4dc44a9956401136a42f099638025ef7d2197dec630525ad26727d)\nThe package name `codebuff-cli` impersonates the legitimate `codebuff` npm package; the README is copy-pasted from the official CodebuffAI project (it even instructs users to run `npm install -g codebuff`), but the published artifact is an unofficial fork. Three concrete installer-side harms are present:\n\n1. Silent relay of user data to a non-publisher backend. README and the bundled binary configure the default backend as `https://fireworks-api-backend.vercel.app` (a personal Vercel deployment) instead of codebuff.com. Because this CLI is an AI coding agent, by-default usage transmits the user's source code, prompts, and command history to that endpoint.\n2. TLS verification globally disabled. `cli/bin/codebuff.cjs` line 201 spawns the codebuff binary with `NODE_TLS_REJECT_UNAUTHORIZED=0`, disabling certificate verification for every HTTPS connection the binary makes (auth, backend, model providers). Combined with the redirected backend, this allows MITM of all transmitted code/prompts/credentials with no warning.\n3. Unverified binary fetch from a mutable personal-account release. If the bundled binary is missing, `cli/bin/codebuff.cjs` queries `https://api.github.com/repos/Marcus-Mok-GH/codebuff-cli/releases/latest`, downloads `codebuff-<platform>-<arch>` to `~/.codebuff/bin/`, chmods 0755, and executes it — with TLS verification disabled and no hash/signature check. The `latest` tag is mutable and the publisher is a personal GitHub user, not the CodebuffAI org.\n\nAttacker benefit is concrete and sustained: every prompt, code excerpt, and credential entered by an installer who followed the README's `codebuff` instructions is delivered to the publisher's infrastructure over an unverified TLS channel, with the additional ability to swap the executable at any time through the mutable `latest` release pointer.\n","state":0,"publishedAt":"2026-05-22T11:16:55+00:00","modifiedAt":"2026-09-11T04:00:06.5999482+00:00","affected":[{"ecosystem":"npm","name":"codebuff-cli","ranges":[],"versions":["1.1.1","1.0.21","1.1.4","1.0.22","1.0.26","1.0.18","1.0.24","1.1.7","1.0.28","1.1.0","1.0.15","1.0.14","1.0.17","1.0.23","1.0.11","1.0.20","1.1.2","1.0.27","1.1.8","1.0.12","1.1.6","1.1.5","1.0.19","1.1.10","1.1.12","1.1.11","1.0.4","1.0.10","1.1.3"],"rawVersionEvidence":null}],"metrics":[],"references":["https://www.npmjs.com/package/codebuff-cli/v/1.1.1","https://www.npmjs.com/package/codebuff-cli/v/1.0.21","https://www.npmjs.com/package/codebuff-cli/v/1.1.4","https://www.npmjs.com/package/codebuff-cli/v/1.0.22","https://www.npmjs.com/package/codebuff-cli/v/1.0.26","https://www.npmjs.com/package/codebuff-cli/v/1.0.18","https://www.npmjs.com/package/codebuff-cli/v/1.0.24","https://www.npmjs.com/package/codebuff-cli/v/1.1.7","https://www.npmjs.com/package/codebuff-cli/v/1.0.28","https://www.npmjs.com/package/codebuff-cli/v/1.1.0","https://www.npmjs.com/package/codebuff-cli/v/1.0.15","https://www.npmjs.com/package/codebuff-cli/v/1.0.14","https://www.npmjs.com/package/codebuff-cli/v/1.0.17","https://www.npmjs.com/package/codebuff-cli/v/1.0.23","https://www.npmjs.com/package/codebuff-cli/v/1.0.11","https://www.npmjs.com/package/codebuff-cli/v/1.0.20","https://www.npmjs.com/package/codebuff-cli/v/1.1.2","https://www.npmjs.com/package/codebuff-cli/v/1.0.27","https://www.npmjs.com/package/codebuff-cli/v/1.1.8","https://www.npmjs.com/package/codebuff-cli/v/1.0.12","https://www.npmjs.com/package/codebuff-cli/v/1.1.6","https://www.npmjs.com/package/codebuff-cli/v/1.1.5","https://www.npmjs.com/package/codebuff-cli/v/1.0.19","https://www.npmjs.com/package/codebuff-cli/v/1.1.10","https://www.npmjs.com/package/codebuff-cli/v/1.1.12","https://www.npmjs.com/package/codebuff-cli/v/1.1.11","https://research.codelake.dev/advisories/clr-2026-3046-codebuff-cli","https://osv.dev/vulnerability/MAL-2026-4533"],"sourceUrl":"https://osv.dev/vulnerability/MAL-2026-4533","license":"OSV · upstream source license applies","key":"osv:MAL-2026-4533","identifiers":["MAL-2026-4533"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-15T01:46:55.4086044+00:00","complete":true,"records":1781,"lastAttemptAt":"2026-11-15T01:46:55.4086044+00:00","lastSuccessAt":"2026-11-15T01:46:55.6001265+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.6001272+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-7de4d7559a5263003f03d9f70577ab06f92ba4178309f26fce53e22a4a959294-6d7324039073d7c231ba830a084e1f9dd49e3546760dbb1c1c5420bea3fe5eb4","complete":true,"records":425760,"lastAttemptAt":"2026-11-15T01:44:29.7063286+00:00","lastSuccessAt":"2026-11-15T01:44:29.696786+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:44:29.7063286+00:00","snapshotPublishedAt":"2026-11-15T01:24:40+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-d9152245ba1543998e3cfd20d6aff81f","complete":false,"records":13821,"lastAttemptAt":"2026-11-15T01:47:18.6650027+00:00","lastSuccessAt":"2026-11-15T01:47:18.7556446+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:47:18.7556446+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-15T01:46:55.4086044+00:00","complete":true,"records":1125,"lastAttemptAt":"2026-11-15T01:46:55.4086044+00:00","lastSuccessAt":"2026-11-15T01:46:55.6012797+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.6012836+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-a2d6726fa6984ccea1afed1a3e59d87e","complete":false,"records":13833,"lastAttemptAt":"2026-11-15T01:47:00.8199552+00:00","lastSuccessAt":"2026-11-15T00:31:15.078+00:00","error":"13 identifier lookups failed; latest failures include HttpError (HTTP 503). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-15T00:31:15.078+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13861,"expectedIdentifiers":13874,"failedIdentifiers":13},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-64eea06dbd27de8464d5dbce1b78cc794cc59e2d901516ae0d3ea76e624cdae0","complete":true,"records":9955,"lastAttemptAt":"2026-11-15T01:46:55.2267037+00:00","lastSuccessAt":"2026-11-14T13:57:23.1208135+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.2267037+00:00","snapshotPublishedAt":"2026-11-14T13:17:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-f4424d7d4861b1af1404bd15abcb83f295dcd003412a9340ca99dc8200aa148a","complete":true,"records":2014,"lastAttemptAt":"2026-11-15T01:44:50.4630562+00:00","lastSuccessAt":"2026-11-13T19:57:08.2864435+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:44:50.4630562+00:00","snapshotPublishedAt":"2026-11-13T19:33:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-012aff9b2fb349d53e2c4bace6ca57956b6f5f9d82c1dc9fdc1c9b3c738f8977","complete":true,"records":3148,"lastAttemptAt":"2026-11-15T01:46:55.3300683+00:00","lastSuccessAt":"2026-11-14T04:57:03.8279646+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.3300683+00:00","snapshotPublishedAt":"2026-11-14T03:02:50+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-deb41cb32d3b3d67de7960b1647d789a5218551d33a54a4b027ba315bcba590f","complete":true,"records":232473,"lastAttemptAt":"2026-11-15T01:46:55.093583+00:00","lastSuccessAt":"2026-11-15T01:46:53.6377511+00:00","error":null,"lastVerifiedAt":"2026-11-15T01:46:55.093583+00:00","snapshotPublishedAt":"2026-11-15T00:48:23+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}