Pre-install static security review and runtime guard for dsh plugins: deobfuscation decoding, supply-chain checks, web one-click review/install/uninstall, and optional runtime tool-call guard.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:ateen18/dsh-plugin-security-review
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Security review gate for dsh plugins — static pre-install vetting of malicious code, vulnerabilities and supply-chain risks (with deobfuscation decoding), runtime audit, optional tool-call guard, and a one-click web review/install/uninstall panel.
A security review plugin for DeepSeek Harness (dsh) plugins. Once installed, every other plugin is statically reviewed before it is installed or loaded: dangerous code, vulnerabilities, and supply-chain risks are analyzed, a review report is produced, and an install recommendation is given. At runtime it keeps auditing the installed roster and disables dangerous plugins.
See README.zh.md for the Chinese quick start.
Full user guides:
- English: docs/USER_GUIDE.en.md
- 中文(简体): docs/使用说明.md
Three layers
| Layer | When | What it does |
|---|---|---|
| 1. Install gate | before install (dsh-safe-plugin add) |
downloads source without running any install scripts, analyzes it, prints the report; block refuses the install, warn needs confirmation, pass forwards to dsh plugin add --ignore-scripts |
| 2. Runtime gate | after dsh boots | audits every out-of-tree plugin in the profile (cached); blocked plugins are disabled via loader.update(id,{disabled:true}) and written into a managed disabled: true block in the profile's cordis.patch.yml, so their code is never imported on the next boot |
| 3. In-session tools | during sessions | security_review / security_review_status tools review any plugin/source directory and read historical reports |
Install
dsh-safe-plugin add dsh-plugin-security-review
# or: dsh plugin --profile web add dsh-plugin-security-review
The package declares dsh.bundle, so the dsh plugin manager joins it into
dsh.profile.bundles automatically.
Review and install other plugins
dsh-safe-plugin add dsh-plugin-foo # review + install
dsh-safe-plugin add ./local-plugin-dir
dsh-safe-plugin add https://github.com/me/plugin.git
dsh-safe-plugin review dsh-plugin-foo # review only
dsh-safe-plugin review . --ignore test/fixtures # skip fixtures dirs
dsh-safe-plugin list # historical reports
dsh-safe-plugin verify # re-review installed plugins
Reports
- Score (0-100), verdict
pass / warn / block / audit, per-finding detail (severity, category, file:line, snippet, recommendation) and an install recommendation. - Persisted under
$DSH_HOME/security-review/:reports/latest/<name>.md(markdown),reports/history/*.json,index.json. - The web settings UI gains a
security-reviewsection (policy, auto-disable switch, allowlist).
Known limitations
- Static analysis cannot cover native binaries, runtime-downloaded code, or
heavily obfuscated payloads;
blockmeans strong risk signals, not proof of malice. - The runtime gate deterministically blocks plugin imports that happen after
this plugin applies; plugins that start earlier in the same boot batch
load for a few milliseconds before the boot audit disables them, and the
managed patch block keeps them from loading on the next boot. Use
dsh-safe-plugin addfor deterministic pre-install blocking. - Blocking a plugin that provides services other rows
injectfails boot loudly with the missing service named — that is dsh's fail-loud contract. - Transitive dependencies are checked by name heuristics only (no full source scan of the whole dependency tree).
- A review-engine failure degrades to
warn(fail-open) so the reviewer itself can never brick dsh; re-check withdsh-safe-plugin verify.
Development
npm test # analyzer unit tests (no dsh needed; run from this dir)
License: MIT
Links
More in this category
toby-bridges/api-relay-audit★ 868
Runs local security audits of AI API relays and LLM proxies from DeepSeek Harness, producing Markdown reports for prompt injection, model substitution signals, tool-call rewriting, error leakage, stream integrity, and profile-gated Web3 risks.
SeaOf0/dsh-redteam-model★ 666
Authorized-security DSH collection: nine work modes (redteam coordinator, pentest, code audit, binary analysis, attack-defense, AV evasion, incident response, cloud security, CTF solving) and fifteen runtime plugins, managed from a settings page with one-click deploy, install, update and uninstall.
howmp/dsh-pentest★ 595
Authorized pentest mode for DeepSeek Harness — exploration chain, assets and findings with a Web view.
PerryLink/dsh-auto-review★ 233
Second-model auto-review on the approval answerer chain: a read-only reviewer subagent returns structured allow/deny verdicts with reasons, fail-closed by default.
NanmiCoder/dsh-auto-mode★ 164
Adds an Auto permission preset between Workspace Write and Full access: routine work stays in the official workspace-write sandbox while the current session model reviews escalation and destructive calls, granting one exact wider access once, asking when the intent is ambiguous, and denying critical paths.
PerryLink/dsh-permission-rules★ 119
Claude Code-style declarative permission rules: ordered allow/deny/ask YAML rules matching tool names, arguments, workspace paths, and agent identity on the tools/pre-execute waterfall, with full session-log audit, dry-run mode, and hot reload.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.