Zum Inhalt springen
Sprache wählen:Deutsch

Handling a security report

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

SECURITY.md is the reporter’s side of this. It promises things the maintainer has to keep; this page lists them and the steps around them. The operator-facing summary of Kept’s defences is the security model.

GitHub private vulnerability reporting is the only channel: the repository’s Security tab → Report a vulnerability. There is no security email address (go-public plan, decision D4). Only the reporter and the maintainer see the report. Conduct reports use the same private route, titled “Conduct report” (1.0 checklist, row 6.3).

A report that arrives anywhere else (a public issue, a discussion, a pull request) should be moved to the private channel without discussing the details in public.

Commitment Detail
Supported versions the latest minor release (X.Y); the one before it for 90 days after the latest is published; nothing older
Critical fixes within 7 days of a confirmed report
Response an acknowledgement, then a fix or a reasoned answer
Disclosure a date agreed with the reporter
Credit in the release notes, unless the reporter prefers not
When it applies from 1.0; Kept has no supported release before it

These come from D187 (the support window and the 7 days) and D83 (SECURITY.md and GitHub’s private advisories), in the product design’s decision log.

  1. Acknowledge in the report’s thread.
  2. Confirm it on your own instance. Kept is self-hosted: there is no Kept-run service, and SECURITY.md asks reporters to test only their own instance too. The report should name the version (/version answers it).
  3. Fix it privately. The report becomes a draft security advisory on GitHub, which can open a temporary private fork for the fix (a GitHub feature; Kept has no written procedure of its own for it). The fix follows the same rules as any change: a test first, the full local gate (bash scripts/ci-local.sh), additive migrations.
  4. Release. Merge the fix to main and cut a release the usual way (releasing): a tag starts release.yml. The release tooling only publishes a version newer than every existing v* tag, from a commit on main, so a fix ships as the next release; there is no backport path to an older line today.
  5. Disclose on the agreed date: publish the advisory, and credit the reporter in the release notes unless they declined.

A fix is only useful if people can trust the image they pull. From 1.0.0 every release is signed (signing) and users can check it (verifying a release).

Kept’s security reviews and the pre-publication audit are kept in the repository:

The existing reviews share one shape: what was reviewed and how, a result line counting findings by severity, the findings with what was fixed, and how the fixes were verified.