SECURITY.md
Rama main · réplica de lectura del repositorio original.
# Security Policy
## Supported Versions
BoardRipper ships as rolling releases through the in-app self-update path
(see [Self-update](README.md#self-update)). Only the **latest released
version** receives security fixes; please update before reporting an issue
to confirm it still reproduces.
## Reporting a Vulnerability
**Email:** [mail@ripperdoc.de](mailto:mail@ripperdoc.de) — subject line `BoardRipper security`.
If the issue affects the self-update pipeline (signed-manifest verification,
the orchestrator container, the bootstrap secret, or anything that could
deliver malicious code to running installs), please mark it `URGENT` in
the subject and I will respond within 48 hours. For everything else,
expect a response within a week.
Please include:
- BoardRipper version (visible in the toolbar version badge, or `docker
inspect ghcr.io/alexeyinwerp/boardripper`)
- Deployment shape (Docker on Linux/Mac/Windows, Synology, standalone Go
binary, Electron desktop)
- Reproduction steps or PoC, ideally as a single shell command or
curl invocation
- Whether you've publicly disclosed yet (please do not — see below)
I'll work with you on a coordinated disclosure timeline. Default: fix
shipped within 14 days, public advisory within 30 days. Faster for
trivial fixes, slower if you're OK waiting and the fix needs care.
## Out of Scope
These are tracked as known limitations rather than vulnerabilities; please
do not file new reports for them unless you have a fresh angle:
- **Unauthenticated endpoints on a trusted-LAN deployment.** BoardRipper
is designed for self-hosted home/shop networks where the operator
controls who can reach the port. The CSRF middleware blocks browser
drive-by attacks from a different origin, but a `curl` from another
device on the same LAN can hit unauthenticated endpoints
(`/api/databank/*`, `/api/sync/*`, `/api/files/*`). Adding session
auth is on the roadmap.
- **`/api/update/bootstrap` cookie reachable on LAN.** Same caveat — a
LAN attacker can curl the bootstrap endpoint and obtain the per-install
update token. They still cannot install a non-signed manifest, and the
counter + freshness + min-version checks limit replay scope to within
the last 30 days.
- **The `apk add curl` runtime fetch in the orchestrator container.**
Pinned to alpine-signed packages; replacing with a pre-built BoardRipper
orchestrator image is on the roadmap.
- **No full Content-Security-Policy on the SPA.** `X-Frame-Options: DENY`
+ `X-Content-Type-Options: nosniff` + `Referrer-Policy: no-referrer`
are set; a strict CSP needs Vite-build testing to avoid silently
breaking inline styles / lazy-loaded chunks.
## Known intentional exposures
These are documented format-level decisions, not vulnerabilities:
- Hard-coded DES key in the XZZ parser (`0xdcfc12ac00000000`) — required
by the file-format spec; matches OpenBoardView's reference parser.
- Default RC6 key in the FZ parser — same reason.
- Bit-rotation XOR pattern in the BRD parser — same reason.
These are parser-correctness primitives, not security primitives. Please
do not file reports about them; they exist because the file formats
require them.
## Hall of Fame
If your report leads to a fix, I'll credit you in the release notes
unless you prefer to stay anonymous — let me know in the email.