Skip to content

Phase 1.4a: Attack-path chaining -- findings that are jointly critical #238

Open

Description

@ARSH871-bot

Proposal 4, first half, in the next-phase document. Led by Shubham.

Recognise when two or more findings, each medium on its own, combine into something jointly critical -- and report the chain as one connected story rather than two unrelated cards.

The precondition the document now states honestly

Measured against a real finding:

structured 'rule' / 'flow' / 'policy' fields: False / False / False
detail: 'Expected DENY but got PERMIT, decided by: permit ip any any'

Only device is structured. Rule and flow are inside one free-text string, so chaining needs either careful prose parsing or a small agreed extension to the finding format -- which is a needs: all four decision, the way the format itself originally was.

Acceptance criteria

  • A chain of two findings is reported as one connected item
  • The individual findings are still reported -- a chain never replaces its parts
  • Any finding-format change is raised and ratified separately before it is used
  • A single finding never becomes a "chain of one"
  • Mutation-tested

Split from

Proposal 4's compliance/CVE half is #220 and Phase 1.4b, so this is one piece rather than three.

Activity

  1. added
    layer: analysisLayer 1 — Batfish orchestration, checks, the pipeline
    needs: all fourAn F-1 or process change. Cannot be settled by one person
    size: LTwo weeks or more, or needs a team decision.
    phase: 1The four proposed capabilities.
    on Aug 26, 2026
  2. shubhamkataria2005 commented on Oct 18, 2026

    @shubhamkataria2005
    Collaborator

    Checklist for the first subject producer, from @ARSH871-bot's review of #390. None of these may be skipped when a check starts populating subject:

    • ai/explain.py:671 sends the whole finding to the model, subject included, but _names_an_invented_fact (:754-775) only checks summary, device, detail and source. A model that repeats a subject address gets rejected as inventing it, so the explanation falls back to plain text. That's the safe direction, but it's a silent loss of explanations. Ankeet's layer — needs his call.
    • Saved scans keep only _F1_FIELDS (web/main.py:1771, :1792), and tests/test_history_api.py:149 pins that. So subject will be silently dropped from history, and a chain formed from a live scan could not form from a saved one.
    • make_finding accepts subject on none and error findings. A chain must never run through a "could not check" card. Either refuse subject there or have the chaining skip non-found findings — and test whichever it is.
    • Let a finding carry A-3's optional subject (first step of #238) #390's key set is ratified four of four before any producer lands.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

layer: analysisLayer 1 — Batfish orchestration, checks, the pipelineneeds: all fourAn F-1 or process change. Cannot be settled by one personphase: 1The four proposed capabilities.size: LTwo weeks or more, or needs a team decision.

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions