DF-2369 / verdict.json
{ "finding_id": "DF-2369", "status": "reproduced", "reproduced": 1, "impact": "none", "confidence": "certain", "verdict": "Real in-kernel rijndael KPI, MODE_CFB1, two blocks (inputLen=256 bits): rijndael_blockEncrypt returns 256 claiming two produced blocks while out[16..31] stays at its pre-planted sentinel - the per-block loop never advances input/outBuffer (every other mode in the same function does), so encrypting leaves plaintext blocks 2..n in the ciphertext output and decrypt leaves out[16..] stale; the inner loop also re-reads input[0..15] each outer pass. With the pointer advance both blocks are processed (ct[16..31] now ciphertext, decrypt writes through block 2). The ECB KAT control of the same KPI matches FIPS-197; the legacy CFB1 path has no in-tree caller (cryptosoft never selects MODE_CFB1) - latent correctness/assurance defect, confirmed as filed.", "exploit_chain": "", "evidence": "session baseline (ct[16..31] = e7*16 sentinel INTACT, rc=256; decrypt stale) vs run_fixed_kernel.log (ct[16..31] = 40 24 d0 ..., decrypt changed), fix.diff", "kernel_refs": [ "sys/crypto/rijndael/rijndael-api-fst.c:153", "sys/crypto/rijndael/rijndael-api-fst.c:186", "sys/crypto/rijndael/rijndael-api-fst.c:324", "sys/crypto/rijndael/rijndael-api-fst.c:357" ], "poc_changes": "initial ECB KAT used raw key bytes where the legacy makeKey API wants ASCII hex keyMaterial - the FIPS vector now matches", "attempts": 3, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #5 DFBATCH Wed Oct 21 21:27:34 UTC 2026 root:/usr/obj/usr/src/sys/DFBATCH x86_64 (rig kernel); stock baseline #0 X86_64_GENERIC", "runtime_sec": 400, "guest_dirty": 0, "build_cmd": "kernel-compiled rig (DFBATCH)", "run_cmd": "sysctl debug.dfbatch.cmd=\"crypto 2369:<kat|cfb1>\"", "code_hash": "c872cf8f02a063d7e322cc53b4bf4154de47b7e3ebfae04a72e8b297023c5746", "notes": "fix validated A/B on the same rig: baseline behavior gone post-patch (see run_fixed* logs); rig kernel = X86_64_GENERIC + device dfbatch, INVARIANTS kept", "recommended_fix": "advance input/outBuffer per block in both CFB1 loops" } |