docs(triage): explain the WireGuard zero-row result and its risk profile #26
Loading…
Reference in a new issue
No description provided.
Delete branch "fm/dse-security-reports-explain-empty-export"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The report warns everywhere that a blank cell reads as clean, but the one unit with an empty result - ASP-DSE-PROD-WIREGUARD, zero rows in both Defender exports - was never fully explained, leaving exactly the misreading the report warns about. This folds the explanation into the existing sections (no new section): the unit's role, the explicit absence of the Python stack that dominates the estate's findings, the shared el9 kernel leftovers, the TCP-only boundary of the reachability probe against the unit's UDP tunnel, and the corrected zero-row framing in the findings report.
What changed
reports/defender-triage.typ(Systemlandkarte): state the unit's role where it is introduced - network service host, not an application host: the evidence RPM inventory carrieswireguard-toolsanddnsmasq(tunnel terminator, resolver software), and its failure or compromise hits the connections running through it, a different impact profile than a workbench.reports/defender-triage.typ(Defender-Sensor je Einheit): make the no-Python-stack point explicit - the pip probe has zero hits for pyjwt, anyio, h11 and pillow, the four libraries that carry all twelve PROD-WORKBENCH rows, so the dominant finding class cannot arise on this host; keep the shared el9 kernel leftovers visible (running 5.14.0-687.60.1, retained 687.58.1 and 687.59.1, Defender silent on kernel findings for all four el9 units) - no rows and no kernel exposure are not the same statement - and note that the same kernel exposure weighs differently on a tunnel terminator.reports/defender-triage.typ(Netzwerk-Reichweite): state the probe boundary - the port probe is TCP-only, the unit's own service is UDP by protocol design and can never answer a TCP connect, so the probe says nothing about tunnel reachability; that is a boundary of the measurement, not a finding about the service.reports/defender-findings.typ: align the zero-row framing with the corrected reading of the triage report - units with evidence but zero export rows hold nothing above the export threshold (critical / CVSS above 9.5), which is not missing coverage, but zero rows are still never a clean finding (fixed in both places that carried the old "Abdeckungsluecke des Exports" wording, lines ~154 and ~250).Behaviour change
Text-only change to the two report templates; no derivation, evidence or cache change. Rendered PDFs now explain the WireGuard empty result at its introduction point and in the sensor section, state the UDP/TCP probe boundary, and the findings report no longer frames zero-row units as export coverage gaps.
Notes for the captain (facts not yet machine-readable)
config/systems.jsoncarries an emptyrolefor this unit. The prose therefore stays at the cache-backed level (wireguard-tools + dnsmasq installed, tunnel UDP by design). To state the subnet-chokepoint specifics in the report, either the evidence probe needs a listener/subnet extension or the committedrolebaseline needs an entry.Validation
just all,just repro(byte-identical both PDFs),just test(39 passed),just lint,just py-crosscheck(stdlib vs polars byte-identical) on the synthetic fixture lane.just ingest, realtriage.csvsidecar re-copied before the final derive), new sentences verified present in both rendered PDFs; artifacts republished, previous copies moved toartifacts/superseded/, the 2026-10-26 set untouched.Instructions-PR: none