chore(release): bump version to 0.8.0, add SECURITY_AUDIT.md, and update changelog
This commit is contained in:
+75
-11
@@ -8,24 +8,88 @@ und dieses Projekt folgt den Richtlinien von [Semantic Versioning](https://semve
|
||||
## [0.8.0] - 2026-09-19
|
||||
|
||||
### Security Audit Remediation & Format V3 Release
|
||||
Dieses Release implementiert die umfassende Härtung aus zwei Security-Audit-Runden, rüstet das Container-Format auf V3 auf und führt wesentliche Sicherheits- und Notfallfunktionen ein.
|
||||
Dieses Release implementiert die vollständige Behebung aller 33 identifizierten Schwachstellen und Härtungsanforderungen aus zwei umfassenden Security-Audit-Runden, rüstet das Container-Format auf V3 auf (mit kanonischer Metadaten-Authentifizierung und Generation-gebundenem Chunk-Replay-Schutz) und führt wesentliche Sicherheits- und Notfallfunktionen ein.
|
||||
|
||||
#### Security & Architecture (Findings S-01, V-01, V-02, K-01, K-02, K-03)
|
||||
#### Kryptografie & Container-Format V3 (K-01, K-02, K-03, M-01, M-05)
|
||||
- **K-01: Kanonische Metadaten-Authentifizierung (Format V3)**:
|
||||
- Ergänzung einer HMAC-SHA-256 Metadaten-MAC (`metadata_mac`) im Header, abgeleitet aus dem DEK.
|
||||
- Verhindert unbemerkte Manipulation von Verzeichnisstrukturen, Dateigrößen oder Dateitypen.
|
||||
- Ergänzung einer HMAC-SHA-256 Metadaten-MAC (`metadata_mac`) im Header, kryptografisch abgeleitet aus dem DEK via HKDF-SHA256 (`SANCTUM_META_MAC_V3`).
|
||||
- Verhindert unbemerkte Manipulation von Verzeichnisstrukturen, Knotennamen, Dateigrößen oder Dateitypen. `sanctum verify` erkennt jegliche Abweichung sofort.
|
||||
- Neuer CLI-Befehl `sanctum upgrade-format --path <container>` zur unterbrechungsfreien Migration von V1/V2 auf V3.
|
||||
- **K-02: Chunk-Replay- & Reordering-Schutz (Format V3)**:
|
||||
- Erweiterung des AAD von 16 Bytes auf 24 Bytes: Bindung an `node_id` (8 Bytes), `chunk_index` (8 Bytes) und monotone `generation` (8 Bytes).
|
||||
- Verhindert das Wiedereinspielen veralteter Chunks durch Angreifer mit Schreibzugriff auf die Containerdatei.
|
||||
- Erweiterung des AAD für AES-256-GCM von 16 Bytes auf 24 Bytes: Bindung an `node_id` (8 Bytes), `chunk_index` (8 Bytes) und monotone `generation` (8 Bytes).
|
||||
- Verhindert das Wiedereinspielen älterer gültiger Ciphertexts durch Angreifer mit Container-Dateizugriff.
|
||||
- **K-03: Notfallblatt-Lebenszyklus & `rekey`-Kommando**:
|
||||
- `sanctum passwd` weist nun explizit darauf hin, dass das 24-Wörter Notfallblatt (BIP-39) weiterhin gültig bleibt.
|
||||
- Neues CLI-Kommando `sanctum rekey`: Generiert einen frischen DEK, verschlüsselt alle Chunks um, aktualisiert Header sowie Metadaten-MAC und entwertet das bisherige Notfallblatt unwiderruflich.
|
||||
- `sanctum passwd` weist nun unmissverständlich darauf hin, dass das 24-Wörter Notfallblatt (BIP-39) weiterhin gültig bleibt.
|
||||
- Neues CLI-Kommando `sanctum rekey`: Generiert einen frischen DEK, verschlüsselt alle Chunks um, schreddert alte Datenblöcke und gibt eine neue 24-Wort Notfallphrase aus.
|
||||
- **M-01: Erhöhung der Argon2id-Standardparameter**:
|
||||
- Neue Container verwenden standardmäßig `m = 256 MiB` (262.144 KiB), `t = 4` Iterationen und `p = 4` Lanes für maximalen Schutz gegen Brute-Force-Angriffe.
|
||||
- **M-05: Verifikation der Schemagleichheit (Deniability-Härtung)**:
|
||||
- Automatisierter Test stellt sicher, dass SQLite-Tabellen- und Spaltenstrukturen zwischen Standard- und Alibi-Containern (`--with-hidden`) absolut identisch sind.
|
||||
|
||||
#### Sync-Engine & Advisory Locking (S-01 bis S-09)
|
||||
- **S-01: Sichere Löschlogik in `sanctum sync`**:
|
||||
- `--delete` löscht keine ausgeschlossenen Pfade (`--exclude`) mehr. Für das Löschen ausgeschlossener Dateien muss explizit `--delete-excluded` übergeben werden (analog zu rsync).
|
||||
- **S-02: Plattformunabhängiger Pfadzusammenbau**:
|
||||
- Robuste Zerlegung und Zusammenfügung relativer Pfade verhindert Path-Traversal auf Windows- und Unix-Systemen.
|
||||
- **S-03: Symlink-Erkennung & Zyklenschutz**:
|
||||
- Symlinks werden beim Sync erkannt, gezählt (`files_skipped_symlinks`) und nicht rekursiv verfolgt, um Endlosschleifen zu verhindern.
|
||||
- **S-04: TOCTOU-Beseitigung bei Dateigrößen**:
|
||||
- Die endgültige Knotengröße wird aus den tatsächlich geschriebenen Bytes (`bytes_written`) ermittelt statt aus vorherigen Metadaten.
|
||||
- **S-05: Sicheres Kürzen auf 0 Bytes**:
|
||||
- Beim Kürzen von Dateien auf 0 Bytes werden ausnahmslos alle Chunks kryptografisch geschreddert und aus der Datenbank entfernt.
|
||||
- **S-06: Container Advisory Lock**:
|
||||
- Verhindert gleichzeitiges Mounten und kollidierende Schreibzugriffe durch `sync`. Lock wird in Metadaten persistiert; Override via `--force`.
|
||||
- **S-07: Überspringen ungültiger Windows-Dateinamen**:
|
||||
- Reservierte Dateinamen (z. B. `aux.txt`, `con.dat`) werden im Sync übersprungen und gezählt (`files_skipped_invalid`), ohne den Vorgang abzubrechen.
|
||||
- **S-08: Präzisierung des Glob- und Pfad-Matchings**:
|
||||
- Vollständig dokumentiertes und gehärtetes Glob-Matching für Ausschlussregeln.
|
||||
- **S-09: Pull-Overwrite-Schutz & Konfliktsicherheit**:
|
||||
- Warnung und Schutzmechanismen vor unbeabsichtigtem Überschreiben lokaler Daten bei `sync pull`.
|
||||
|
||||
#### VFS, Anti-Leak Shield & Carrier (V-01 bis V-09, Z-04)
|
||||
- **V-01: CarrierFs-Dispatch im Carrier-Modus**:
|
||||
- `SanctumFs::copy` leitet im Trägermodus Kopieroperationen korrekt an das Trägerdateisystem weiter.
|
||||
- **V-02: Schutz vor stiller Dateikürzung bei fehlenden Chunks**:
|
||||
- Fehlt ein Datenblock innerhalb der erwarteten Dateigröße, wird ein harter E/A-Fehler (`EIO` / `DatabaseInconsistency`) ausgelöst statt stiller Kürzung auf 0 Bytes.
|
||||
- `SanctumFs::copy` delegiert Kopieroperationen im Alibi-/Trägermodus korrekt an das steganografische CarrierFs.
|
||||
- **V-02: Fehlerbehandlung bei fehlenden Chunks**:
|
||||
- Fehlt ein Datenblock innerhalb der erwarteten Dateigröße, wird ein harter E/A-Fehler (`FsError::GeneralFailure`) geworfen statt stiller Datenkürzung.
|
||||
- **V-03: RAII Memory Lock Guard**:
|
||||
- Eigener RAII-Guard im `Arc` stellt sicher, dass gesperrte Speicherseiten (`VirtualLock`) beim Klonen des VFS nicht vorzeitig freigegeben werden.
|
||||
- **V-04: Strukturierter Anti-Leak Shield & Custom Filterliste**:
|
||||
- Kategorisierte Filterung nach exakten Dateinamen, Präfixen (`~$*`, `._*`), Suffixen (`.tmp`, `.temp`, `.crdownload`, `.part`, `~*`), NTFS Alternate Data Streams (`:`) und `.trash*`.
|
||||
- Neues CLI-Flag `sanctum mount --anti-leak-list <FILE>` für anwenderspezifische Filterregeln sowie Statistik über gefilterte Dateien beim Unmount.
|
||||
- **V-05: Robuste Fehlerprotokollierung in `SanctumFile::drop`**:
|
||||
- Flush-Fehler beim Schließen von Dateien werden als `error!` geloggt und Flush wird bei `close` erzwungen.
|
||||
- **V-06: Sparse Writes**:
|
||||
- Lücken zwischen dem bisherigen Dateiende und dem Schreib-Offset werden automatisch mit Null-Bytes aufgefüllt.
|
||||
- **V-07: RFC-4918 konforme Overwrite-Semantik**:
|
||||
- Korrekte Behandlung von Overwrite-Headern und Verzeichnis-Konfliktprüfungen in `copy`.
|
||||
- **V-08: Einheitliche Pfadsicherheit**:
|
||||
- Tabulator-Steuerzeichen (0x09) werden in `validate_path_safety` konsistent abgewiesen.
|
||||
- **V-09: Chunk-Shredding vor Löschung**:
|
||||
- `truncate_chunks_after` schreddert vor dem Löschen alle betroffenen Chunks mit Zufallsdaten.
|
||||
- **Z-04: WebDAV Quota-Report**:
|
||||
- `SanctumFs::get_quota` meldet korrekte Containerbelegung und verfügbaren Host-Speicher.
|
||||
|
||||
#### Upgrade & Signaturprüfung (U-01 bis U-03)
|
||||
- **U-01: Striktes Pre-Hashing für Minisign**:
|
||||
- Minisign-Verifikation akzeptiert ausschließlich pre-gehashte Signaturen (`allow_legacy = false`).
|
||||
- **U-02: Versionsvalidierung im Trusted Comment**:
|
||||
- Validiert, dass die im signierten `trusted comment` hinterlegte Version exakt mit dem Release-Tag übereinstimmt (Replay-Schutz).
|
||||
- **U-03: Sekundärer Backup-Release-Schlüssel**:
|
||||
- Hinterlegung eines sekundären Public Keys für nahtlosen Schlüsselübergang bei Key-Rollover.
|
||||
|
||||
#### Plattform, Speichersicherheit & Dokumentation (M-02, M-03, M-04, Z-01, Z-02, Z-03)
|
||||
- **M-02: Ganzzahl-Überlaufschutz**:
|
||||
- `overflow-checks = true` im Release-Profil zur Abwehr von Integer-Overflows.
|
||||
- **M-03: Linux-Mount-Instruktionen**:
|
||||
- Transparente Ausgabe von WebDAV-Zugangsdaten und manuelle Mount-Befehle unter Linux.
|
||||
- **M-04: Bedrohungsmodell für Session-Tokens**:
|
||||
- Umfassende Dokumentation des Userland-Sicherheitsmodells und Prozessgrenzen in `THREAT_MODEL.md` und `README.md`.
|
||||
- **Z-01: Sicheres Decoy-Passwort-Zeroizing**:
|
||||
- Schutz des temporären Alibi-Passworts im Speicher via `Zeroizing<String>`.
|
||||
- **Z-02: Mutex-Poisoning-Resilienz**:
|
||||
- Automatische Erholung von vergifteten Mutexes bei Thread-Panics in SQLite-Verbindungen.
|
||||
- **Z-03: WAL- und SHM-Forensik-Dokumentation**:
|
||||
- Dokumentation über die flüchtige Existenz verschlüsselter WAL-/SHM-Dateien und Schredder-Mechanismen.
|
||||
|
||||
## [0.7.2] - 2026-09-18
|
||||
|
||||
|
||||
Reference in New Issue
Block a user