Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions docs/architecture/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,19 @@ flags, and raw configuration never enter the runtime edge, finding, or browser
response. Missing, stale, duplicate, malformed, or collided facts produce no
finding.

`docker.daemon_state_bind_mount_publishes_port` emits a warning only when the

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reconcile the warning with the documented severity policy

The new rule is classified as a warning, but the “Current finding policy” at lines 192–199 reserves warnings for service-state declarations or the single daemon-state fact and reserves combinations of directly observed Docker facts for advisories. This two-fact rule therefore matches the documented advisory category while being labeled a warning, leaving contradictory guidance for operators and future rule authors; update the policy or document why this rule is an exception.

Useful? React with 👍 / 👎.

same uniquely identified Docker container has an exact pair of fresh version-1
Docker observations from the same collection: the path-free daemon-state risk
fact and a validated nonzero host-to-container port publication. Its canonical
evidence order is daemon-state first, then port publication. This is a static
review prompt for the co-occurrence of those facts, not an Internet-reachability,
traffic, exploitability, compromise, breach, impact, or causal conclusion.
Private container listeners, zero or malformed bindings, stale or mismatched
observation timestamps or provider revisions, duplicate or collided facts, and
non-Docker input produce no finding. The projection is derived from the cached
runtime map: it adds no collector, host scan, or write capability, and mock
mode publishes neither evidence nor evidence-derived findings.

`docker.compose_declared_target_not_active` emits an advisory only when one
fresh, uniquely identified `depends_on` relationship is a Docker-recorded
Compose declaration from a running Docker container to a uniquely identified
Expand Down
11 changes: 11 additions & 0 deletions docs/security/THREAT_MODEL.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,13 @@ changes them:
- Docker daemon-state bind-mount evidence is a single closed, path-free fact. It never exposes
a mount path, mount ID, mount options, or raw Docker configuration. npm dependency evidence
is likewise a bounded declaration with a curated summary, never raw `package.json` content.
- The daemon-state-and-host-port warning is a cached, static review derivation, not a collector.
It accepts only one fresh version-1 Docker daemon-state fact and one fresh Docker port-publication
fact for the same unique container, recorded at the same observation time and provider revision;
the port fact must already prove a validated nonzero host-to-container binding. It is suppressed
for mock, stale, malformed, duplicate, collided, mismatched, private-only, zero, or non-Docker
input. It does not disclose the mount or port value and does not assert Internet reachability,
traffic, exploitability, compromise, breach, impact, or causality.
- The Compose target-state advisory is a cached read-only derivation, not a collector. It accepts
only one fresh version-1 Docker `docker_compose_depends_on` observed-declaration reference for
a unique running Docker-container source and unique stopped/failed Docker-container target.
Expand Down Expand Up @@ -172,6 +179,10 @@ Automated tests currently cover:
runtime evidence or evidence-derived findings; private container ports have no host-publication
evidence; daemon-state facts remain path-free; and Systemd/npm declarations retain only their
closed slot revision, timestamp, and freshness vocabulary.
- Finding boundary tests include the daemon-state-and-host-port warning: only the ordered fresh
Docker pair for one unique subject with matching collection timestamp and provider revision is
accepted. Tests suppress private-only, zero, malformed, stale, duplicate, crossed, collided,
non-Docker, and mock inputs; the presentation remains static and does not expose evidence values.
- GUI smoke coverage against daemon fallback mode.
- Route and middleware completeness: every Express layer must be wrapped in
`trackedMiddleware()` and every route registered through `registerRoute()` with
Expand Down
7 changes: 7 additions & 0 deletions docs/testing/TESTING_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ containers, or services.
collided, ambiguous, non-Docker, and non-matching-status inputs. These are projection tests:
they add no collection and never assert requiredness, readiness, health, traffic, start-order,
root-cause, or drift conclusions.
- The daemon-state-and-host-port warning accepts only an ordered pair of fresh version-1 Docker
observations for one unique container: a path-free daemon-state risk fact followed by a port
publication with a validated nonzero host binding. Tests require matching observation timestamp
and provider revision, and suppress private-only, zero, malformed, stale, duplicate, crossed,
collided, non-Docker, and mock inputs. They verify static review wording only; no test treats the
pair as proof of Internet reachability, traffic, exploitability, compromise, breach, impact, or
causality, and the projection adds no collection or write behavior.
- Rust-owned JSON Schema and generated TypeScript declarations, Node-owned
envelope/request/SSE schemas, and readable contract fixtures. The contract
check fails on stale generated output, invalid fixtures, incomplete
Expand Down
Loading