Replies: 1 comment
AeroVault Security Audit 2026-06-18: Dual Blind Audit + Remediation + Controaudit (Grade A)SummaryAeroVault ( What this means for your dataShort version: your vaults are safe. The encryption that protects an AeroVault file was reviewed and found solid, and nothing the audit found could quietly damage, delete, or unlock the files inside a vault you have already created. AeroVault's self repair is built so it can only succeed or stop with an error: it never replaces a file unless the rebuilt copy matches the original exactly. The fixes in this release are precautions that harden AeroVault against unlikely situations, such as the app being interrupted at the wrong moment or someone who already has access to your computer.
In plain terms: no one could attack your vaults over the internet, and there was no way to silently corrupt or destroy what is inside them. These changes close small gaps that would have needed someone already at your computer or an unlucky crash, and they stop AeroVault from leaving any unencrypted leftovers behind. How it was audited (methodology)
Findings & remediation
Controaudit resultTwo adversarial rounds of independent Opus reviewers (each told to break the fix) plus completeness critics. Round 1 confirmed M1/M4/M5/M6/M8 and surfaced genuine residuals: an A round 3 (2026-06-18) adversarial pass (4 Opus reviewers) then re-verified the M7 convergence (the app's forked standalone EC engine folded onto the crate) and could not refute it: function bodies byte-for-byte identical, the cross-impl golden still byte-for-byte, the M1 fix intact in the single implementation, no forked EC left in the app, and Gates (Windows 11): crate Cross-confirmed on Linux (2026-06-18): crate 116 lib + integration green, Honest residuals (tracked, not blocking)
Crate to app consumption noteCrate 0.6.2 carries all crate-side fixes (M1 standalone, M2/M4/M6 container) and the M7 convergence (the single |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
AeroVault (the
.aerovaultencrypted-container engine behind AeroFTP) went through two adversarial security audit rounds. Every finding from both rounds is now fixed and released. The cryptographic core was found sound in both rounds; the issues were in the integration layer and in two extract / atomic-write paths.The full technical reports are published in the repo, and this is where future audits will live too:
The two rounds, in short
Round 1 (2026-05-30): deep single-perspective audit. A multi-dimension review with skeptic verification of every raised finding. 47 raised, 45 confirmed: 0 critical, 1 high, 8 medium, plus low / info. The one high was an authentication gap (the TOTP second factor was not enforced in the default vault mode), not a crypto flaw. The mediums clustered into a content-integrity gap (chunk splicing), secret-memory hygiene, a draft-extractor path traversal, atomic-write durability, and Cryptomator-compat hardening. Remediated, including the crate format v3 that binds a per-file id into the chunk AAD.
Round 2 (2026-06-03): dual independent cross-audit. Two reviewers audited the identical commits independently, with separate proof-of-concept work. Both reached NO-GO independently, so the verdict did not rest on any single contested finding. 3 high, ~10 medium, plus low / info. The headline issues:
O_NOFOLLOWpluscreate_newplus descriptor identity plus canonical containment).Round 2 also honestly caught a regression in round 1: the round 1 TOTP throttle persistence had become dead code on the live unlock path. It was re-implemented correctly. The mediums and lows (chunk-length DoS, v3 concurrent-write lost update, headless TOTP replay, keystore peak memory, bridge file permissions, decompression bomb, reserved-header MAC coverage, supply-chain yanked dependency, and the v3-naming contract) are all fixed across crate 0.4.1 / 0.4.2 and the application.
Current state, proven by tests
Post-fix gates (2026-06-03): crate test suite 31 / 0, crate clippy clean, application library suite 2074 / 0, application clippy clean, frontend typecheck clean,
cargo auditclean.The current secure behavior reproduces with the published crate CLI (
cargo install aerovault-cliinstalls theaerovaultbinary). Captured against 0.4.2 with a 1 MiB random payload (the password prompt is hidden):Round-trip is byte-identical:
A wrong password fails closed:
The symlink write-through (round 2, AV-001) now refuses. Pre-plant a symlink where the extract output would land, then extract: it fails closed and the external target is untouched, where 0.4.0 would have followed the symlink and overwritten it:
The full reproducible verification, including the automated gate table, is in the round 2 report.
v4 Wrapper-Stack readiness
Starting the v4 Wrapper-Stack (ECC) development line is cleared: GO. The v3 surfaces v4 builds on (pre-decrypt damage detection via a separate cipher hash, clean truncation handling, the extension directory, packing / dedup, profile chunking bounds) are present, hardened, and green under test. The new dispatch validation even de-risks the v4 format evolution by fail-closing on unknown wrapper versions.
One honest reservation for a full "GA, stable without reservations" claim: a live validation matrix (real GUI, real 2FA unlock, multi-GiB round-trips, crash injection, hostile bridge fuzzing) was not executed by either reviewer. That is a validation gap, not a known defect, and it is the gate for leaving Beta, not a prerequisite to start v4. Details in the round 2 report.
Versions
aerovault 0.4.1(security) and0.4.2(metadata) are published on crates.io, withaerovault-clirealigned to 0.4.2. The fixes ship end to end in the next AeroFTP release.Acknowledgement
@EhudKirsh is a project contributor: he designed the AeroVault wrapper-stack pipeline model (AeroFTP issue #162), co-authored the round 1 remediation, and has provided sustained community testing across releases. This verdict is the green light to open the v4 line he helped shape.
Ehud, inviting you to review the reports and continue the v4 discussion here.
Edited to fix paragraph formatting: GitHub Discussions render single line breaks literally, so the original 80-column hard wrap was reflowed into single-line paragraphs. Content unchanged.
All reactions