---
canonical: "https://firewall.lpm.dev/npm/test__123q1/v/2.1.3"
markdown: "https://firewall.lpm.dev/npm/test__123q1/v/2.1.3.md"
package: "test__123q1"
report_status: "published"
title: "test__123q1@2.1.3 npm security report"
verdict: "malicious"
version: "2.1.3"
---

# test\_\_123q1@2.1.3 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 & quarantined** — Loss of credentials and private files, followed by compromise of packages owned by a stolen npm token.

- **Verdict:** Malicious
- **Product-default install policy:** Block
- **Firewall policy:** Matched malicious
- **Public report status:** Published
- **Threat category:** Install Hook Abuse
- **Selected version:** 2.1.3
- **Selected version is latest:** Yes
- **Analysis source:** AI Security Review (lpm-firewall-ai)

Installing the package runs a credential-stealing payload without user action. It collects local secrets, sends an archive to Telegram, and attempts to republish the victim’s npm packages with the payload installed.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Verdict:** Malicious
- **Confidence:** 99.0%
- **Started:** 2026-08-29T11:47:41.384Z
- **Finished:** 2026-08-29T11:48:44.680Z
- **Download time:** 251 ms
- **Static scan time:** 160 ms
- **AI review time:** 62884 ms
- **Total time:** 63296 ms

## Security analysis

### Published attack-surface review

- **Summary:** Installing the package runs a credential-stealing payload without user action. It collects local secrets, sends an archive to Telegram, and attempts to republish the victim’s npm packages with the payload installed.

- **Trigger:** npm installation invokes the postinstall script.

- **Impact:** Loss of credentials and private files, followed by compromise of packages owned by a stolen npm token.

- **Evidence paths:** package.json, dist/script.js

- **Review source:** ai\_review

- **Reviewed:** 2026-08-29T11:48:44.680Z

### AI review details

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

- **Mechanism:** Broad local secret collection, Telegram exfiltration, and npm package infection using stolen tokens.

- **Attack narrative:** On installation, the package scans the user’s home and project directories for secrets, credentials, wallet data, npm configuration, and environment values. It builds and uploads an archive of the findings to Telegram. It then collects npm tokens, identifies packages belonging to those token holders, downloads and modifies them to run this payload at postinstall, and republishes them using the stolen credentials.

- **Rationale:** This is a concrete install-time credential theft and npm supply-chain propagation payload. The source directly implements collection, exfiltration, token use, and package republishing.

- **Files touched:** dist/script.js, package.json, scripts.json, .npmrc, report-\<timestamp\>/files/\*, report-\<timestamp\>.zip

- **Network endpoints:** https://api.telegram.org, https://registry.npmjs.org/-/whoami, https://registry.npmjs.org/-/v1/search

### Review decision

- **Verdict:** Malicious

- **Confidence:** 99.0%

- **Recommended action:** publish\_block

- **Intent class:** Malware

- **False-positive risk:** Low

- **Evidence for:** The manifest automatically runs dist/script.js after installation., The script searches the home directory and project paths for sensitive files, SSH keys, cloud credentials, npm configuration, and relevant environment variables., It copies collected files into a report, archives the report, and uploads it to Telegram., It extracts npm tokens, enumerates the token holder’s packages, adds its own postinstall hook, copies its payload, and publishes altered packages.

## Public findings

### 1. High: Install Time Lifecycle Scripts
- **Category:** Manifest
- **Confidence:** 90.0%
- **Path:** package.json
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/package.json>)

Package defines install-time lifecycle scripts.

Public source snippet (untrusted):

```json
scripts.postinstall = node dist/script.js
```

### 2. Low: Scripts Present
- **Category:** Manifest
- **Confidence:** 100.0%

Package declares npm scripts.

### 3. High: Child Process
- **Category:** Source
- **Confidence:** 85.0%
- **Path:** dist/script.js
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/dist/script.js>)

Package source references child process execution.

Public source snippet (untrusted):

