Skip to content

security: bound process health probes before runtime-isolation bypass #101

Description

@seonghobae

Finding and current repair status

Process-local /livez and /readyz intentionally bypass application admission so health remains observable under saturation, but the historical generic/pg-erd adapters granted that privilege from path alone. Application-shaped traffic such as body-bearing health requests and unsupported methods could therefore receive the same local path without entering the ordinary Runtime Isolation boundary.

Dedicated Draft #102 owns this repair at 1faa68a6cc25dedbe8c11140c4e62509855fc433, with exactly eight Runtime Isolation paths and no product authentication, Keyverse identity, Wardnet/EgressWeave policy, upstream/product-health semantics, or new routing authority. Its shared process-health classifier permits privileged local handling only for payload-free GET/HEAD probes. Body-framed health traffic enters ordinary in-flight admission and fails 413; unsupported bodyless methods enter the same admission boundary and return 405 with Allow: GET, HEAD.

Review also found the HTTP/2 transport-state gap: HEADERS without END_STREAM may be followed by DATA even without Content-Length. #102 repair b867cb365a5e123f6b5bcc378bb026b9533504e4 consumes Pingora Session::is_body_done() before request-header borrowing and passes that fact into the shared classifier. Real H2 HEADERS(no END_STREAM) -> DATA acceptance remains TLS/H2 owner #75 after ordinary parent reconciliation; #102 does not activate downstream H2 itself.

Current parent / evidence order

#102 remains intentionally Draft on historical #15 base 74c0892f919e38d767f9660d4533fcc7df8246c2. Active #15 is now Draft exact 5162ad5220792c7f94fa3fc1deb0488d30410436 after its latest hosted coverage RED and test-only unit-compilation sanitization repair. Fresh compare is diverged at merge-base 74c0892...: #102 is ahead 22 / behind 30.

The missing parent lineage includes the full forwarding/intermediary trust, coverage, real-listener shutdown, RFC 3986 Host-port, Via, Max-Forwards/body-ordering, public-boundary fixture, and the latest unit-compilation forwarding-sanitization coverage repair. Those parent deltas do not belong to this process-health child and must not be copied or cherry-picked into #102.

Current causal order is #15@5162ad5 current-range review -> Ready exact execution -> 100% owned-production coverage + CI/Supply/source-binding GREEN + independent governance -> normal #15 integration -> #102 ordinary/non-force reconciliation preserving only its eight valid Runtime Isolation paths -> fresh exact fmt/compile/test/Clippy/warnings-denied rustdoc/100% coverage/real traffic/load/OCI/Supply/current review -> #75 ordinary reconciliation + real H2 no-END_STREAM RED/GREEN.

Historical Draft CI/Supply results for #102 remain characterization only. No force push, destructive rebase, predecessor receipt transfer, self-approval, gate weakening, protected merge, immutable release, canary, rollback, cutover, or legacy-removal credit is allowed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions