If you find a security issue in oh-my-prompt, please report it privately before opening a public issue or PR.
- Preferred: open a private security advisory on GitHub.
- Alternative: email the repo owner via the address listed on the GitHub profile page.
Please include:
- a short description of the issue and impact,
- a minimal reproduction (a tiny prompt or transcript snippet is plenty — do not include real secrets),
- the affected version (
git rev-parse --short HEADor release tag).
I will acknowledge within a few business days and aim to ship a patch
release on main before the advisory is published. Coordinated
disclosure is appreciated; embargo windows up to 30 days are fine for
non-trivial issues.
This is a single-author hobby project. Only main is supported — please
update to the latest commit before reporting. There is no LTS branch.
The local-only nature of the plugin means the realistic attack surface is small. The following are in scope:
- XSS in the generated dashboards. All viewers render data from the local DB (your own prompts, project paths, suggestion archive markdown). If a stored prompt or path can execute script when the dashboard is opened, that is in scope.
- Local file disclosure / overwrite. Symlink races, predictable
output paths under shared
/tmp, world-readable secret-bearing files. - SQL injection. All SQL parameters should be cast or bound.
- Secret leakage. Patterns that should be redacted before storage but are not.
- Sub-agent prompt injection. A poisoned prompt in your own history
manipulating
agents/suggest-analyzer.mdinto writing files outsideoutput_path.
The following are explicitly out of scope:
- Anything requiring a malicious user already having write access to
your
~/.claude/omp.dbor~/.claude/omp_suggestions/(they own your shell at that point). - CDN compromise of
cdn.jsdelivr.netitself — mitigated via SRI hashes on every script tag. - Vulnerabilities in Claude Code, Claude Code plugins infra, or the Anthropic API.
oh-my-prompt stores raw user prompts in ~/.claude/omp.db. By the
nature of how people use Claude Code, this DB will inevitably contain
fragments of source code, file paths, internal URLs, and — despite the
redact() pass — the occasional secret a user pasted in. Treat
~/.claude/omp.db and ~/.claude/omp_suggestions/ as roughly as
sensitive as your shell history file.
Mitigations already in place:
omp.dbis chmod'd0600andomp_suggestions/to0700on every open.prompt_loggerruns all incoming prompt text throughredact(), which masks anthropic / openai / slack / github / google / aws keys and JWTs. False-positive-prone generic high-entropy patterns are intentionally excluded — additional patterns are welcome via PR.- Generated dashboard HTML lives in
$TMPDIR/omp-<uid>/(mode0700) and any file older than 7 days is auto-pruned on the next run. - Inline JSON in the dashboards has
</escaped; user-controlled strings go throughescapeHtml; the suggest-archive markdown viewer pipesmarked.parse(...)throughDOMPurify.sanitize(...); CDN scripts are pinned withintegrity="sha384-..."+crossorigin.
If any of these mitigations regress, that is a bug — please report.