Supply-chain threat intelligence

Incident detail

criticalnpm·crypto miner·osv

Malicious code in theta-sdk-js (npm)

theta-sdk-js

Risk score

92

AI summary

Indexed incident for theta-sdk-js (npm).

Description

theta-sdk-js@1.2.15 ships src/decrypt.js and src/providers/BaseProvider.js which together implement a hidden execution channel. On module load, decrypt.js reads two encrypted blobs (rsa.db, des.db) from node_modules/tchain-api/apps/docs/app/, DES-decrypts them using the hardcoded password 'hydra' via crypto-js, and returns the plaintext. Top-level IIFEs in src/providers/BaseProvider.js spawn detached node child processes (spawn('node', [], { detached: true, stdio: ['pipe','ignore','ignore'] })), pipe the decrypted plaintext into stdin for execution, and call unref() so the child outlives the parent. The runtime dependency tchain-api@^1.2.5 — declared in package.json — supplies the encrypted payload files, so npm install theta-sdk-js automatically stages the payload host. The distributed dist/thetajs.cjs.js (declared as main) is clean and does not contain this code; the dropper lives only in the src/ tree that is also shipped in the tarball, so consumers that import subpaths or use bundlers/tree-shakers that resolve src/index.js trigger the execution. Encrypting the payload in a sibling package with a hardcoded key, splitting the malicious code away from the declared entrypoint, and executing decoded plaintext in a detached child process are hallmarks of deliberate evasion, not legitimate SDK behavior.

Technical details

Affected versions

=1.2.16=1.2.15=1.2.14=1.2.17

Indicators

  • affected version=1.2.1675%
  • affected version=1.2.1575%
  • affected version=1.2.1475%
  • affected version=1.2.1775%

Timeline

  1. Advisory published
  2. Indexed by ThreatPkg

Related incidents