mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-22 17:51:14 +00:00
[AZ-436] [AZ-437] [AZ-438] [AZ-439] Add NFT-SEC-01..05 security scenarios
Batch 87: 6 NFT-SEC blackbox scenarios + 5 helper evaluators + 75 unit tests + cumulative review batches 85-87. * AZ-436 NFT-SEC-01: cache-poisoning safety budget (AC-NEW-9); aggregate false_trust_count ≤ N×1e-6; zero-tolerance default. Canonical-only by default; E2E_NFT_SEC_01_RELEASE_GATE=1 unlocks full matrix. * AZ-437 NFT-SEC-02 + NFT-SEC-05: shared egress-observation evaluator (AC-NEW-10); SEC-02 = 0 packets to non-e2e-net over 5min replay; SEC-05 = DNS-blackhole sidecar healthy + lookup fails + UDP-53 silent. * AZ-438 NFT-SEC-03: AP-only signing rejection (AC-NEW-11); 3 sub-cases (unsigned/wrong-key/replayed) each reject ≤500ms + no position drift. * AZ-439 NFT-SEC-04: probe (always-run) = no-crash + deterministic decode outcome; ASan-fuzz (release-gate) = 0 findings ≥4h; AC-3 corpus floor informational only per spec. Verdict per-batch: PASS_WITH_WARNINGS (5 Low). Cumulative review for batches 85-87 (K=3 window) also PASS_WITH_WARNINGS with 5 cross-batch findings — recommends hygiene PBIs for write_csv_evidence duplication (13 helpers) and _resolve_fixture_path duplication (13 scenarios), plus new tickets for AZ-595 fixture builder + DNS-blackhole sidecar service. Also adds _docs/LESSONS.md documenting the Jira transition-ID lesson (always call getTransitionsForJiraIssue first, never memorize numeric IDs across sessions). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -71,6 +71,11 @@ E2E_ROOT = Path(__file__).resolve().parents[1]
|
||||
"runner/helpers/companion_reboot_evaluator.py",
|
||||
"runner/helpers/monte_carlo_envelope_evaluator.py",
|
||||
"runner/helpers/escalation_ladder_evaluator.py",
|
||||
"runner/helpers/cache_poisoning_evaluator.py",
|
||||
"runner/helpers/egress_observer.py",
|
||||
"runner/helpers/mavlink_signing_evaluator.py",
|
||||
"runner/helpers/cve_probe_evaluator.py",
|
||||
"runner/helpers/asan_fuzz_evaluator.py",
|
||||
"fixtures/sitl_replay_builder/__init__.py",
|
||||
"fixtures/sitl_replay_builder/builder.py",
|
||||
"fixtures/sitl_replay_builder/build_p01_fixtures.py",
|
||||
@@ -141,6 +146,12 @@ E2E_ROOT = Path(__file__).resolve().parents[1]
|
||||
"tests/resilience/test_nft_res_02_companion_reboot.py",
|
||||
"tests/resilience/test_nft_res_03_monte_carlo.py",
|
||||
"tests/resilience/test_nft_res_04_blackout_escalation.py",
|
||||
"tests/security/test_nft_sec_01_cache_poisoning.py",
|
||||
"tests/security/test_nft_sec_02_no_egress.py",
|
||||
"tests/security/test_nft_sec_03_mavlink_signing.py",
|
||||
"tests/security/test_nft_sec_04_opencv_cve.py",
|
||||
"tests/security/test_nft_sec_04_asan_fuzz.py",
|
||||
"tests/security/test_nft_sec_05_dns_blackhole.py",
|
||||
],
|
||||
)
|
||||
def test_required_path_exists(relative_path: str) -> None:
|
||||
|
||||
Reference in New Issue
Block a user