Install verification: runtime verified (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it does
Installation
dsh plugin --profile web add github:cny919191/dsh-123pan#v1.3.2Install method: GitHub · runtime verified (L5)
Verification & Compatibility
Grouped by plugin version: each card lists the dsh versions actually tested against that artifact version and their install verdicts (L5 wins). Untested combinations are omitted — absence means untested, never assumed compatible. L1–L3 are a plugin-level static archive (independent of the dsh version — the same verdict on every dsh row): they sit in each row's level grid next to L4/L5, marked "static", while their evidence is stored once per plugin inside that row's "checks & evidence" instead of being duplicated per version.
External credentials (plugin-level): none detected
○ The author declares no dsh version requirement — install is not blocked by version.
| plugin \ dsh | dsh 0.2.1-rc.2 current |
|---|---|
| v1.3.4 | · |
| v1.3.2 | ✓ |
| v1.2.0 | · |
v1.3.4github2026-10-21
https://github.com/cny919191/dsh-123pan
No runtime install test for this version (static scan only) — compatibility unknown, never assumed.
v1.3.2github✓ 1 runtime-verified2026-10-19
https://github.com/cny919191/dsh-123pan
✓dsh 0.2.1-rc.2current2026-10-19L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: github · https://github.com/cny919191/dsh-123pan#v1.3.2
ID: dsh-123pan@v1.3.2@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-19 · expires: 2026-10-26
View checks & evidence
↳ carried from earlier record dsh-123pan@v1.3.4@dsh0.2.1-rc.2 (l3-fullscan)
↳ carried from earlier record dsh-123pan@v1.3.4@dsh0.2.1-rc.2 (l3-fullscan)
↳ carried from earlier record dsh-123pan@v1.3.4@dsh0.2.1-rc.2 (l3-fullscan)
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
v1.2.0github2026-10-18
https://github.com/cny919191/dsh-123pan
No runtime install test for this version (static scan only) — compatibility unknown, never assumed.
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/dsh-123pan/)``[](https://www.dsh.so/artifact/dsh-123pan/)`Security Report
Two automated layers, neither a manual review: a static scan (per-plugin rule checks) and a model-driven dynamic security audit that covers only the subset static-flagged at warn or above and never executes plugin code.
Static low, dynamic medium — stricter wins → overall medium.
v1.3.4dsh manifestv1.3.4git2026-10-21v1.3.5.1version moved onclean · gitVet is an AST static scan (npm artifact or git source).
show static findings (7)
- warningfsWrite · files
lib/backup.js:155fs.writeFileSync(tmp, JSON.stringify(manifest, null, 2), 'utf8'); - warningnetIp · network
lib/bridge.js:813parsed = new URL(req.url, 'http://127.0.0.1'); - warningfsWrite · files
lib/bridge.js:473fs.writeFileSync(tmpFile, buf); - warningchildProcess · code-exec
lib/core.js:200child = spawn(exe, argv, { - warningfsWrite · files
lib/core.js:72fs.writeFileSync(probe, 'x'); - warningfsWrite · files
lib/core.js:160fs.writeFileSync(file, ''); - warningfsWrite · files
lib/core.js:413fs.writeFileSync(tmp, blob, 'utf8');
show 3 audit findings
- mediumLoopback bridge uploads any absolute local file path to the cloud with no workspace restriction
lib/bridge.js:327The /upload and /uploadBatch (/uploadBatch at line 387, `for (const file of files) { ... coreUpload(config(), { file, parentId })`) handlers accept any path readable by the DSH process and push it to the user's 123pan account. Any local process can POST to the loopback bridge, and the unaudited AI tool layer (index.js/lib/tools.js) most likely wraps these same handlers, so a prompt-injected model can exfiltrate ~/.ssh, .env, backups.json or other sensitive files to a remote service. No path allowlist, no workspace confinement, no confirmation beyond the caller's own intent.
- lowDownload handler writes to arbitrary absolute paths and joins unsanitized remote file names
lib/bridge.js:419The `out`/`dir` values come straight from the request body: the handler creates missing directories and writes anywhere the DSH process can write (not confined to the workspace or config downloadDir), and `name` (a remote listing entry passed by client.js) is joined without traversal checks. Reachable only via loopback POST with a matching Origin, so the attacker must already run code as the user; the risk is overwriting unintended files or escaping the chosen download directory via a hostile remote file name.
- lowPlaintext session token passed as a command-line argument to the native core
lib/core.js:388saveSession serializes the session JSON (including `token`) and dpapiProtect passes it in argv to 123pan-core.exe, so the plaintext token is visible in the process command line for the duration of the call — contradicting the module's own policy of keeping credentials out of argv (coreLogin deliberately uses DSH_123PAN_PASSWORD via env). Same-user processes and administrators can read it.
Sound loopback/Origin gating and shell-free spawn, but the bridge exposes unrestricted local file read (upload) and arbitrary-path write; session token also passes through argv.
Rule: the dynamic audit can only raise risk, never lower it (raise-only, never an exemption); a wrong raise is withdrawn by human review and the tier falls back to the static verdict. Overall verdict = the stricter of the two layers.
Disclaimer: the static scan and the dynamic security audit are both automated analysis, not a security guarantee. Always review what you install.
Activity
Last commit 2026-10-21 · activity: Active
• Repo created: 2026-10-18
• Stars: ★ 0 · Forks: 0
• Health: Active — committed within last 30 days
Source
GitHub: github.com/cny919191/dsh-123pan
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
