feat(engine): corroborate privilege escalation on the foothold entry (JEF-314)#271
Merged
thejefflarson merged 2 commits intoJul 26, 2026
Conversation
…(JEF-314) Falco fires critical on setuid->root, but the flat corroborates(PrivilegeChange, _) relation stays non-corroborating everywhere (legit entrypoints/inits escalate on ordinary pods constantly). Add an entry-scoped shape, mirroring the JEF-319 cross-tenant-lateral pattern: a PrivilegeChange non-root->root corroborates a PrivilegeEscalation-tactic objective (T1611/T1098.006) ONLY when the entry is the proven internet-facing foothold. Shadow-gated per ADR-0014 — sets `corroborated` only, never actuates. Closes JEF-314 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VtjoJttCvBY4dzCoE4f9vP
…corroborate-privilege-escalation
thejefflarson
deleted the
thejefflarson/jef-314-retire-falco-optional-corroborate-privilege-escalation
branch
July 26, 2026 23:09
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.
Summary
corroborates(PrivilegeChange, _)relation stays non-corroborating everywhere (ADR-0011: legit entrypoints/inits escalate to root on ordinary pods constantly, so it's model evidence only).privilege_escalation_on_foothold, mirroring the existing JEF-319cross_tenant_lateralpattern: aPrivilegeChangenon-root→root corroborates a PrivilegeEscalation-tactic objective (T1611 Escape to Host / T1098.006 RBAC self-escalation, and any future T1548-tactic technique) only when the entry is the proven internet-facing foothold (EntryContext.is_foothold).corroborated_foralongsidecross_tenant_lateral. Shadow-gated per ADR-0014: this only setscorroborated; it never actuates and touches no default/enable config.How I identified the gate points
EntryContext.is_foothold, already resolved once per entry inprove_with(engine/src/engine/reason/proof/mod.rs) fromentry_foothold(graph, entry).is_some()— the same flag the existingcross_tenant_lateral(JEF-319) shape gates on, so the new shape reuses it rather than adding a new notion of "entry."PrivilegeChange { from_uid, to_uid }non-root→root condition isfrom_uid != 0 && to_uid == 0, matching the wire type inbehavior/src/lib.rs.Tactic::PrivilegeEscalation(T1611ESCAPE_TO_HOST, T1098.006RBAC_ESCALATION) already exists inengine/src/engine/graph/attack.rs; the new shape gates onattack.tactic == Tactic::PrivilegeEscalation, the stable per-tactic key the rest ofcorroboratesalready uses.Tests (both ways,
engine/src/engine/reason/proof/corroborate_privesc_tests.rs)root_escalation_on_the_foothold_entry_corroborates_priv_esc— root escalation on the proven foothold entry corroborates the PrivilegeEscalation chain (end-to-end viacorroborated_forand directly via the predicate).root_escalation_on_a_non_foothold_entry_does_not_corroborate— the SAME escalation on an ordinary (non-foothold) pod does NOT corroborate.Test plan
cargo fmtcargo clippy --all-targets -- -D warnings— cleancargo nextest run --workspace(the CI runner;cargo testalone races on shared env vars inrun_loop::testsper that file's own doc comment) — 959 passed, 0 failed, 2 ignored (pre-existing network-only ignores)soundcheck:pr-reviewself-review — no Critical/High findings (pure detection-policy logic, shadow-gated, no user input/injection/auth surface)/simplifyself-review (Agent tool unavailable in this context) — clean, no changes neededcorroborate.rs237,corroborate_privesc_tests.rs133)🤖 Generated with Claude Code
https://claude.ai/code/session_01VtjoJttCvBY4dzCoE4f9vP