diff --git a/backend/src/controllers/fileDownload.controller.ts b/backend/src/controllers/fileDownload.controller.ts index eb949931..c5f31975 100644 --- a/backend/src/controllers/fileDownload.controller.ts +++ b/backend/src/controllers/fileDownload.controller.ts @@ -78,7 +78,21 @@ export async function downloadFile(req: AuthRequest, res: Response): Promise` + bestehendes `X-Content-Type- + Options: nosniff`. Browser lädt jetzt herunter statt zu rendern, + selbst wenn der Type stimmt. Filename wird auf + `[A-Za-z0-9._-]` gesäubert. + - **30.14 SSRF Private-IP-Block opt-in** (INFO): Neuer Env-Flag + `SSRF_BLOCK_PRIVATE_IPS=true` erweitert die SSRF-Block-Liste auf + 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, ::1, + fc00::/7 + IPv4-mapped Varianten + Hostnamen "localhost"/ + "ip6-localhost". Default off, damit On-Prem-Installationen + (Plesk/Dovecot auf 127.0.0.1) nicht brechen. Cloud-Deployments + setzen den Flag. + - **Live-verifiziert** auf dev: + - Upload + Download: Header zeigt + `Content-Disposition: attachment; filename="…"` + + `X-Content-Type-Options: nosniff` + - Default-ssrfGuard: 127.0.0.1 / 10.x / 192.168.x / localhost → false + (durchgelassen für on-prem); 169.254.169.254 → true (Cloud- + Metadata weiter geblockt) + - Mit `SSRF_BLOCK_PRIVATE_IPS=true`: alle privaten Ranges → true; + 8.8.8.8 (legit public) → false + - [x] **🛡️ Pentest 2026-05-20 Pen-29-Befunde (LOW/INFO)** - **28.1 Restarbeit**: `DANGEROUS_URI_SCHEMES` jetzt vollständig – `blob:`, `about:`, `ws:`, `wss:`, `ldap:`, `dict:` ergänzt. Bewusst