|
| 1 | +# Security Policy |
| 2 | + |
| 3 | +## Supported Versions |
| 4 | + |
| 5 | +This project is pre-release. Security fixes are applied to the **latest `master` branch only** (currently `0.1.0.dev0`). |
| 6 | + |
| 7 | +| Version | Supported | |
| 8 | +| -------------- | --------- | |
| 9 | +| latest `master`| Yes | |
| 10 | +| older commits | No | |
| 11 | + |
| 12 | +## Reporting a Vulnerability |
| 13 | + |
| 14 | +**Please do not open public GitHub issues for security vulnerabilities.** |
| 15 | + |
| 16 | +Report vulnerabilities privately via [GitHub Security Advisories](https://github.com/cppalliance/claude-code-chat-browser/security/advisories/new). Private vulnerability reporting must be enabled on the repository (Settings → Security → Private vulnerability reporting). If you cannot use that form, contact the repository maintainers through an existing private channel. |
| 17 | + |
| 18 | +## Response Timeline |
| 19 | + |
| 20 | +| Stage | Target | |
| 21 | +| ----- | ------ | |
| 22 | +| Acknowledgment | Within **72 hours** of a valid report | |
| 23 | +| Initial assessment | Within **7 days** | |
| 24 | +| Fix for confirmed issues | Target **14 days** for issues affecting the default local-only deployment | |
| 25 | + |
| 26 | +Timelines may extend for complex issues; we will keep reporters informed. |
| 27 | + |
| 28 | +## Scope |
| 29 | + |
| 30 | +### In scope |
| 31 | + |
| 32 | +Security issues in this repository that affect users of the default local setup: |
| 33 | + |
| 34 | +- **Path traversal** — session and export paths resolved via `safe_join` in `utils/session_path.py` |
| 35 | +- **Cross-site scripting (XSS)** — rendered session HTML in `static/js/` (mitigated by DOMPurify + SRI in `static/index.html`) |
| 36 | +- **Export integrity** — bulk zip and per-session export in `api/export_api.py` and `utils/export_engine.py` |
| 37 | +- **Local file boundaries** — read-only access to `~/.claude/projects/`; writes limited to export output and app state |
| 38 | +- **Debug-mode exposure** — Flask/Werkzeug debugger when `--debug` is combined with a non-loopback `--host` (blocked at startup in `app.py`) |
| 39 | +- **Information disclosure** — API error responses scrub internal exception details (see `api/error_codes.py`) |
| 40 | + |
| 41 | +### Out of scope |
| 42 | + |
| 43 | +- **Intentional network-facing deployment** — this tool is designed for local browsing on loopback; exposing it on untrusted networks is not a supported configuration |
| 44 | +- **Upstream Claude Code JSONL format bugs** — malformed or hostile data from Claude Code itself (we harden parsing but do not guarantee full isolation from arbitrary JSONL) |
| 45 | +- **Third-party CDN availability** — DOMPurify is loaded from cdnjs with SRI; CDN compromise is an infrastructure concern outside this repo |
| 46 | + |
| 47 | +## Existing Controls (reference) |
| 48 | + |
| 49 | +| Control | Location | |
| 50 | +| ------- | -------- | |
| 51 | +| Path guard (`safe_join`) | `utils/session_path.py` | |
| 52 | +| HTML sanitization (DOMPurify) | `static/js/shared/markdown.js`, `static/index.html` | |
| 53 | +| Error response scrubbing | `api/error_codes.py`, session card handling in `api/projects.py` | |
| 54 | +| Debug + non-loopback host guard | `app.py` (`validate_startup_cli`) | |
0 commit comments