Repository navigation
v0.3.0
Added
-
Network data-flow fields (
flowsh/v3,effect-ir/v2). The report now
asserts two network data flows so a consumer can key on the flow rather than
infer it from the co-occurrence of aNetEgressand a sink:
score.cradleFlows(network content reaching code execution —curl … | sh,
source <(curl …),sh -c "$(curl …)"; a download-then-execute chain is not
currently asserted, because no frontend establishes that flow) and
score.ingestFlows(a download client writing fetched content to a file —
curl -o/-O, wget default/-O). The sink is marked by the additive
effect-levelnetFlowrole (cradleon aCodeExec,ingeston an
FSWrite), which bumps the effect IR toeffect-ir/v2; a program with no
network flow serialises byte-for-byte as before.DetectCradleFlows/
DetectIngestFlowslive inengine/taint.go, the binder marks the curl/wget
output parameters (and synthesises wget's implicit download), and the bash
frontend marks a code-execution sink fed by network content. VCS sync (git clone/fetch/pull) is never an ingest. The CLI envelope tag moves to
flowsh/v3. -
PowerShell abstract variable state (Σ). The PowerShell frontend now
interprets a script through its own bounded abstract variable state Σ
instead of lowering raw parse-tree text, mirroring the bash frontend at the
frontend's own layer (front/ps/state.go,front/ps/wordeval.go, and a
structured-control-flowfront/ps/parse.go). Fabricated literal targets are
gone —$dir/file.txtno longer lands as a confidently-Certainconcrete
path: an effect target is the evaluated value when the word is known and ⊤
otherwise, a URL with a literal host prefix keeps a host-scoped egress
instead of widening to ⊤, and a word's provenance (includingsecret)
flows onto the egress effect so exfiltration pairs on real per-command
dataflow rather than a program-level co-occurrence heuristic. Unset reads
degrade to ⊤ (never the empty string),if/foreach/for/while/do/
tryfork and join Σ per branch, session-state cmdlets (Set-Location,
Set-Variable,Clear-Variable, …) update Σ,@{…}splat literals expand
to their parameter bindings, and lowering is bounded by a deterministic step
counter that unwinds to ⊤. See
ADR-0014.