Commit 6bc1c1d
feat(hw-fw): NVIDIA Tegra/L4T CVE pins in known_firmware.yaml
Closes Reviewer A C2 + Reviewer B F-FORENSIC-03 deferred from
postmortem hw-firmware-adaptive-session-2026-05-18 Rec #3. 6 new
curated CVE family entries covering the NVIDIA Tegra/L4T BSP cluster
that DS1 (project d360f8f5) and other Jetson-based firmware images
depend on. Per-CVE NVD CPE list verified via direct WebFetch on
services.nvd.nist.gov/rest/json/cves/2.0?cveId=<CVE> recursively for
EACH of the 6 CVEs — Scout report's NVD claims independently
re-fetched before commit.
Recursive-verification discipline (Reviewer B 2026-05-15..18 caught
CVE-attribution failure modes 4 sessions in a row): every CVE-
attribution claim — whether from user prompt, scout report, or
reviewer finding — gets the direct NVD URL fetch before pinning.
The 6 fetches surfaced 3 user-prompt-discrepancies that NVD
overruled:
* CVE-2021-1111 — user said "ALL Jetsons"; NVD CPE EXCLUDES
TX1/Nano (only AGX-Xavier+TX2+TX2-NX+Xavier-NX listed).
chipset_regex narrowed accordingly.
* CVE-2021-34372 — user said product=tegra_tos_trusty; NVD CPE
uses product=jetson_linux. wairz curated families: schema has
no `product` field (only banner_cve_pin schema does); we narrow
via vendor=nvidia + category=tee, which is the schematic
equivalent for the Trusty OTE attack surface.
* CVE-2022-42269 — user said "AGX-Xavier/TX2/Xavier-family"; NVD
CPE ALSO includes jetson_tx1. chipset_regex expanded to include
T210/TX1 (Nano stays excluded — different hardware anchor).
NVD wins per Rule #19 evidence-first in all 3 cases. All 6 pins
satisfy F-FORENSIC-10 narrowing (chipset_regex AND/OR version_regex
present — no family-only attribution).
Per-CVE summary
===============
| CVE | Fix at | Scope | Discrepancy? |
|-----|--------|-------|--------------|
| CVE-2019-5680 | R32.2 | TX1 only | None (R32.2 IS fix) |
| CVE-2021-1111 | R32.6.1 | AGX-Xav+TX2+TX2-NX+Xav-NX | NVD excludes TX1+Nano |
| CVE-2021-34372 | R32.5.1 | ALL Jetsons (TEE) | product=jetson_linux not tegra_tos_trusty |
| CVE-2021-34397 | R32.5.1 | TX2+Xavier family | None |
| CVE-2022-42269 | R32.7.2 | AGX-Xav+TX2+Xav-NX+TX1 | NVD adds TX1 |
| CVE-2022-42270 | R32.7.2 | Xavier only (NVDLA) | None |
Forward-prepared note
=====================
version_regex requires the L4T BSP release string ("R32.x.y" style)
to appear in blob.version OR any blob metadata value. The current
Tegra parser (commit 8054d22) does NOT yet extract L4T release from
blob content — these pins will fire when a future enhancement adds
L4T release extraction (e.g. parse /etc/nv_tegra_release on the
firmware tree → populate firmware.device_metadata["l4t_release"],
OR scan Tegra-blob head for "R<N> (release), REVISION: <x.y>"
banner string and store in blob.metadata).
Strict version_regex is the right discipline NOW per Reviewer B
discipline — better forward-prepared with zero false-positives than
firing on every Tegra blob regardless of L4T version.
Out-of-scope (explicit per user direction)
==========================================
CVE-2021-34373..34396 from the same NVIDIA security bulletin
disclosure batch — DO NOT batch-extrapolate. Each future CVE needs
its own NVD WebFetch verification before pinning. The disclosure-
batch antipattern has bitten wairz 4 sessions in a row (BTFM
2026-05-15, CVE-2021-28139 2026-05-16, CVE-2021-34147/31609/31612
2026-05-17, CVE-2019-5680 Selfblow 2026-05-18); the per-NVD-CPE
recipe applies recursively for any future Tegra coverage extension.
Tests (10 new in test_hardware_firmware_cve_matcher.py)
=======================================================
- test_tegra_cve_pins_all_six_loaded — all 6 entries present
- test_tegra_cve_pins_satisfy_f_forensic_10_narrowing —
chipset_regex or version_regex on every pin (no family-only)
- test_cve_2019_5680_chipset_regex_tx1_only — accepts TX1,
rejects TX2/Xavier/Nano (canonical Selfblow scope)
- test_cve_2021_1111_chipset_regex_excludes_tx1_and_nano —
Rule #46 paired canary for the user-prompt discrepancy
- test_cve_2022_42269_chipset_regex_includes_tx1 —
Rule #46 paired canary for the TX1-inclusion discrepancy
- test_cve_2022_42270_xavier_only_excludes_tx2 — NVDLA Xavier-only
- test_cve_2021_34397_excludes_tx1_and_nano — TX2/Xavier family
- test_cve_2021_34372_has_no_chipset_regex_per_nvd_all_jetsons —
confirms intentional chipset_regex absence (ALL-Jetsons scope)
- test_tegra_version_regex_matches_pre_fix_l4t_releases —
forward-prepared canary that pre-fix L4T release strings WILL
match when extraction lands
- test_tegra_cve_pins_carry_nvd_url_reference — verifiability
discipline: each pin's notes cites the NVD URL
66/66 cve_matcher tests pass. No regressions.
Refs:
- Postmortem hw-firmware-adaptive-session-2026-05-18 Rec #3
- NVD CPE WebFetch for each CVE (see notes field URLs)
- CLAUDE.md Rule #19 (evidence-first — NVD CPE list IS truth)
- CLAUDE.md Rule #25 (per-piece commits)
- CLAUDE.md Rule #46 (paired-canary discipline)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 8054d22 commit 6bc1c1d
2 files changed
Lines changed: 443 additions & 0 deletions
File tree
- backend
- app/services/hardware_firmware
- tests
Lines changed: 167 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1144 | 1144 | | |
1145 | 1145 | | |
1146 | 1146 | | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
| 1151 | + | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + | |
| 1160 | + | |
| 1161 | + | |
| 1162 | + | |
| 1163 | + | |
| 1164 | + | |
| 1165 | + | |
| 1166 | + | |
| 1167 | + | |
| 1168 | + | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
| 1177 | + | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + | |
| 1181 | + | |
| 1182 | + | |
| 1183 | + | |
| 1184 | + | |
| 1185 | + | |
| 1186 | + | |
| 1187 | + | |
| 1188 | + | |
| 1189 | + | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + | |
| 1193 | + | |
| 1194 | + | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
| 1233 | + | |
| 1234 | + | |
| 1235 | + | |
| 1236 | + | |
| 1237 | + | |
| 1238 | + | |
| 1239 | + | |
| 1240 | + | |
| 1241 | + | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
| 1259 | + | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
| 1269 | + | |
| 1270 | + | |
| 1271 | + | |
| 1272 | + | |
| 1273 | + | |
| 1274 | + | |
| 1275 | + | |
| 1276 | + | |
| 1277 | + | |
| 1278 | + | |
| 1279 | + | |
| 1280 | + | |
| 1281 | + | |
| 1282 | + | |
| 1283 | + | |
| 1284 | + | |
| 1285 | + | |
| 1286 | + | |
| 1287 | + | |
| 1288 | + | |
| 1289 | + | |
| 1290 | + | |
| 1291 | + | |
| 1292 | + | |
| 1293 | + | |
| 1294 | + | |
| 1295 | + | |
| 1296 | + | |
| 1297 | + | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
0 commit comments