-
Notifications
You must be signed in to change notification settings - Fork 0
fix(auth): fail closed without write-capable admin on public bind #138
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
seonghobae
merged 18 commits into
fix/pin-hosted-runner-20260902-v3
from
fix/issue-78-fail-closed-credentials-20260901
Sep 2, 2026
Merged
Changes from all commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
45e33d3
fix(auth): fail closed without write-capable admin on public bind
codex bdb5fe6
fix(auth): reject unusable bootstrap credentials
codex a2e25b2
fix(auth): reject header-ambiguous admin secrets
seonghobae 4acbcc4
docs(security): record research redistribution assessment
seonghobae 913fc46
test(auth): strengthen strict admin-token properties
seonghobae 2d7d9d9
test(auth): mirror strict admin-token rejection in fuzz target
seonghobae 1d46ac3
test(auth): keep fuzz role semantics in sync
seonghobae 913b804
test(auth): property-check credential and RBAC boundary
seonghobae 30771a5
test(auth): exercise fuzz invariants for arbitrary bytes
seonghobae 3346686
fix(auth): align health and write denial auth semantics
codex f480d48
test(auth): reject fixed smoke administrator credential
seonghobae f2f591e
fix(auth): mint ephemeral smoke administrator credential
seonghobae efca66a
docs(security): preserve fail-closed auth traceability
seonghobae 78b21b9
test(auth): bind smoke token generation to forwarding
seonghobae 0af8f83
docs(auth): retain redistributable NIST SSDF evidence
seonghobae 6d99ed7
merge: synchronize fail-closed management auth with protected main
seonghobae 6b0898c
docs(auth): preserve external-secret deployment lifecycle after restack
seonghobae e6f05d7
docs(security): reconcile NIST artifact provenance
seonghobae File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| # Doctoring — fail-closed management authentication | ||
|
|
||
| This note grounds the issue #78 implementation: non-loopback listeners refuse to become ready without a write-capable administrator principal, authentication and authorization failures remain distinct, and presented administrator secrets are compared without early-exit content comparison. IEEE PDFs are not redistributed; freely accessible standards are cited by stable locators. | ||
|
|
||
| ## Adopted standards and literature | ||
|
|
||
| Saltzer, J. H., & Schroeder, M. D. (1975). The protection of information in computer systems. *Proceedings of the IEEE, 63*(9), 1278–1308. https://doi.org/10.1109/PROC.1975.9939 | ||
|
|
||
| - **Design impact:** Fail-safe defaults require missing access authority to deny rather than silently enable management writes. Wardnet therefore refuses readiness when a non-loopback listener lacks a write-capable administrator credential. | ||
|
|
||
| OWASP Foundation. (2025). *OWASP Application Security Verification Standard 5.0.0*. https://owasp.org/www-project-application-security-verification-standard/ | ||
|
|
||
| - **Design impact:** Administrative functions require authentication and authorization. Wardnet returns `401` for an unauthenticated management request and `403` when an authenticated readonly principal attempts a mutation, without disclosing the expected secret or role. | ||
|
|
||
| National Institute of Standards and Technology. (2022). *Secure Software Development Framework (SSDF) version 1.1* (NIST SP 800-218). https://doi.org/10.6028/NIST.SP.800-218 | ||
|
|
||
| - **Design impact:** Authentication data is loaded through the credential bootstrap boundary rather than embedded in distributable assets. Health output exposes only non-secret configuration state such as authentication mode and credential source. | ||
|
|
||
| MITRE. (n.d.). *CWE-306: Missing authentication for critical function*. https://cwe.mitre.org/data/definitions/306.html | ||
|
|
||
| - **Design impact:** Management APIs that mutate routes, threat indicators, DNSBL entries, license state, or feeds are critical functions. The runtime gate rejects the unsafe combination of a reachable non-loopback listener and missing write-capable authentication. | ||
|
|
||
| ## Redistributable research artifact | ||
|
|
||
| `docs/papers/nist-sp-800-218-ssdf.pdf` is the NIST SP 800-218 Version 1.1 PDF published by the National Institute of Standards and Technology. Authoritative source: https://doi.org/10.6028/NIST.SP.800-218 (NIST publication record and official PDF). NIST states that SP 800-series publications are not subject to copyright in the United States and that attribution is appreciated; NIST's Technical Series policy also grants a worldwide royalty-free right to reprint covered NIST works. The repository therefore retains the exact PDF as research evidence with this attribution: “Republished courtesy of the National Institute of Standards and Technology.” The publication remains authoritative at NIST; the repository copy is evidence only and does not supersede the official source. | ||
|
|
||
| NIST SP 800-218 Rev. 1 / SSDF 1.2 is still an Initial Public Draft as of this doctoring update, so the implemented control continues to cite final SP 800-218 Version 1.1 rather than presenting the draft as a final standard. | ||
|
seonghobae marked this conversation as resolved.
|
||
|
|
||
| ## Implementation binding | ||
|
|
||
| | Decision | Implementation boundary | | ||
| | --- | --- | | ||
| | Fail closed on public bind | `require_write_auth_for_bind` before listener readiness | | ||
| | Loopback development remains usable | loopback-only listener detection and `/healthz.auth_mode=development` | | ||
| | Authentication vs authorization | management write rejection distinguishes `401` and `403` | | ||
| | Constant-time credential handling | administrator-token comparison uses a bounded constant-work comparison path | | ||
| | Blank credential path | an empty or whitespace credentials-path bootstrap value is treated as unset | | ||
| | Smoke-test credential | `scripts/smoke.sh` creates a per-process administrator token instead of shipping a repository credential | | ||
| | Ambiguous token registry | strict administrator-token parsing rejects duplicate, blank, or unknown-role entries | | ||
|
|
||
| PII is not blanket-masked from security evidence when doing so would make incident response unusable. Purpose-bound authorization, least privilege, auditability, retention controls, and encryption are the preferred controls for operationally necessary security data. | ||
Binary file not shown.
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.