From c0e8e4ecfd5d51f5b97b7e6be397aeb505f7ef9c Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Mon, 24 Aug 2026 11:02:50 +0200 Subject: [PATCH] =?UTF-8?q?docs(d4):=20Security-Triage=20abgeschlossen=20?= =?UTF-8?q?=E2=80=94=20ARCH-027=20verifiziert=20(SECRET=5FKEY-Fail=20berei?= =?UTF-8?q?ts=20implementiert=20und=20strenger=20als=20gefordert),=20BUG-0?= =?UTF-8?q?19=20=3D=200=20echte=20hardcoded=20Secrets=20(Entropie-Wert-Sca?= =?UTF-8?q?n),=20BUG-020=20=3D=20kein=20fixbares=20Finding=20(alle=20f-str?= =?UTF-8?q?ing-SQL-Interpolationen=20aus=20Whitelists/Config,=20kein=20Use?= =?UTF-8?q?r-Input-Fluss)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROGRESS.md | 5 ++++- docs/test-bugs.md | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/PROGRESS.md b/PROGRESS.md index e9889ec..284a46b 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -77,7 +77,10 @@ | D3-d | Systemischer P1-Bug: DMS/Mail überschrieben get_entity_models() nicht → 'dms_file'/'dms_folder'/'file'/'mail_account' fehlten im ENTITY_MODELS-Mapping → ValueError bei allen Entity-Freigaben/Berechtigungen zur Laufzeit (28 Mail-Test-Failures + 2 test_permissions-Failures, Stash-verifiziert) | ✅ Overrides ergänzt (DMS: dms_file/dms_folder/file-Alias; Mail: mail_account); test_permissions 22/22 grün; Resolver-Auflösung aller 4 Typen direkt bewiesen | — | | D3-e | conftest db_setup: pgvector-Extension fehlte nach DB-Recreate → alle create_all-Läufe scheiterten an 'type vector does not exist' | ✅ CREATE EXTENSION IF NOT EXISTS vector in db_setup-Fixture verankert (nach CREATE SCHEMA, vor alembic upgrade head) | — | | D3-f | BUG-027–029/031–035/071 (falsche Test-Pfade/Payloads): Recherche zeigte — falsche Pfade existieren NICHT mehr in tests/, reale API hat korrekte Prefixe (/api/v1/user/preferences, /api/v1/permissions, /api/v1/mail) | ✅ Als obsolet/bereits behoben dokumentiert | — | -| D3-g | ARCH-051: 14 dict-body-Routes auf Pydantic-Schemas umgestellt (entity_permissions bulk ×2, guests invite, users menu-order, system_settings backup-config+dsar, knowledge ×3, self_improvement ×5); dabei DSAR-Export F821-Bug behoben (datetime/timezone undefined → NameError zur Laufzeit beim GDPR-Export) und Zeitstempel auf datetime.now(UTC)-Konvention umgestellt | ✅ ruff exit=0 auf allen 6 Dateien; create_app OK (559 routes); 0 verbleibende body: dict in gepatchten Dateien; Validierung jetzt im Schema statt in Routen (AGENTS.md-Konvention) | — | +| D3-g | ARCH-051: 14 dict-body-Routes auf Pydantic-Schemas umgestellt (entity_permissions bulk ×2, guests invite, users menu-order, system_settings backup-config+dsar, knowledge ×3, self_improvement ×5); dabei DSAR-Export F821-Bug behoben (datetime/timezone undefined → NameError zur Laufzeit beim GDPR-Export) und Zeitstempel auf datetime.now(UTC)-Konvention umgestellt | ✅ ruff exit=0 auf allen 6 Dateien; create_app OK (559 routes); 0 verbleibende body: dict in gepatchten Dateien; Validierung jetzt im Schema statt in Routen (AGENTS.md-Konvention) | c32e4bb | +| D4-a | ARCH-027 SECRET_KEY Production-Fail: Verifiziert bereits implementiert UND strenger als gefordert — get_settings() lehnt Default-Key UND <32-Zeichen-Keys Import-zeitig in ALLEN Umgebungen ab (RuntimeError) | ✅ Direkter Verifikationstest: Default-Key → RuntimeError 'SECRET_KEY must be changed from default value' beim Modul-Import (Traceback-Beweis); Tests setzen gültigen Key im conftest | — | +| D4-b | BUG-019 453 hardcoded Secrets: Präziser Entropie-Wert-Scan (≥16-Zeichen-Literals an secret-ish Namen, Placeholder gefiltert) | ✅ 0 echte hardcoded Secret-Werte — alle Treffer sind Nutzungs-Muster (hash_password, Token-Generierung, Schema-Felder); Triage-Tabelle in test-bugs.md | — | +| D4-c | BUG-020 288 SQLi-Risiken: Cluster-Analyse → 10 f-string-SQL + 2 String-Konkatenationen; alle Interpolationen aus Whitelists (_TABLE_MAP, tables-Dicts mit Guard) oder int-Config (hnsw_ef_search) — kein User-Input-Fluss | ✅ Kein fixbares Finding; agent_memory type_filter statisch+parameterisiert; Triage in test-bugs.md dokumentiert | — | **Block A ABGESCHLOSSEN** — Gate A bestanden (32f63ad). **Block B ABGESCHLOSSEN** — Gate B bestanden (alle 5 Checks bewiesen). diff --git a/docs/test-bugs.md b/docs/test-bugs.md index 77c63f2..b22f4ed 100644 --- a/docs/test-bugs.md +++ b/docs/test-bugs.md @@ -212,7 +212,7 @@ Jeder Bug wird wie folgt dokumentiert: - **Tatsächlich:** 453 Treffer für password/secret/api_key/token in app/ - **Schweregrad:** Medium - **Hinweis:** Die meisten sind legitime Verwendungen (password hashing, token generation, etc.) — manuelle Überprüfung nötig -- **Status:** ⏳ Nicht gefixt — manuelle Überprüfung nötig +- **Status:** ✅ Triage 2026-08-24 (Block D/D4): Präziser Entropie-Wert-Scan (Literals ≥16 Zeichen an secret-ish Namen, Placeholder gefiltert) = **0 echte hardcoded Secret-Werte**. Alle 453 Treffer sind Nutzungs-Muster (hash_password-Aufrufe, Token-Generierung, Pydantic-Schema-Feldnamen, Docstrings). Kein Handlungsbedarf. ### BUG-020: 288 Potential SQL Injection Risiken - **Kategorie:** Security @@ -220,7 +220,7 @@ Jeder Bug wird wie folgt dokumentiert: - **Tatsächlich:** 288 Treffer für execute(f"..."), execute(+...), text(...) - **Schweregrad:** Medium - **Hinweis:** Die meisten sind wahrscheinlich parameterized queries — manuelle Überprüfung nötig -- **Status:** ⏳ Nicht gefixt — manuelle Überprüfung nötig +- **Status:** ✅ Triage 2026-08-24 (Block D/D4): Auf 10 f-string-SQL-Stellen + 2 String-Konkatenationen reduziert (Rest = parameterisierte text()-Aufrufe). Alle interpolierten Werte verifiziert OHNE User-Input-Fluss: unified_search routes/jobs nutzen hardcoded Whitelist-Dicts (`tables`, `tag_tables`, `date_tables`, `_TABLE_MAP` mit `.get()`+None-Guard), hnsw.ef_search nutzt int-Config-Wert, agent_memory type_filter ist statischer String mit parameterisiertem :mtype-Wert. **Kein fixbares Finding** — Muster ist sicher. ### BUG-021: 165 Hardcoded Strings (i18n) - **Kategorie:** Frontend / i18n