Skip to content

Lint: warn when a rule declares no ATT&CK technique tag - #25

Merged
dgunter merged 1 commit into
mainfrom
lint/attack-technique-coverage
Sep 4, 2026
Merged

Lint: warn when a rule declares no ATT&CK technique tag#25
dgunter merged 1 commit into
mainfrom
lint/attack-technique-coverage

Conversation

@dgunter

@dgunter dgunter commented Sep 4, 2026

Copy link
Copy Markdown
Owner

What

A 14th lint row, at least one attack.t* technique tag, severity warning. A tactic tag alone does not say which technique the rule covers, and an untagged rule cannot be placed on the ATT&CK matrix.

Why now

Scanning the public SigmaHQ corpus (3,143 rules) with the shipped linter: every declared technique ID resolves against v19.2 (0 unknown, 0 retired), but 346 rules (11%) carry a tactic and no technique. That is the ATT&CK gap that actually exists in the corpus, and it is larger in rulesets that arrive unmapped.

Details

  • lint.py: new CHECK_TABLE row before the resolve checks; the finding is emitted once from the mapped tags, so it never double-reports with unknown/retired findings (a rule with a bad technique ID still passes coverage and fails resolve).
  • Tests: tactic-only rule warns, adding a technique clears it, bad-fixture row assertions extended, missing-fields case asserts the warning.
  • Golden fixtures: attack_coverage: pass on six; the fieldref fixture is a real tactic-only corpus rule and now expects the warning.
  • Copy: README lint bullet and the How-this-works lint paragraph mention the row. Frontend is data-driven; only a comment changed.

Backend 242 passed, frontend typecheck and vitest green.

🤖 Generated with Claude Code

A tactic tag alone does not say which technique a rule covers, and a rule
with no technique cannot be placed on the matrix. Across the public SigmaHQ
corpus 346 of 3,143 rules (11%) stop at the tactic; every declared technique
there resolves, so this is the ATT&CK gap that actually exists. New table
row "at least one attack.t* technique tag", severity warning, reported once
and not double-counted with the resolve checks. Golden expectations updated;
the fieldref fixture is a real tactic-only rule and now shows the warning.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@dgunter
dgunter merged commit 4dd3c92 into main Sep 4, 2026
1 check passed
@dgunter
dgunter deleted the lint/attack-technique-coverage branch September 4, 2026 17:03
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

SonarCloud analysis · PR #25

Quality gate: ✅ Passed · Open in SonarCloud

Condition Actual Required Status
Reliability rating (new code) A ≤ A
Security rating (new code) A ≤ A
Maintainability rating (new code) A ≤ A
Coverage (new code) 100.0% ≥ 80.0%
Duplication (new code) 0.0% ≤ 3.0%
Security hotspots reviewed 100.0% ≥ 100.0%

Open issues on new code: 0

No open issues on the changed code. 🎉

Commit 5d7ebb9a5ae7 · analysis task · posted by the Build workflow; edited in place on every push.

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