diff --git a/AGENTS.md b/AGENTS.md index 8286fb8..1905067 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -57,7 +57,7 @@ Die gesamte Genese dieses Projekts (Audit-Behebung aller 39 Findings, Carrier V2 | [`RELEASE_PROCESS.md`](RELEASE_PROCESS.md) | Multi-Platform CI/CD Release-Architektur, Toolchain-Pins und Minisign-Signierung | | [`QUICKSTART.md`](QUICKSTART.md) | Kompakte Schritt-für-Schritt-Anleitung für Endanwender | | [`INSTALL.md`](INSTALL.md) | Installationsanweisungen (Binaries, Scoop, WinGet, Cargo) | -| [`CHANGELOG.md`](CHANGELOG.md) | Keep-a-Changelog Versionshistorie (aktuell: v0.9.3) | +| [`CHANGELOG.md`](CHANGELOG.md) | Keep-a-Changelog Versionshistorie (aktuell: v0.9.4) | | [`deny.toml`](deny.toml) | Strikte Konfiguration für `cargo-deny` (Advisories, Bans, Lizenzen, Quellen) | | [`.gitea/workflows/release.yaml`](.gitea/workflows/release.yaml) | Automatisierte CI/CD Release-Pipeline für Windows & Linux musl | diff --git a/SECURITY_AUDIT.md b/SECURITY_AUDIT.md index 78bf810..728ed86 100644 --- a/SECURITY_AUDIT.md +++ b/SECURITY_AUDIT.md @@ -1,12 +1,13 @@ -# Sanctum Security Audit & Remediation Log (v0.9.3) +# Sanctum Security Audit & Remediation Log (v0.9.4) -Dieses Dokument fasst alle 39 Findings aus drei umfassenden externen Sicherheitsaudits sowie nachfolgende Härtungen zusammen, dokumentiert die angewandten Härtungsmaßnahmen, referenziert die jeweiligen Git-Commits und benennt die zugehörigen automatisierten Regressionstests. Abschnitt 5 dokumentiert die Formaterweiterung Carrier V2 (Paged Manifest) aus v0.9.0, Abschnitt 6 die Minor Issues aus v0.9.1, Abschnitt 7 den Recovery-MAC-Fix (R-NEW-1) aus v0.9.2 und Abschnitt 8 die Supply-Chain- und Secret-Audits aus v0.9.3. +Dieses Dokument fasst alle 39 Findings aus drei umfassenden externen Sicherheitsaudits sowie nachfolgende Härtungen zusammen, dokumentiert die angewandten Härtungsmaßnahmen, referenziert die jeweiligen Git-Commits und benennt die zugehörigen automatisierten Regressionstests. Abschnitt 5 dokumentiert die Formaterweiterung Carrier V2 (Paged Manifest) aus v0.9.0, Abschnitt 6 die Minor Issues aus v0.9.1, Abschnitt 7 den Recovery-MAC-Fix (R-NEW-1) aus v0.9.2, Abschnitt 8 die Supply-Chain- und Secret-Audits aus v0.9.3 und Abschnitt 9 die Format-V3 Systembindungshärtungen (F-01, F-02, F-03) aus v0.9.4. --- ## Audit-Zusammenfassung -- **Zielversion:** Sanctum v0.9.3 (Basis v0.9.2) +- **Status:** Vollständig gehärtet & verifiziert +- **Zielversion:** Sanctum v0.9.4 (Basis v0.9.3) - **Behobene Findings:** 39 / 39 (100%) Audit-Findings + R-NEW-1 - **Quality Gates:** `cargo fmt --check` (100% sauber), `cargo clippy --all-targets -- -D warnings` (0 Warnungen), `cargo-deny` (100% ok), `gitleaks` (0 Leaks) - **Container-Format:** Container-Format V3 mit kanonischer Metadaten-Authentifizierung (HMAC-SHA256) beim Mount und Chunk-Replay-Schutz (Generation-gebundenes AAD). @@ -163,6 +164,20 @@ Dieses Dokument fasst alle 39 Findings aus drei umfassenden externen Sicherheits - **Responsible Disclosure Policy (`SECURITY.md`):** - Einführung von `SECURITY.md` mit SLA (48h Reaktionszeit, 5 Tage Bewertung), Kontaktadresse (`security@pansi.eu`), Gitea Security Advisories Kanal und 90-Tage Embargo. +### 9. Sanctum v0.9.4 — Format-V3 Systembindung (F-01, F-02, F-03) +- **PendingRebuild-Bypass durch Restore-Token geschlossen (F-02, HIGH):** + - Verhindert, dass Angreifer durch Setzen von `metadata_mac = NULL` und `metadata_gen = 0` manipulierte Metadatenbäume stillschweigend beim Mount signieren lassen. + - Ein 32-Byte CSPRNG-Token (`restore_nonce`) wird ausschließlich bei `restore_header_backup` in `meta` hinterlegt. + - `mount` fordert zwingend `--rebuild-mac` oder eine interaktive Bestätigung (`"JA"` via `is_terminal()`). Ohne Token wird `NULL`-MAC als ungültig zurückgewiesen (`MetadataMacStatus::Invalid`). Nach Rebuild wird das Token gelöscht. +- **Chunk-Generation Replay-Attacke behoben (F-01, HIGH):** + - Der kanonische HMAC-SHA256 Transkript (`SANCTUM_META_MAC_V3`) bindet nun neben sortierten Knoten (`ORDER BY id ASC`) auch alle sortierten Chunk-Tupel (`ORDER BY node_id, chunk_index: node_id LE64 || chunk_index LE32 || generation LE64`). + - Ein Angreifer kann keine alten Chunk-Ciphertexte mit alter Generation wiederherstellen, selbst bei identischer Dateigröße. + - Transparente Migration für bestehende Container, deren alter Knoten-Transkript verifiziert (`MetadataMacStatus::LegacyValid`). +- **Atomares V2-to-V3 Upgrade (F-03, HIGH):** + - `upgrade_to_v3` läuft in einer atomaren SQLite-Transaktion mit Fail-Closed-Verhalten und Rollback bei Chunk-Fehlern. + - Sowohl Slot 0 als auch Slot 1 werden konsistent auf `version = 3` aktualisiert, um Korruption in Dual-Vault-Szenarien auszuschließen. + - Neuer Metadaten-MAC wird direkt im Upgrade-Lauf persistiert. + --- ## Verifikationsnachweis diff --git a/THREAT_MODEL.md b/THREAT_MODEL.md index 4216c6d..36809b3 100644 --- a/THREAT_MODEL.md +++ b/THREAT_MODEL.md @@ -1,6 +1,6 @@ # Threat Model & Sicherheitsarchitektur von Sanctum -Dieses Dokument beschreibt das Bedrohungsmodell, die Sicherheitsannahmen und die Schutzmechanismen von **Sanctum v0.9.3** im reinen Userland-Betrieb. +Dieses Dokument beschreibt das Bedrohungsmodell, die Sicherheitsannahmen und die Schutzmechanismen von **Sanctum v0.9.4** im reinen Userland-Betrieb. --- diff --git a/packages/scoop/sanctum.json b/packages/scoop/sanctum.json index 6747b9d..e7c0fcd 100644 --- a/packages/scoop/sanctum.json +++ b/packages/scoop/sanctum.json @@ -1,12 +1,12 @@ { - "version": "0.9.3", + "version": "0.9.4", "description": "Verschlüsselter Ein-Datei-Container unter Windows im reinen Userland via WebDAV", "homepage": "https://gitea.pansi.eu/harald/sanctum", "license": "MIT", "architecture": { "64bit": { - "url": "https://gitea.pansi.eu/harald/sanctum/releases/download/v0.9.3/sanctum-v0.9.3-windows-x86_64.zip", - "hash": "75611155008ed0ecd6e6bbbb77fc549c5884ecc5779ca3012e66852bbb3b729b", + "url": "https://gitea.pansi.eu/harald/sanctum/releases/download/v0.9.4/sanctum-v0.9.4-windows-x86_64.zip", + "hash": "28fb0ce43ab167930e8f98424dae263625b71085e3ee65052aba9fa57833e4b1", "bin": "sanctum.exe" } }, diff --git a/packages/winget/HaraldPansi.Sanctum.yaml b/packages/winget/HaraldPansi.Sanctum.yaml index e098c4d..87892c6 100644 --- a/packages/winget/HaraldPansi.Sanctum.yaml +++ b/packages/winget/HaraldPansi.Sanctum.yaml @@ -1,6 +1,6 @@ # yaml-language-server: $schema=https://aka.ms/winget-manifest.singleton.1.6.0.schema.json PackageIdentifier: HaraldPansi.Sanctum -PackageVersion: 0.9.3 +PackageVersion: 0.9.4 PackageName: Sanctum Publisher: Harald Pansi PublisherUrl: https://gitea.pansi.eu/harald @@ -18,7 +18,7 @@ Tags: - webdav - container - plausible-deniability -ReleaseNotesUrl: https://gitea.pansi.eu/harald/sanctum/releases/tag/v0.9.3 +ReleaseNotesUrl: https://gitea.pansi.eu/harald/sanctum/releases/tag/v0.9.4 Installers: - Architecture: x64 InstallerType: zip @@ -26,7 +26,7 @@ Installers: NestedInstallerFiles: - RelativeFilePath: sanctum.exe PortableCommandAlias: sanctum - InstallerUrl: https://gitea.pansi.eu/harald/sanctum/releases/download/v0.9.3/sanctum-v0.9.3-windows-x86_64.zip - InstallerSha256: 75611155008ed0ecd6e6bbbb77fc549c5884ecc5779ca3012e66852bbb3b729b + InstallerUrl: https://gitea.pansi.eu/harald/sanctum/releases/download/v0.9.4/sanctum-v0.9.4-windows-x86_64.zip + InstallerSha256: 28fb0ce43ab167930e8f98424dae263625b71085e3ee65052aba9fa57833e4b1 ManifestType: singleton ManifestVersion: 1.6.0