Trust signals
Why this verdict
PkgRadar discounts a release’s score when public reputation argues against novel malware. The verdict above already reflects these — the panel just explains what was applied.
- Publisher
- GitHub ActionsTrusted automation · −70% score
Effective trust discount applied: −70% (max across signals — discounts don’t stack). New install-lifecycle deltas vs the previous release would clear the discount.
Recommended action
Block this updateStatic evidence trips multiple high-signal indicators. Quarantine the release until the publisher validates the change or you can rule out the indicators below.
Block this release in CIcurl · GitHub Actions
Fail the build when this package version is added or upgraded. Replace $PKGRADAR_TOKEN with a Pro / Team API key from your dashboard.
curl -fsS https://pkgradar.com/gate/npm \
-H "Authorization: Bearer $PKGRADAR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"specs":["[email protected]"],"fail_on":"high"}'GitHub Actions step:
- name: PkgRadar gate
run: |
curl -fsS https://pkgradar.com/gate/npm \
-H "Authorization: Bearer ${{ secrets.PKGRADAR_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"specs":["[email protected]"],"fail_on":"high"}'Why flagged
What the scanner saw
Credential file access: matched ".ssh"
Not observed: package install, lifecycle script execution, or sandbox execution. PkgRadar only inspects on-disk artifacts.
Availability ledger
available
Status history (1 event)
- new → available · risk high · score 324 · status changed
Evidence
Static findings
36 static · 0 from release diff · showing high-signal first.
| Severity | Kind | Path | Detail | Points |
|---|---|---|---|---|
| high | Credential file access | package/dist/modules/SSHMimic/hostKey.js | matched ".ssh" | 30 |
| high | Credential file access | package/dist/modules/VirtualShell/index.js | matched ".SSH" | 30 |
| high | Credential file access | package/dist/modules/VirtualUserManager/index.js | matched ".SSH" | 30 |
| high | Credential file access | package/dist/modules/linuxRootfs.js | matched ".ssh" | 30 |
| high | Install-time lifecycle script | package.json | postinstall="node scripts/postinstall.js" | 30 |
| high | Install Lifecycle Remote Or Exec | package.json | postinstall="node scripts/postinstall.js" | 30 |
| medium | Remote Payload | package/dist/commands/curl.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/modules/VirtualPackageManager/index.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/modules/linuxRootfs.js | matched "curl\n" | 12 |
| medium | Remote Payload | package/dist/commands/manuals-bundle.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/modules/VirtualProxy.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/commands/wget.js | matched "wget " | 12 |
Show all 36 findings (low-signal and informational)
| Severity | Kind | Path | Detail | Points |
|---|---|---|---|---|
| high | Credential file access | package/dist/modules/SSHMimic/hostKey.js | matched ".ssh" | 30 |
| high | Credential file access | package/dist/modules/VirtualShell/index.js | matched ".SSH" | 30 |
| high | Credential file access | package/dist/modules/VirtualUserManager/index.js | matched ".SSH" | 30 |
| high | Credential file access | package/dist/modules/linuxRootfs.js | matched ".ssh" | 30 |
| high | Install-time lifecycle script | package.json | postinstall="node scripts/postinstall.js" | 30 |
| high | Install Lifecycle Remote Or Exec | package.json | postinstall="node scripts/postinstall.js" | 30 |
| medium | Remote Payload | package/dist/commands/curl.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/modules/VirtualPackageManager/index.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/modules/linuxRootfs.js | matched "curl\n" | 12 |
| medium | Remote Payload | package/dist/commands/manuals-bundle.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/modules/VirtualProxy.js | matched "curl " | 12 |
| medium | Remote Payload | package/dist/commands/wget.js | matched "wget " | 12 |
| low | Obfuscation | package/dist/commands/clear.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/commands/echo.js | matched "\\x07" | 3 |
| low | Obfuscation | package/dist/utils/expand.js | matched "fromCharCode" | 3 |
| low | Obfuscation | package/dist/commands/file.js | matched "\\x7f" | 3 |
| low | Obfuscation | package/dist/commands/fun.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/commands/help.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/commands/htop.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/modules/VirtualFileSystem/index.js | matched "Buffer.from(child.contentBase64, \"base64" | 3 |
| low | Obfuscation | package/dist/commands/ls.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/commands/miscutils.js | matched "fromCharCode" | 3 |
| low | Obfuscation | package/dist/modules/nanoEditor.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/modules/neofetch.js | matched "\\u001b" | 3 |
| low | Obfuscation | package/dist/modules/pacmanGame.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/commands/printf.js | matched "\\x07" | 3 |
| low | Obfuscation | package/dist/modules/SSHMimic/prompt.js | matched "\\x01" | 3 |
| low | Obfuscation | package/dist/commands/python.js | matched "Eval(" | 3 |
| low | Obfuscation | package/dist/modules/SSHMimic/scp.js | matched "\\x02" | 3 |
| low | Obfuscation | package/dist/modules/VirtualShell/shell.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/commands/shift.js | matched "\\x00" | 3 |
| low | Obfuscation | package/dist/commands/textutils.js | matched "fromCharCode" | 3 |
| low | Obfuscation | package/dist/commands/tput.js | matched "\\x1b" | 3 |
| low | Obfuscation | package/dist/commands/tr.js | matched "fromCharCode" | 3 |
| low | Obfuscation | package/dist/utils/vfsDiff.js | matched "Buffer.from(node.contentBase64, \"base64" | 3 |
| low | Obfuscation | package/dist/modules/webTermRenderer.js | matched "\\x1b" | 3 |
Manifest
Package metadata
Scripts27
benchrm -rf .benchmark-shells/ && bun benchmark-virtualshell.tsbenchmarkbun benchmark-virtualshell.ts > benchmark-results.txtbuildtsc --project tsconfig-build.json && rm -f dist/*standalone*build-allbun run build && node scripts/build-all.mjs && cd demo && node build && cd .. && cp demo/app.js docs/app.jscheckbunx --bun @biomejs/biome check ./src ./tests ./examples ./demodeploy:npmbun publish --access publicexample-servecd demo && bun server.jsformatbunx --bun @biomejs/biome format --write ./src ./tests ./examples ./demogenerate-docbunx typedoc && bun build-all && cp demo/app.js docs/app.jsgenerate-manualsnode scripts/generate-manuals-bundle.mjsgenerate-wikinode scripts/generate-wiki.mjsgenerate-wiki:pushnode scripts/generate-wiki.mjs --push --autolintbunx --bun @biomejs/biome lint ./src ./tests ./examples ./demolint:writebunx --bun @biomejs/biome lint --write ./src ./tests ./examples ./demopostinstallnode scripts/postinstall.jspublish-docbun generate-doc && bun publish-onlypublish-doc-appbun build-all && bunx gh-pages -d docs && git add docs/app.js && git commit -m 'docs: update web terminal app' && git pushpublish-onlygit add docs && git commit -m 'docs: update documentation' && git push && bunx gh-pages -d docspublish-packagebash ./scripts/publish-package.shrun-examplesfor i in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 99; do echo "=== $i ===" && timeout 30 bun run examples/$i-*.ts 2>&1 | tail -5 && echo "" ; doneself-standalone-buildnode scripts/build-all.mjsstandalone-buildbunx esbuild src/standalone.ts --bundle --platform=node --target=node18 --outfile=builds/standalone.cjs --tree-shaking=true --minify --banner:js='#!/usr/bin/env node'testbun run test-salvetest-batterybun test tests/test-examplesfor i in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 99; do timeout 30 bun run examples/$i-*.ts >/dev/null 2>&1; EXIT=$?; if [ $EXIT -eq 124 ]; then echo "$i ⚠️ TIMEOUT"; elif [ $EXIT -ne 0 ]; then echo "$i ❌ EXIT $EXIT"; else echo "$i ✅"; fi; donetest-salvefor f in tests/*.test.ts; do echo "\n🧪 Testing $f..."; bun test "$f" --timeout 10000; sleep 0.25; doneweb-buildnode build.js
Dependencies2
fflate^0.8.3ssh2^1.17.0
Optional dependencies1
roxify^1.16.14