```javascript
L51: const node_util_1 = require("node:util");
L52: const node_child_process_1 = require("node:child_process");
L53: const node_path_2 = __importDefault(require("node:path"));
```

### 4. Medium: Network
- **Category:** Source
- **Confidence:** 75.0%

Package source references network APIs.

### 5. Medium: Environment Vars
- **Category:** Source
- **Confidence:** 75.0%

Package source references environment variables.

### 6. Low: Filesystem
- **Category:** Source
- **Confidence:** 70.0%

Package source references filesystem APIs.

### 7. High: Same File Env Network Execution
- **Category:** Source
- **Confidence:** 85.0%
- **Path:** dist/script.js
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/dist/script.js>)

A single source file combines environment access, network access, and code or shell execution; review context before blocking.

Public source snippet (untrusted):

```javascript
L462: return __awaiter(this, void 0, void 0, function* () {
L463: return execAsync(`npm pack ${packageName} --pack-destination ${this.tmpDir}`, {
L464: env: {
L465: PATH: process.env.PATH,
L466: SystemRoot: process.env.SystemRoot,
L467: npm[redacted]: "https://registry.npmjs.org/",
L468: },
```

### 8. Critical: Hardcoded Runtime Data Exfiltration
- **Category:** Source
- **Confidence:** 94.0%
- **Path:** dist/script.js
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/dist/script.js>)

Source sends credentials or rich application records to a package-controlled external receiver enabled by default.

Public source snippet (untrusted):

