security audit and OWASP ZAP CI - #105
Conversation
|
RAGE/TDD failure evidence for the current repair transaction:
Repair commit The branch then conflicted with #104/master, so current master |
|
Second-stage TDD evidence: the stale-schema harness defect is fixed, and the hostile suite now exposes a real server boundary defect. At exact branch head The deterministic regression is now:
The request used the valid canonical document schema version Per the StarIntel human-gated ADADR policy, no parser implementation is being added to this PR yet. The research transaction is now Keep this PR draft/red. Do not weaken the |
|
RAGE freshness reconciliation (2026-08-25): the trailing-comma RED evidence on this PR is no longer sufficient to establish a defect on current The immutable failure remains valid for head More importantly, current master changed the HTTP parser boundary: Therefore do not implement a parser fix from the old RED badge and do not merge/rebase this security branch wholesale. The next TDD action is to re-prove the exact trailing-comma regression against current master |
What changed
star:inteladministrator credentialadminor broader-scope credentialsadminscope, not the descriptive principal-type string/tmpmarker is created inside the disposable serverstarintel-zap-*disposable Compose project withSTAR_SECURITY_DISPOSABLE=1Security rationale
The audit found four privilege-boundary failures:
credentials:createcould request arbitrary scopes and principal type, including anadministratorcredential withadmin. Lifecycle capabilities could also rotate a more privileged credential and receive its replacement secret.ownerbecomes the authenticated principal ID, but delegated creation accepted any owner. A credential issuer could therefore mint a same-scope key as another principal and bypass identity/ownership checks. Lifecycle operations had the same cross-identity problem.administrator-principal-ptreated the descriptive principal typeadministratoras authority even withoutadminscope, while the central policy engine used scope-based authority. The bulk-job status path used that helper for its ownership bypass.This branch removes those privilege paths and now actively tests hostile input against the deployed CI image. Lisp injection probes are non-destructive canaries: successful execution only writes a marker under
/tmp, which is still treated as proof of RCE. CouchDB tests use two datasets with the same search fixture and fail if a restricted principal can retrieve the denied document through Lucene/Clouseau syntax manipulation. DoS probes are deliberately bounded and run only against the disposable stack.The remaining audit findings are deliberately documented rather than hidden: direct HTTP bearer transport has no in-process TLS invariant,
must_change_passwordis still advisory, development auth bypass needs a loopback invariant, the application body limit is downstream of HTTP request materialization, and container/CI least privilege can be tightened further.Validation
GitHub CI is the validation environment for this branch. Existing Nix/unit/integration/container jobs plus the ZAP and hostile-input workflow must pass before this leaves draft.