docs: add SECURITY.md - #3
Merged
Merged
Conversation
added 3 commits
September 15, 2026 21:55
The repo is public, security-positioned, and aimed at people who run govulncheck on what they install. Two advisories currently show up against the Docker client library, and until now there was no stated position on them, so the first person to find them would have had nothing to read. Documents the disclosure channel (GitHub private vulnerability reporting, now enabled), supported versions, the guarantees the agent actually enforces in code, and the assessment of the two Moby advisories with a concrete trigger for revisiting them. Every guarantee listed was checked against the source rather than copied from design notes: the restic subcommand type is closed and unexported, the sandbox teardown is deferred so it survives panics, containers are force-removed with volumes, and scrub/redaction runs before strings are logged or transmitted.
The first draft read as generated: six consecutive bullets opening with a bolded noun phrase, a balanced tricolon in the intro, and an antithetical closer on the Moby assessment. Same content, first person, varied sentence length, no listicle scaffolding.
The disclosure said "pass/fail, timings, snapshot IDs, recipe names and error strings", which undersells it. The repository label is the repo string with credentials stripped, so it still carries host and path, and it goes into the title of every alert reaching Telegram, Discord, ntfy and email. Check messages name paths from inside the snapshot; a checksum mismatch says which file differed. Someone deciding whether to connect the cloud at all should be able to see that from this page. Also reconciles the recipe trust boundary with the code. Saying recipes are "trusted input" contradicted files.go, which treats them as a boundary and validates their paths. Both halves are true and neither alone is: paths are contained, and a recipe still names the container images its checks run.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The repo is public, security-positioned, and aimed at exactly the people who run
govulncheckon what they install. Two advisories show up against the Docker client library, and until now there was no stated position on them, so whoever found them first had nothing to read.Covers the disclosure channel, supported versions, the guarantees the agent enforces, and an assessment of the two Moby advisories (GO-2026-4887, GO-2026-4883) with a concrete trigger for revisiting: when
github.com/moby/moby/v2publishes a stable release.The out-of-scope section is the part that saves time later. It rules out restic's own bugs, Docker daemon bugs, attackers who already hold write access to agent config or recipes, and scanner output submitted without an explanation of reachability.
Every guarantee listed was checked against the source rather than copied from design notes:
subcommandinagent/internal/restic/restic.gois an unexported type with seven read-only constants, soforgetandprunegenuinely do not compileagent/internal/verify/verify.go:105is deferred and covers every exit path including panics, and scrubs its own cleanup errorsScrubandRedactForTransportexist inagent/internal/report/report.goand run before strings are logged or transmittedGitHub private vulnerability reporting has been enabled, since the doc points at it as the primary channel.
One line worth a deliberate look before merge: the doc promises acknowledgement of reports within a week. That is a public commitment on a real inbox.