Repository navigation
docs: a security policy — needs private vulnerability reporting enabled before merge - #780
Merged
Merged
Conversation
… now public There is no SECURITY.md in this repository and none in the organisation's .github repository, so a researcher who finds something has nowhere to send it except the public issue tracker. That mattered less before today; the security audit in #768 has just filed nine findings in the open, which is an invitation for the next person to do the same with something worse. The policy is deliberately modest about response: this is a small project with no security team, and promising a timeline nobody is on call for would be worth less than saying so. Two parts carry the actual content. What is IN scope is written from what the audit actually found, not from a template: the host process dying or hanging without bound on Ruby input (because `Run` returns an error, and an embedder cannot defend against a `fatal error:` from outside); failing to raise where MRI raises when a program relies on the raise to stay safe -- the fail-open class, which is invisible to the caller; reaching past the documented capability set; and the CI/release path. What is NOT a vulnerability is the part that keeps the inbox usable. `Run` is not a sandbox, and that is documented rather than accidental, so "system() executes a command" is working as intended. By the same reasoning, faithfully reproducing a behaviour that is dangerous in MRI -- Marshal.load on hostile bytes -- is conformance here, though it is still worth hearing if the documentation fails to warn about it. It also lists the six already-filed classes, so a duplicate costs the reporter nothing to avoid. The channel is GitHub's private vulnerability reporting, which is currently DISABLED on this repository and has to be turned on for the policy to be truthful -- see the pull request. It was chosen over an email address because it does not publish anyone's personal address on a public repository. The link to the README's "Run is not a sandbox" section resolves once #770 merges, which is what adds that heading. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Author
The condition this was held on is now met$ gh api repos/go-embedded-ruby/ruby/private-vulnerability-reporting --jq .enabled
truePrivate vulnerability reporting is enabled, so the channel this policy names Checks are 9/9 green and the branch is Measured alongside it, and not part of this PR — two of the sibling
🤖 Generated with Claude Code |
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.
There is no
SECURITY.mdin this repository, and none ingo-embedded-ruby/.githubeither (both verified, 404). So a researcher who finds something has nowhere to send it except the public issue tracker.That mattered less yesterday. The audit in #768 has just filed nine findings in the open, which is a standing invitation for the next person to do the same with something worse.
The policy tells people to report through GitHub's private vulnerability reporting, which is currently disabled on this repository:
It needs enabling at Settings → Code security → Private vulnerability reporting, or
gh api -X PUT repos/go-embedded-ruby/ruby/private-vulnerability-reporting. Until then the policy names a channel that does not exist, which is worse than having no policy — so this is yours to flip, and I have deliberately not tried to do it for you.I chose that channel over an email address because it does not publish anyone's personal address on a public repository. If you would rather use an address, or a different channel entirely, say so and I will rewrite the Reporting section instead.
While you are on that page, three other defensive settings are also off and are free: secret scanning, push protection, and Dependabot security updates. Each is reversible with one click and none of them creates an obligation the way an inbox does.
What the policy actually says
Two sections carry the content; the rest is short on purpose.
In scope is written from what this audit found, not from a template:
Runreturns anerror, and an embedder has no way to defend against afatal error:thatrecover()cannot catch (No call-depth limit: runaway Ruby recursion kills the embedding host with a fatal Go stack overflow (no SystemStackError) #768) or a call that never returns (Net::HTTP to a server in the program's own Thread hangs forever (MRI: 81 ms); raw TCPSocket client works #771);io.Writerthe embedder passed;Not a vulnerability is the part that keeps the inbox usable:
And, by the same reasoning, faithfully reproducing something that is dangerous in MRI —
Marshal.loadon attacker-controlled bytes — is conformance here rather than a defect. The policy still invites a report if the documentation fails to warn about it, which is the honest line to draw for a conformance project.It is also deliberately modest about response time. There is no security team, and a timeline nobody is on call for is worth less than saying so plainly. What it does promise is that a report gets read, gets a plain answer about scope, and gets credit.
Finally it lists the six already-filed classes, so a duplicate costs the reporter nothing to avoid.
Merge order
The link to
Runis not a sandbox resolves once #770 merges — that PR adds the heading. Verified: the string is not onmaintoday. So #770 first, then this.🤖 Generated with Claude Code