Malicious code in tt-help-cli-ycl (npm)
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (5246f6fbb6e6d46a9a9cab000fb5e2c2f2816831f9df67f64803054c92423963) The package's `watchdog` subcommand runs a long-lived agent that POSTs a heartbeat to a configurable remote server (default advertised as http://117.71.53.99:17301) and executes commands returned by that server. `_buildHeartbeatBody` collects hostname, non-loopback LAN IP, OS platform/release/arch, CPU count, memory, uptime, load average, node version, the running child-process table, and the contents of `~/.tt-help.json` (server, proxy, browser path, userId), then sends them to `${serverUrl}/api/watchdog/heartbeat`. The response `commands` array is passed unchanged to `spawn('sh', ['-c', cmd])` (or `cmd /c` on Windows) through ProcessManager.startCommand, giving the remote server arbitrary shell execution on the host running the agent. Independently, `startUpgradeChecker` polls the npm registry every 10 minutes and, on any version bump, runs `npm install -g tt-help-cli-ycl@latest` via `child_process.exec`, so any future publish to the `latest` dist-tag is installed unattended on every running agent. The default C2 host is a bare IPv4 address on a non-standard port with no TLS.
Malicious code in tt-help-cli-ycl (npm)
Description
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (5246f6fbb6e6d46a9a9cab000fb5e2c2f2816831f9df67f64803054c92423963) The package's `watchdog` subcommand runs a long-lived agent that POSTs a heartbeat to a configurable remote server (default advertised as http://117.71.53.99:17301) and executes commands returned by that server. `_buildHeartbeatBody` collects hostname, non-loopback LAN IP, OS platform/release/arch, CPU count, memory, uptime, load average, node version, the running child-process table, and the contents of `~/.tt-help.json` (server, proxy, browser path, userId), then sends them to `${serverUrl}/api/watchdog/heartbeat`. The response `commands` array is passed unchanged to `spawn('sh', ['-c', cmd])` (or `cmd /c` on Windows) through ProcessManager.startCommand, giving the remote server arbitrary shell execution on the host running the agent. Independently, `startUpgradeChecker` polls the npm registry every 10 minutes and, on any version bump, runs `npm install -g tt-help-cli-ycl@latest` via `child_process.exec`, so any future publish to the `latest` dist-tag is installed unattended on every running agent. The default C2 host is a bare IPv4 address on a non-standard port with no TLS.
Affected software
Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
Technical Details
- Gcve Source
- db.gcve.eu
- Osv Id
- MAL-2026-12488
- Osv Schema Version
- 1.7.4
- Aliases
- []
- Ecosystems
- ["npm"]
- Database Specific Severity
- null
- Cvss Version
- null
Threat ID: 6a735741bf8831d539154dd9
Added to database: 08/05/2026, 15:31:13 UTC
Last updated: 08/05/2026, 15:31:13 UTC
Views: 1
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
External Links
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.