Add a draft threat model and wire it for discoverability - #1242
Open
potiuk wants to merge 1 commit into
Open
Conversation
### Motivation The Pekko PMC asked the ASF Security team for a draft threat model to refine, as preparation for a Claude security scan. This is the companion to the same change in apache/pekko. docs/src/main/paradox/security.md already has a "Security model" section, and it makes the most important statement in this document: applications should not be exposed to the public internet directly, and DoS resistance is claimed only as "pretty well under most known" attacks. But that is three sentences, and the quantitative envelope that actually bounds untrusted input -- the parsing limits in http-core's reference.conf -- is not connected to it anywhere. Separately, the AGENTS.md -> SECURITY.md chain a scanning agent follows to locate a project's model does not resolve: there is no SECURITY.md in the repo. ### Modification - THREAT_MODEL.md: a v0 draft following the Scovetta rubric. §5a collects the shipped parsing limits, timeouts and CORS defaults as the model's quantitative spine; §8 states the six default-on properties they underwrite. - SECURITY.md: reporting policy pointing at security@apache.org, plus the three points that catch most reporters. - AGENTS.md: a Security section pointing at both. Nothing security.md asserts has been dropped or weakened; §15 back-maps each existing statement to the section that now carries it. ### Result The chain AGENTS.md -> SECURITY.md -> THREAT_MODEL.md resolves on main, and triagers have a citable document with a closed set of dispositions (§13). §14 holds 10 questions, each stated as a proposed answer. The two worth reading first are Q1 (where exactly is the DoS line, given security.md's deliberately graded claim?) and Q2 (http-cors ships allowed-origins = "*" with allow-credentials = yes, which per its own reference.conf echoes the request Origin -- deliberate, or should the default change?). The document is not ready to be treated as canonical until those are answered. ### Tests Not run - docs only ### References None - requested by the Pekko PMC chair on the ASF security scan thread
Member
|
Thanks Jarek. My plan is to concentrate on apache/pekko#3478 and to return to this when we make progress on that. If you prefer, we can merge this and discuss with the Pekko PMC how to complete it. |
Member
Author
|
Sure. Tak your time - and indeed |
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.
Motivation
The Pekko PMC asked the ASF Security team for a draft threat model to refine, as
preparation for a Claude security scan. This is the companion to
the same change in
apache/pekko— that modelcovers the actor, stream, remoting and cluster layers, and this one does not restate them.
docs/src/main/paradox/security.mdalready carries a "Security model" section, and itmakes the most consequential statement in this document: applications "should not be
exposed to the public internet directly", and DoS resistance is claimed only as
"pretty well under most known Denial of Service attacks". But that is three sentences,
and the quantitative envelope that actually bounds untrusted input — the parsing limits in
http-core'sreference.conf— is not connected to it anywhere.Separately, the
AGENTS.md→SECURITY.mdchain that a scanning agent follows to locatea project's model does not resolve today: there is no
SECURITY.mdin the repo.Modification
THREAT_MODEL.md— a v0 draft. §5a collects the shipped parsing limits,timeouts and CORS defaults as the model's quantitative spine; §8 states the six
default-on properties they underwrite. Every claim is tagged
(documented)with acitation or
(inferred)with a matching question in §14.SECURITY.md— reporting policy (security@apache.org; Pekko does not operate aseparate project security list), plus the three points that catch most reporters.
AGENTS.md— a two-line## Securitysection pointing at both.Nothing
security.mdasserts has been dropped or weakened — §15 back-maps eachexisting statement to the section that now carries it.
Result
The chain
AGENTS.md→SECURITY.md→THREAT_MODEL.mdresolves onmain, and triagersget a citable document with a closed set of dispositions (§13).
Worth noting in contrast to the
apache/pekkomodel: every §8 property here isdefault-on. Pekko HTTP's parsing limits, timeouts, strict URI/cookie parsing and
response-splitting protection all ship enabled. The soft spot is not the defaults, it is
the boundary of the DoS claim.
§14 holds 10 questions, each stated as a proposed answer — confirming or correcting is
enough. The two worth reading first:
security.md's claim is deliberately graded, andtriage needs a split. Proposed: a request within all §5a limits that causes
super-linear CPU or memory is
VALID; anything requiring limits to be raised, orrequiring request volume rather than request content, is out of model because volume
defence is the fronting proxy's job. Is that the intended reading?
http-corsdefaults. The module shipsallowed-origins = "*"together withallow-credentials = yes. Per its ownreference.conf, that combination does notsend a literal
*— it echoes the request'sOriginand allows credentials. Two thingsbound how alarming that is:
cors()is opt-in, and the interaction is documented. Is thedefault deliberate, or should it change?
This is a draft and should not be treated as canonical until at least Q1 and Q2 are
answered. Happy to fold answers in, or hand it over entirely — the PMC owns the document.
Tests
Not run - docs only
References
None - requested by the Pekko PMC chair on the ASF security scan thread