|
| 1 | +Status: PASS |
| 2 | +Reviewed-Commit: 8755f990dac0bad1dc0bef56859059124a212c5a |
| 3 | +Tester: External follow-up pentest |
| 4 | +Scope: sanitization crate family release 2.0.2 |
| 5 | +Date: 2026-07-21 |
| 6 | + |
| 7 | +## Summary |
| 8 | + |
| 9 | +The 2.0.2 review covered the complete release delta from 2.0.1, with emphasis |
| 10 | +on the test-only Miri mapping model, mapped-memory initialization and teardown, |
| 11 | +page-sealed cleanup after partial protection failures, integrity-failure |
| 12 | +behavior, and release-configuration boundaries. |
| 13 | + |
| 14 | +Follow-up testing confirmed that the Miri simulator is confined to debug core |
| 15 | +unit-test artifacts and cannot be selected by ordinary downstream or release |
| 16 | +builds. The simulator verifies lifecycle state transitions and |
| 17 | +clear-before-release behavior without claiming to exercise native mapping, |
| 18 | +locking, page protection, dump/fork policy, or operating-system CSPRNG calls. |
| 19 | + |
| 20 | +Native cleanup now clears complete locked mappings before release. Page-sealed |
| 21 | +cleanup processes pages independently, immediately erases and reseals each |
| 22 | +page it can transition, continues after individual failures, and retains a |
| 23 | +poisoned mapping and established lock when erasure cannot be confirmed. |
| 24 | +Fault-injection review covered first-page normalization failure, later-page |
| 25 | +erasure, cleanup reseal failure, retained zeroed storage, and successful |
| 26 | +checked retry. The final test-only readable-page observer requires an explicit |
| 27 | +unsafe precondition, and successful test resealing invalidates its marker. |
| 28 | + |
| 29 | +## Confirmed Residual Limits |
| 30 | + |
| 31 | +- Miri models ownership and clearing only; native operating-system protection |
| 32 | + remains covered by native tests and target evidence. |
| 33 | +- A cleanup failure may intentionally retain a poisoned mapping and its lock |
| 34 | + until a checked retry succeeds or the process exits. |
| 35 | +- Destructors cannot guarantee cleanup after process abort, forced |
| 36 | + termination, `mem::forget`, or equivalent lifecycle bypasses. |
| 37 | +- Native memory protections do not defend against a compromised kernel, |
| 38 | + privileged debugger, DMA adversary, or physical access by themselves. |
| 39 | +- Data-oblivious and leakage claims remain target-, compiler-, feature-, and |
| 40 | + release-profile specific; this release does not claim identical wall-clock |
| 41 | + timing or universal microarchitectural resistance. |
| 42 | + |
| 43 | +## Evidence And Disposition |
| 44 | + |
| 45 | +- No critical, high, medium, or low findings remain open for 2.0.2. |
| 46 | +- Workspace tests, documentation tests, warning-denying Clippy, Kani, codegen, |
| 47 | + API/evidence checks, dependency policy, migration fixtures, lifecycle and |
| 48 | + concurrency probes, and all five package archives passed. |
| 49 | +- Existing accepted native timing evidence remains applicable because 2.0.2 |
| 50 | + does not modify the measured constant-time implementation paths. |
| 51 | +- All five publishable crates are versioned 2.0.2, and the runtime exact-pins |
| 52 | + the matching derive crate. |
| 53 | +- The README, safety documentation, threat model, non-guarantees, evidence |
| 54 | + guide, release notes, and publication script describe the reviewed behavior |
| 55 | + and remaining deployment responsibilities. |
| 56 | +- The temporary root `PENTEST.md` is absent from the release candidate. |
0 commit comments