dms/upload: MIME-Sniff gegen deklarierten Typ statt gegen Positivliste (Office/TIFF-Uploads) #401

Merged
patrick merged 1 commits from fix/dms-upload-sniff into main 2026-10-28 11:32:04 +01:00
Owner

Fehler

Seit DOC-01 (0d524fc7, 2026-10-19) prueft upload.Service.Complete den mit http.DetectContentType erkannten Typ gegen dieselbe Positivliste wie den deklarierten Typ. Die Funktion meldet docx/xlsx als application/zip, TIFF und alte Office-Formate als application/octet-stream, SVG/XML als text/xml, HTML als text/html - nichts davon steht in einer ueblichen Allowlist. Bei konfigurierter Allowlist wurden Office-Dokumente und TIFF-Scans abgelehnt (auf main sichtbar als qa03/qa06-Fehler).

Aenderung

Validator.ValidateSniffed(sniffed, declared): gleicher Typ oder bekannte vertraegliche Zuordnung (Tabelle sniffAccepts): zip -> OOXML/ODF/zip, octet-stream -> tiff und alte Office-Typen, text/xml -> xml/svg/text, text/html -> html/text, reiner Text (text/plain) unter jedem deklarierten Typ. Alles andere (z. B. PDF deklariert, aber ZIP/HTML/PNG-Inhalt) bleibt abgelehnt. Ohne Positivliste wird nicht gefiltert (wie bisher). Entscheidung des Users: Vertraeglichkeitstabelle.

Auswirkungen (Pflicht-Review)

  • Sicherheitsverhalten: der Sniff bleibt eine Pruefung auf Fehldeklaration, erlaubt aber die genannten Zuordnungen. Binaerinhalt mit unbekannter Signatur wird nur noch fuer tiff/alte Office-Typen akzeptiert; beliebiger Binaerinhalt unter application/pdf bleibt abgelehnt.
  • Aufrufer ausserhalb von upload unveraendert.

Tests

Neue Tabelle validate_sniff_test.go. Auf 204 gegen Wegwerf-Postgres: upload, qa03, qa06, documentapi ok (vorher qa03 und qa06 rot auf main).

🤖 Generated with Claude Code

## Fehler Seit DOC-01 (`0d524fc7`, 2026-10-19) prueft `upload.Service.Complete` den mit `http.DetectContentType` erkannten Typ gegen dieselbe Positivliste wie den deklarierten Typ. Die Funktion meldet docx/xlsx als `application/zip`, TIFF und alte Office-Formate als `application/octet-stream`, SVG/XML als `text/xml`, HTML als `text/html` - nichts davon steht in einer ueblichen Allowlist. Bei konfigurierter Allowlist wurden Office-Dokumente und TIFF-Scans abgelehnt (auf main sichtbar als qa03/qa06-Fehler). ## Aenderung `Validator.ValidateSniffed(sniffed, declared)`: gleicher Typ oder bekannte vertraegliche Zuordnung (Tabelle `sniffAccepts`): zip -> OOXML/ODF/zip, octet-stream -> tiff und alte Office-Typen, text/xml -> xml/svg/text, text/html -> html/text, reiner Text (text/plain) unter jedem deklarierten Typ. Alles andere (z. B. PDF deklariert, aber ZIP/HTML/PNG-Inhalt) bleibt abgelehnt. Ohne Positivliste wird nicht gefiltert (wie bisher). Entscheidung des Users: Vertraeglichkeitstabelle. ## Auswirkungen (Pflicht-Review) - Sicherheitsverhalten: der Sniff bleibt eine Pruefung auf Fehldeklaration, erlaubt aber die genannten Zuordnungen. Binaerinhalt mit unbekannter Signatur wird nur noch fuer tiff/alte Office-Typen akzeptiert; beliebiger Binaerinhalt unter `application/pdf` bleibt abgelehnt. - Aufrufer ausserhalb von `upload` unveraendert. ## Tests Neue Tabelle `validate_sniff_test.go`. Auf 204 gegen Wegwerf-Postgres: `upload`, `qa03`, `qa06`, `documentapi` ok (vorher qa03 und qa06 rot auf main). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick added 1 commit 2026-10-28 10:26:17 +01:00
dms/upload: Sniff-Ergebnis gegen deklarierten Typ pruefen statt gegen die Positivliste
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
4e16d8b155
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
patrick merged commit 4d790fe925 into main 2026-10-28 11:32:04 +01:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: scripte/nexarch#401