Pentest 2026-05-20 Pen-28-Befunde (LOW/INFO)
28.1 URI-Schema unvollstaendig: DANGEROUS_URI_SCHEMES erweitert um file:/ftp: – "ftp://evil.com/x.js" und "file:///etc/passwd" wurden vorher in companyName akzeptiert. 28.2 HTML-Entity-Decoding-Bypass: stripHtml() lief direkt ueber den Roh-String, "javascript:", "<script>" und "<script>" umgingen die Regex. decodeHtmlEntities() dekodiert jetzt numerische (decimal+hex) + gaengige named entities VOR dem Tag-/URI-Strip. 28.3 Vollmacht-Upload Magic-Byte-Check: multer pruefte nur client-MIME, HTML/PHP/Shell-Scripts kamen als application/pdf durch. uploadAuthorizationDocument liest jetzt die ersten 5 Bytes und verlangt "%PDF-", sonst Loeschen + 400. 28.4 Rate-Limit auf /api/public/consent: 30 Requests pro IP pro 15min. Brute-Force-sicher war der 128-bit- UUID-Hash schon, aber ohne Limit konnte ein Angreifer das System mit Audit-Log- und Mail-Spam belasten. Live-verifiziert auf dev: alle vier Bypaesse blockiert, legitime Eingaben unangetastet. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -120,6 +120,40 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
- **Live-verifiziert**: 4867 Datensätze + 1 Datei in 13.2s
|
||||
wiederhergestellt, Log-Modal zeigt den vollständigen Verlauf.
|
||||
|
||||
- [x] **🛡️ Pentest 2026-05-20 Pen-28-Befunde (LOW/INFO)**
|
||||
- **28.1 URI-Schema unvollständig**: `DANGEROUS_URI_SCHEMES`-Regex
|
||||
erweitert um `file:` und `ftp:`. `ftp://evil.com/x.js` und
|
||||
`file:///etc/passwd` in companyName werden jetzt zu
|
||||
`blocked://...` bzw. `blocked:///...` neutralisiert.
|
||||
- **28.2 HTML-Entity-Decoding-Bypass**: `stripHtml` lief vorher
|
||||
direkt über den Roh-String, sodass `javascript:`,
|
||||
`<script>` und `<script>` an der Regex
|
||||
vorbeischlüpften. Neuer `decodeHtmlEntities()` läuft VOR dem
|
||||
Strip und dekodiert numerische (`&#NN;`/`&#xHH;`) + gängige
|
||||
Named-Entities (lt/gt/quot/apos/amp). Danach greift die normale
|
||||
Tag- und URI-Säuberung wieder.
|
||||
- **28.3 Vollmacht-Upload Magic-Byte-Check**: multer prüfte nur
|
||||
den client-gemeldeten MIME-Type, eine HTML/PHP-Datei als
|
||||
`application/pdf` kam durch. Neuer Check liest die ersten 5
|
||||
Bytes nach dem Upload und verlangt `%PDF-` – sonst wird die
|
||||
Datei gelöscht und 400 geliefert. Greift bevor irgendwas in
|
||||
der DB landet.
|
||||
- **28.4 Rate-Limit auf /api/public/consent**: 30 Requests pro
|
||||
IP pro 15 Minuten. Brute-Force-sicher war der 128-Bit-UUID-Hash
|
||||
schon, aber ohne Limit konnte ein Angreifer das System per
|
||||
POST-Spam mit Audit-Logs und Mail-Versand belasten. Neuer
|
||||
`publicConsentRateLimiter` greift jetzt auf alle drei
|
||||
Sub-Routes (`/:hash`, `/:hash/grant`, `/:hash/pdf`).
|
||||
- **Live-verifiziert** auf dev:
|
||||
- `ftp://evil.com/x.js` → `blocked://evil.com/x.js`
|
||||
- `file:///etc/passwd` → `blocked:///etc/passwd`
|
||||
- `javascript:alert(1)` → `blocked:alert(1)`
|
||||
- `<script>alert(1)</script>OK` → `OK`
|
||||
- `<script>bad()</script>Legit` → `Legit`
|
||||
- HTML-Datei als PDF hochgeladen → 400 + Datei gelöscht
|
||||
- Echtes PDF (Magic-Bytes ok) → 200
|
||||
- 35× POST auf public-consent → Req 1–30 = 404, Req 31+ = 429
|
||||
|
||||
- [x] **🧹 Pentest 2026-05-20 LOW/INFO-Sammelfix**
|
||||
- **27.1 Path-Traversal-Strings in DB**: `cleanupConsents` validierte
|
||||
`documentPath` zuvor nur per stripHtml, was `../../../etc/passwd`
|
||||
|
||||
Reference in New Issue
Block a user