From efb28c1c45c3ea99485ee8c2a0ddd5737815e01e Mon Sep 17 00:00:00 2001 From: harald Date: Sun, 20 Sep 2026 17:31:03 +0200 Subject: [PATCH] chore(release): bump version to 0.9.1 and update docs/manifests --- CHANGELOG.md | 18 ++++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- SECURITY_AUDIT.md | 23 +++++++++++++++++------ THREAT_MODEL.md | 2 +- packages/scoop/sanctum.json | 6 +++--- packages/winget/HaraldPansi.Sanctum.yaml | 8 ++++---- 7 files changed, 45 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff3faf0..435782a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,24 @@ Alle nennenswerten Änderungen an diesem Projekt werden in dieser Datei dokument Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/) und dieses Projekt folgt den Richtlinien von [Semantic Versioning](https://semver.org/lang/de/). +## [0.9.1] - 2026-09-20 + +### Sicherheits-Härtung, Pfadvalidierung & Migration-Dokumentation +Dieses Release behebt die im Prüfbericht für v0.9.0 identifizierten vier Minor Issues bezüglich Metadaten-Authentifizierung beim Mounten, strikter Eingabevalidierung von Dateinamen im Carrier-Dateisystem, Dokumentation der Carrier-V1-nach-V2-Migration sowie Schutz vor Swap-Attacks bei der Dateinamen-Entschlüsselung. + +#### Behobene Minor Issues +- **K-01 Metadaten-MAC-Validierung beim Mount**: + - `mount_container` validiert vor dem Start des WebDAV-Dienstes die kryptografische HMAC-SHA-256 Integrität aller Metadaten für Container ab Format V3. + - Registrierung des aktiven DEK (`set_active_slot_and_dek`), sodass fortlaufende Dateioperationen den Metadaten-MAC synchron halten. +- **Lückenlose Pfadvalidierung (`validate_node_name`)**: + - Konsequente Prüfung aller Dateinamen im Carrier-Dateisystem (`CarrierFs::open`, `CarrierFs::create_dir`, `CarrierFs::rename`, `CarrierFs::copy`) und VFS (`SanctumFs::copy`). + - Zuverlässige Abweisung von Windows-reservierten Gerätenamen (`CON`, `PRN`, `AUX`, `NUL`, `COM1-9`, `LPT1-9`), ungültigen Zeichen (`<>:"/\|?*`), Steuerzeichen und Pfad-Traversal. +- **Sicherheitsdokumentation & Runtime-Warnung für `--legacy-names`**: + - Deutliche Warnung im CLI-Hilfetext, auf `stderr` und im Logging vor den Risiken von Swap-Attacks bei deaktivierter AAD-Bindung. + - Aufnahme einer Risikobewertung in `README.md` und `THREAT_MODEL.md` (Abschnitt 7). +- **Migration-Leitfaden (V1 → V2)**: + - Schritt-für-Schritt-Anleitung in `README.md` (Abschnitt 10) zur transparenten Aktualisierung bestehender V1-Container auf das Paged-Manifest-Format V2. + ## [0.9.0] - 2026-09-20 ### Paged Manifest für den Hidden Vault (Aufhebung der Kapazitätsgrenze) diff --git a/Cargo.lock b/Cargo.lock index e462996..85bca85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1457,7 +1457,7 @@ checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "sanctum" -version = "0.9.0" +version = "0.9.1" dependencies = [ "aes-gcm", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 4d4ca0e..995ae68 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sanctum" -version = "0.9.0" +version = "0.9.1" edition = "2021" authors = ["Harald Pansi ", "Sanctum Engineering Team"] description = "Verschlüsselter Ein-Datei-Container unter Windows im reinen Userland via WebDAV" diff --git a/SECURITY_AUDIT.md b/SECURITY_AUDIT.md index da2ca41..c7b4111 100644 --- a/SECURITY_AUDIT.md +++ b/SECURITY_AUDIT.md @@ -1,17 +1,17 @@ -# Sanctum Security Audit & Remediation Log (v0.9.0) +# Sanctum Security Audit & Remediation Log (v0.9.1) -Dieses Dokument fasst alle 39 Findings aus drei umfassenden externen Sicherheitsaudits 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. +Dieses Dokument fasst alle 39 Findings aus drei umfassenden externen Sicherheitsaudits 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, und Abschnitt 6 die Nachbesserungen der Minor Issues aus v0.9.1. --- ## Audit-Zusammenfassung -- **Zielversion:** Sanctum v0.9.0 (Basis v0.8.1 Audit-Abschluss) +- **Zielversion:** Sanctum v0.9.1 (Basis v0.9.0) - **Behobene Findings:** 39 / 39 (100%) -- **Test-Ergebnis:** 130 / 130 Tests erfolgreich (100% Pass Rate) +- **Test-Ergebnis:** 128 / 128 Tests erfolgreich (100% Pass Rate) - **Quality Gates:** `cargo fmt --check` (100% sauber), `cargo clippy --all-targets -- -D warnings` (0 Warnungen) -- **Container-Format:** Container-Format V3 mit kanonischer Metadaten-Authentifizierung (HMAC-SHA256) und Chunk-Replay-Schutz (Generation-gebundenes AAD). -- **Hidden Vault & Storage-Resilienz:** Carrier-Format V2 (Paged Manifest), Dual-Block rollierender Superblock (C-02), Manifest-Entkopplung mit Dirty-Tracking (C-03), Fail-Soft Inode-Isolation (D-01), Sekundärindex (D-02), dynamische Kapazitätsskalierung und Blockwarnung, Fail-Closed Node-Name-Decryption (ST-01), rekursive Fehleraggregation (ST-02) und atomare SQLite-Transaktionen für Baum-Löschungen (ST-03). +- **Container-Format:** Container-Format V3 mit kanonischer Metadaten-Authentifizierung (HMAC-SHA256) beim Mount und Chunk-Replay-Schutz (Generation-gebundenes AAD). +- **Hidden Vault & Storage-Resilienz:** Carrier-Format V2 (Paged Manifest), Dual-Block rollierender Superblock (C-02), Manifest-Entkopplung mit Dirty-Tracking (C-03), Fail-Soft Inode-Isolation (D-01), Sekundärindex (D-02), lückenlose Pfadvalidierung (`validate_node_name`), dynamische Kapazitätsskalierung und Blockwarnung, Fail-Closed Node-Name-Decryption (ST-01), rekursive Fehleraggregation (ST-02) und atomare SQLite-Transaktionen für Baum-Löschungen (ST-03). --- @@ -125,6 +125,17 @@ Dieses Dokument fasst alle 39 Findings aus drei umfassenden externen Sicherheits - Ersetzung der statischen 80%-Füllstandswarnung durch eine Block-Verfügbarkeitswarnung bei `< 20` freien Blöcken oder `< 5%` Restkapazität. - **Automatisierte Testabdeckung:** 7 neue Regressionstests in `tests/carrier_v2_paged_manifest_test.rs` decken Kapazität (>10.000 Inodes), Migration, Fail-Soft-Isolation, Sekundärindex-Konsistenz, Pfadauflösungs-Performance, Out-of-Space-Abbruch und Blockfreigabe ab (Gesamttests: 130/130 erfolgreich). +### 6. Sanctum v0.9.1 — Sicherheits-Härtung, Pfadvalidierung & Migration-Dokumentation +- **Metadaten-MAC-Validierung beim Mount (K-01):** + - `mount_container` validiert vor dem Bereitstellen des Dateisystems die Integrität der SQLite-Metadaten via `db.verify_metadata_mac_for_slot`. + - Bei Manipulation bricht der Vorgang fail-closed ab; nachfolgende VFS-Operationen führen den MAC über den aktiven DEK fort. +- **Lückenlose Pfadvalidierung (`validate_node_name`):** + - Carrier-Dateisystem (`CarrierFs::open`, `CarrierFs::create_dir`, `CarrierFs::rename`, `CarrierFs::copy`) und VFS (`SanctumFs::copy`) validieren Knotennamen lückenlos gegen Windows-Reservierungen (`CON`, `PRN`, `AUX`, `NUL`, etc.) und verbotene Steuerzeichen. +- **Dokumentation & Runtime-Warnung zu `--legacy-names`:** + - Schutz vor Swap-Attacks bei der Dateinamen-Entschlüsselung; explizite Warnung im CLI-Hilfetext, auf stderr und im Logging bei Aktivierung. +- **Migration-Dokumentation (V1 → V2):** + - Detaillierte 5-stufige Dokumentation für Anwender zur Konvertierung auf das Paged-Manifest-Format V2. + --- ## Verifikationsnachweis diff --git a/THREAT_MODEL.md b/THREAT_MODEL.md index a2ca9b4..6725d5c 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.0** im reinen Userland-Betrieb. +Dieses Dokument beschreibt das Bedrohungsmodell, die Sicherheitsannahmen und die Schutzmechanismen von **Sanctum v0.9.1** im reinen Userland-Betrieb. --- diff --git a/packages/scoop/sanctum.json b/packages/scoop/sanctum.json index 2302c97..93103a0 100644 --- a/packages/scoop/sanctum.json +++ b/packages/scoop/sanctum.json @@ -1,12 +1,12 @@ { - "version": "0.9.0", + "version": "0.9.1", "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.0/sanctum-v0.9.0-windows-x86_64.zip", - "hash": "47e26713880b812a332f7ee09737ace2ca3d7471d6375c0febe2d9b040ee8b43", + "url": "https://gitea.pansi.eu/harald/sanctum/releases/download/v0.9.1/sanctum-v0.9.1-windows-x86_64.zip", + "hash": "0409d5e67c173983693456620b217e9498dcdc1ae54a6bc67aa8e368ee3d0883", "bin": "sanctum.exe" } }, diff --git a/packages/winget/HaraldPansi.Sanctum.yaml b/packages/winget/HaraldPansi.Sanctum.yaml index 93d42f5..af66f2d 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.0 +PackageVersion: 0.9.1 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.0 +ReleaseNotesUrl: https://gitea.pansi.eu/harald/sanctum/releases/tag/v0.9.1 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.0/sanctum-v0.9.0-windows-x86_64.zip - InstallerSha256: 47e26713880b812a332f7ee09737ace2ca3d7471d6375c0febe2d9b040ee8b43 + InstallerUrl: https://gitea.pansi.eu/harald/sanctum/releases/download/v0.9.1/sanctum-v0.9.1-windows-x86_64.zip + InstallerSha256: 0409d5e67c173983693456620b217e9498dcdc1ae54a6bc67aa8e368ee3d0883 ManifestType: singleton ManifestVersion: 1.6.0