```javascript
L51: const node_util_1 = require("node:util");
L52: const node_child_process_1 = require("node:child_process");
L53: const node_path_2 = __importDefault(require("node:path"));
...
L139: 'pass', 'pwd', 'secret', 'token', 'key', 'auth', 'api',
L140: 'private', 'mnemonic', 'seed', 'credential', 'access', 'npm',
L141: ];
...
L235: 'privatekey',
L236: 'private_key',
L237: 'privkey',
...
L321: const npmrcPath = node_path_1.default.join(dirPath, ".npmrc");
L322: yield promises_1.default.writeFile(npmrcPath, `//registry.npmjs.org/:_authToken=${token}\nregistry=https://registry.npmjs.org/\n`);
L323: });
```

### 9. Critical: Credential Exfiltration
- **Category:** Source
- **Confidence:** 90.0%
- **Path:** dist/script.js
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/dist/script.js>)

Source appears to send environment or credential material to an external endpoint.

Public source snippet (untrusted):

```javascript
L51: const node_util_1 = require("node:util");
L52: const node_child_process_1 = require("node:child_process");
L53: const node_path_2 = __importDefault(require("node:path"));
...
L139: 'pass', 'pwd', 'secret', 'token', 'key', 'auth', 'api',
L140: 'private', 'mnemonic', 'seed', 'credential', 'access', 'npm',
L141: ];
...
L235: 'privatekey',
L236: 'private_key',
L237: 'privkey',
...
L321: const npmrcPath = node_path_1.default.join(dirPath, ".npmrc");
L322: yield promises_1.default.writeFile(npmrcPath, `//registry.npmjs.org/:_authToken=${token}\nregistry=https://registry.npmjs.org/\n`);
L323: });
```

### 10. High: Entrypoint Foreign Package Code Overwrite
- **Category:** Source
- **Confidence:** 94.0%
- **Path:** dist/script.js
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/dist/script.js>)

Manifest-reachable source overwrites another installed package with package-defined remote behavior.

Public source snippet (untrusted):

```javascript
Manifest-reachable source resolves another installed package, overwrites its runtime code, and injects package-defined remote behavior.
dist/script.js:
yield promises_1.default.writeFile(npmrcPath, `//registry.npmjs.org/:_authToken=${token}\nregistry=https://registry.npmjs.org/\n`);
const whoamiRes = yield fetch("https://registry.npmjs.org/-/whoami", {
const url = `https://registry.npmjs.org/-/v1/search` +
yield promises_1.default.writeFile(this.filePath, JSON.stringify(this.content, null, 2), "utf8");
npm[redacted]: "https://registry.npmjs.org/",
if (['node_modules', '.git', 'dist', 'build', '.next', 'coverage', 'vendor', '.cache'].includes(entry)) {
if (['node_modules', '.git'].includes(entry))
node_fs_1.default.copyFileSync(src, dest);
```

### 11. Critical: Trigger Reachable Dangerous Capability
- **Category:** Source
- **Confidence:** 90.0%
- **Path:** dist/script.js
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/dist/script.js>)

A package entrypoint or install-time lifecycle script reaches a source file with blocking dangerous behavior.

Public source snippet (untrusted):

```javascript
Trigger-reachable chain: scripts.postinstall -> dist/script.js
L51: const node_util_1 = require("node:util");
L52: const node_child_process_1 = require("node:child_process");
L53: const node_path_2 = __importDefault(require("node:path"));
...
L139: 'pass', 'pwd', 'secret', 'token', 'key', 'auth', 'api',
L140: 'private', 'mnemonic', 'seed', 'credential', 'access', 'npm',
L141: ];
...
L235: 'privatekey',
L236: 'private_key',
L237: 'privkey',
...
L321: const npmrcPath = node_path_1.default.join(dirPath, ".npmrc");
L322: yield promises_1.default.writeFile(npmrcPath, `//registry.npmjs.org/:_authToken=${token}\nregistry=https://registry.npmjs.org/\n`);
L323: });
```

### 12. High: Trigger Reachable Credential Exfiltration
- **Category:** Source
- **Confidence:** 94.0%
- **Path:** dist/script.js
- **Public source:** [View source](<https://unpkg.com/test__123q1@2.1.3/dist/script.js>)

A manifest entrypoint or package-local install chain reaches credential exfiltration behavior.

Public source snippet (untrusted):

```javascript
Trigger-reachable credential exfiltration chain: scripts.postinstall -> dist/script.js
L51: const node_util_1 = require("node:util");
L52: const node_child_process_1 = require("node:child_process");
L53: const node_path_2 = __importDefault(require("node:path"));
...
L139: 'pass', 'pwd', 'secret', 'token', 'key', 'auth', 'api',
L140: 'private', 'mnemonic', 'seed', 'credential', 'access', 'npm',
L141: ];
...
L235: 'privatekey',
L236: 'private_key',
L237: 'privkey',
...
L321: const npmrcPath = node_path_1.default.join(dirPath, ".npmrc");
L322: yield promises_1.default.writeFile(npmrcPath, `//registry.npmjs.org/:_authToken=${token}\nregistry=https://registry.npmjs.org/\n`);
L323: });
```

### 13. Low: High Entropy Strings
- **Category:** Supply Chain
- **Confidence:** 55.0%

Package source contains high-entropy string patterns.

### 14. Low: Url Strings
- **Category:** Supply Chain
- **Confidence:** 65.0%

Package source contains URL literals.

### 15. 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.

### 16. Low: No License
- **Category:** Manifest
- **Confidence:** 80.0%

Package manifest does not declare a clear license.

## Dependencies and install lifecycle
- **Lifecycle scripts present:** Yes
- **Published lifecycle scripts:** postinstall
- **Dependencies:** 0
- **Optional dependencies:** 0
- **Peer dependencies:** 0
- **Development dependencies:** 1
- **Published dependency-graph edges:** 0

## Package metadata
- **Package:** test\_\_123q1
- **Ecosystem:** npm
- **Version:** 2.1.3
- **Version published:** 2026-08-29T11:39:35.716Z
- **Package first seen:** 2026-08-29T11:48:44.680Z
- **Package last seen:** 2026-08-29T11:48:44.680Z
- **Known versions:** 1
- **Latest version:** 2.1.3
- **Appeal under review:** No
- **Artifact files:** 3
- **Artifact unpacked size:** 42,640 bytes
- **Artifact signatures:** 1
- **Attestations:** No

## References
- [HTML security report](<https://firewall.lpm.dev/npm/test__123q1/v/2.1.3>)
