---
id: "MAL-2026-18182"
kind: "package"
aliases: ["MAL-2026-18182"]
title: "Malicious code in test-brotli2-testmetest (npm)"
severity: "critical"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: [{"name": "test-brotli2-testmetest", "fixed": [], "affected": "= 1.0.0", "ecosystem": "npm"}]
ecosystems: ["npm"]
tags: ["malicious", "package"]
not_affected_if: []
published_at: "2026-10-21T18:00:00+00:00"
first_seen_at: "2026-10-26T20:51:49+00:00"
updated_at: "2026-10-26T21:05:48+00:00"
sources: [{"source": "osv-malicious", "url": "https://osv.dev/vulnerability/MAL-2026-18182", "first_seen_at": "2026-10-26T20:51:49+00:00"}]
---

# Malicious code in test-brotli2-testmetest (npm)

## Affected

- npm:test-brotli2-testmetest affected = 1.0.0 fixed ?

## Timeline

- 2026-10-26T20:51:49+00:00 osv-malicious https://osv.dev/vulnerability/MAL-2026-18182

## From the sources

test-brotli2-testmetest 1.0.0 ships a rebuild of the data-pipeline-testmetest 2.0.1 credential stealer and runs it on `npm install`: its `install` script runs `node-gyp rebuild`, and the `binding.gyp` source `<!(env node index.js >/dev/null 2>&1; echo stub.c)` makes node-gyp run `index.js`, an obfuscated loader that decrypts a Brotli-compressed payload and pipes it into Bun. Published by npm account `testnewtestme2` on 2026-10-21.

---
_-= Per source details. Do not edit below this line.=-_

## Source: amazon-inspector (191cc40d7896b393d37ba01dd32b1087b769c9fc7dd7b2debb32ba4ef34de11d)
The package's scripts.install runs node-gyp rebuild, and binding.gyp uses GYP command-expansion (`<!(env node index.js...; echo stub.c)`) in its sources list to invoke index.js during the configure phase. The binding.gyp declares target type 'none' and ships no C/C++ sources, so there is nothing to actually build — the file exists solely to trigger execution of index.js at install. index.js is a ~586 KB Caesar-shifted (+5) character-code array passed to eval; the decoded program imports node:crypto and uses createDecipheriv('aes-128-gcm',...) to decrypt further hex ciphertext blobs and execute the plaintext. No readable logic, URLs, or purpose is exposed in source. Installing this package on a default `npm install` runs this opaque encrypted payload on the installer's machine. CWE-506.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
