registry  /  runtimedev-link  /  1.0.14

runtimedev-link@1.0.14

OSV Malicious Advisory

scanned 4h ago · by OpenSSF/OSV

OpenSSF/OSV advisory MAL-2026-6948 confirms this npm version as malicious. The package presents itself as "Pure Node.js telemetry for RuntimeDev platform" but implements a full remote-access trojan. The `runtimedev-link` bin, when invoked with a `--token` that encodes an `apiBase` and hash, enters a command loop that polls `POST /api/telemetry/poll-command` at the operator-supplied base URL and executes any returned `command` string through `/bin/sh` (or the Windows shell) via `execSync`,...

Advisory
MAL-2026-6948
Source
OpenSSF Malicious Packages via OSV
Summary
Malicious code in runtimedev-link (npm)
Details
The package presents itself as "Pure Node.js telemetry for RuntimeDev platform" but implements a full remote-access trojan. The `runtimedev-link` bin, when invoked with a `--token` that encodes an `apiBase` and hash, enters a command loop that polls `POST /api/telemetry/poll-command` at the operator-supplied base URL and executes any returned `command` string through `/bin/sh` (or the Windows shell) via `execSync`, returning stdout/stderr to `/api/telemetry/command-result` (transport.js). The same agent handles server-issued `directoryScan` and `downloadRequest` operations, zipping arbitrary filesystem paths and uploading them base64-encoded to `/api/telemetry/upload-download`; every telemetry cycle reports hostname, username, OS info, home-directory tree, Chrome/Edge/Brave extension inventories, and the host's public IP fetched from api.ipify.org. On first run the agent installs cross-platform persistence: a Windows Task Scheduler entry marked `<Hidden>true</Hidden>` with a LogonTrigger launched via `wscript.exe //B` against a generated VBS; a macOS LaunchAgent plist with `RunAtLoad` + `KeepAlive`; a Linux systemd `--user` unit with `Restart=always` plus `loginctl enable-linger`, falling back to crontab `@reboot` or XDG autostart. Credentials are staged at `~/.config/runtimedev-link/agent.env`. To further evade endpoint visibility, `lib/portable_runtime.js` downloads a standalone Node.js 22.22.0 tarball from nodejs.org, extracts it into `~/.local/share/runtimedev-link/runtime/`, chmods `bin/node` to 0755, and configures persistence to invoke that private interpreter against a copied agent CLI, decoupling ongoing execution from the user's Node/npm. The exfil/C2 destinations are configurable per token, so any attacker distributing a token targets their own infrastructure; the code paths themselves are unambiguously RAT machinery. ## Source: ghsa-malware (bad42e28746353937971161510019f72f4c501f54d3a40410710ae83e83db724) Any computer that has this package installed or running should be considered fully compromised. All secrets and keys stored on that computer should be rotated immediately from a different computer. The package should be removed, but as full control of the computer may have been given to an outside entity, there is no guarantee that removing the package will remove all malicious software resulting from installing it.
Decision reason
One or more suspicious static signals were detected.; source matched previously finalized malicious package; routed for review; previous stored version diff introduced dangerous source

Decision evidence

public snapshot
Behavioral surface
Source
ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNetworkShell
Supply chain
HighEntropyStringsUrlStrings
Manifest
NoLicense
scanned 11 file(s), 59.7 KB of source, external domains: api.ipify.org, nodejs.org, schemas.microsoft.com

Source & flagged code

6 flagged · loading source
bin/cli.jsView file
3L4: const fs = require('fs'); L5: const path = require('path');
Medium
Dynamic Require

Package source references dynamic require/import behavior.

bin/cli.jsView on unpkg · L3
lib/persistence.jsView file
matchType = previous_version_dangerous_delta matchedPackage = runtimedev-link@1.0.12 matchedIdentity = npm:cnVudGltZWRldi1saW5r:1.0.12 similarity = 0.818 summary = stored previous version shares package body but lacks this dangerous source file
High
Previous Version Dangerous Delta

This package version adds a dangerous source file absent from the previous stored version; route for source-aware review.

lib/persistence.jsView on unpkg
5const path = require('path'); L6: const { execSync, spawnSync } = require('child_process'); L7: const { resolveNodeLaunch, writeLauncherVbs } = require('./win_hidden'); ... L15: L16: function homeDir() { L17: return process.env.HOME || process.env.USERPROFILE || ''; L18: } ... L40: function startScriptPath() { L41: return process.platform === 'win32' L42: ? path.join(dataDir(), 'start.vbs') ... L155: const body = [ L156: '#!/bin/sh',
Medium
Install Persistence

Source writes installer persistence such as shell profile or service configuration.

lib/persistence.jsView on unpkg · L5
lib/portable_runtime.jsView file
3const fs = require('fs'); L4: const https = require('https'); L5: const os = require('os'); L6: const path = require('path'); L7: const { execFileSync, execSync } = require('child_process'); L8: ... L40: function nodeDistKey() { L41: const platform = process.platform; L42: const arch = process.arch === 'arm64' ? 'arm64' : 'x64'; ... L187: function ensureAgentAppCopy(baseDataDir) { L188: const pkgRoot = path.resolve(__dirname, '..'); L189: const pkgJson = require(path.join(pkgRoot, 'package.json'));
High
Sandbox Evasion Gated Capability

Source gates dangerous network, credential, or execution behavior behind CI, host, platform, time, or geo fingerprint checks.

lib/portable_runtime.jsView on unpkg · L3
lib/win_hidden.jsView file
matchType = normalized_sha256 matchedPackage = runtimedev-link@1.0.11 matchedPath = lib/win_hidden.js matchedIdentity = npm:cnVudGltZWRldi1saW5r:1.0.11 similarity = 1.000 summary = normalized source hash matched finalized malicious source
High
Known Malware Source Similarity

Source file is highly similar to a previously finalized malicious package; route for source-aware review.

lib/win_hidden.jsView on unpkg
lib/transport.jsView file
matchType = normalized_sha256 matchedPackage = runtimedev-link@1.0.11 matchedPath = lib/transport.js matchedIdentity = npm:cnVudGltZWRldi1saW5r:1.0.11 similarity = 1.000 summary = normalized source hash matched finalized malicious source
High
Known Malware Source Similarity

Source file is highly similar to a previously finalized malicious package; route for source-aware review.

lib/transport.jsView on unpkg

Findings

4 High5 Medium4 Low
HighSandbox Evasion Gated Capabilitylib/portable_runtime.js
HighKnown Malware Source Similaritylib/win_hidden.js
HighKnown Malware Source Similaritylib/transport.js
HighPrevious Version Dangerous Deltalib/persistence.js
MediumDynamic Requirebin/cli.js
MediumNetwork
MediumEnvironment Vars
MediumInstall Persistencelib/persistence.js
MediumStructural Risk Force Deep Review
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings
LowNo License