Skip to content

Ask which advisories apply, without sending the boot log - #12

Merged
Zenofex merged 1 commit into
mainfrom
feat/cli-applicability
Sep 27, 2026
Merged

Zenofex merged 1 commit into
mainfrom
feat/cli-applicability

Conversation

@Zenofex

@Zenofex Zenofex commented Sep 27, 2026

Copy link
Copy Markdown
Contributor

The client half of a design whose server half already shipped. The applicability endpoint and the terminal login that reaches it both existed; nothing in the CLI called them.

$ bootintel scan bootintel-9.txt --applicability --dry-run
{
  "inventory": [
    { "name": "linux", "version": "3.3.8" },
    { "name": "busybox", "version": "1.19.4" }
  ]
}

2 component(s) would be sent to https://bootintel.com. The boot log would not.

The guarantee is structural, not a promise. The payload is built from a fixed map of three detector labels to three product names, every value is re-validated against the server's own limits before it leaves, and there is no field a log could occupy. A test asserts that adding one breaks the build.

Verified against sample_logs/bootintel-24.txt, which carries androidboot.serialno=, vbmeta.device_state=unlocked and androidboot.selinux=permissive. It yields two version strings and nothing else.

--dry-run is a headline capability, not a debug switch. It is how a consultant shows a client what leaves the machine.

The translation is the part that would have failed silently. The server matches lowercase product names, so sending Bootloader or U-Boot 2020.10 returns nothing while looking like a server fault. Only U-Boot, Linux and BusyBox map to something the catalog holds; the other eleven detectors are not CVE-tracked products and are deliberately absent.

A 422 is reported as a bug in this client rather than user error, since the same rules are enforced here first. A 403 says local identification still works and how.

Verified live: bootintel login against the running server, then scan --applicability sending 2 components and receiving 67 verdicts, every one bounded_range. Probe account removed afterwards.

308 tests pass, clippy clean under -D warnings, rustfmt clean, cargo deny check all ok.

The client half of a design whose server half already shipped. The
applicability endpoint and the terminal login that reaches it both existed;
nothing in the CLI called them, so the feature was a road and a set of keys
with no car.

A consultant cannot upload a client's boot log. That is a contract matter, not
a preference, and it is the objection that keeps this tool out of the segment
it fits best. Shipping the curated ruleset down to the client instead would
hand over the one asset that compounds. So neither travels: the detectors run
locally, exactly as for a plain scan, and only product names and version
strings go up.

The guarantee is structural rather than a promise. The payload is built from a
fixed map of three detector labels to three product names, every value is
re-validated against the server's own limits before it leaves, and there is no
field a log could occupy. A test asserts that adding one breaks the build.
Verified against the Android corpus capture, which carries
androidboot.serialno=, vbmeta.device_state=unlocked and
androidboot.selinux=permissive, and yields exactly two version strings.

--dry-run prints the exact JSON and exits. That is how a consultant shows a
client what leaves the machine, so it is documented as a headline capability
rather than a debugging aid.

The label-to-product translation is the part that would have failed silently.
The server matches lowercase product names, so sending "Bootloader" or
"U-Boot 2020.10" returns nothing while looking like a server fault. Only
U-Boot, Linux and BusyBox currently map to something the catalog holds; the
other eleven detectors are not CVE-tracked products and are deliberately
absent.

A 422 from the server is reported as a bug in this client, not user error,
because the same rules are enforced here first. A 403 says local
identification still works and how.

Verified live end to end: `bootintel login` against the running server, then
`scan --applicability` sending 2 components and receiving 67 verdicts, every
one a bounded_range match, with "the boot log stayed here" in the output. The
probe account and its authorizations were removed afterwards.

Verified: 308 tests pass, clippy clean under -D warnings, rustfmt clean,
cargo deny reports advisories, bans, licenses and sources all ok.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Zenofex
Zenofex merged commit 736120a into main Sep 27, 2026
11 checks passed
@Zenofex
Zenofex deleted the feat/cli-applicability branch September 27, 2026 05:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant