[Security] Auth-Hardening: Timing-Attack, fehlendes Rate-Limit #13

Closed
opened 2026-05-27 12:21:04 +02:00 by ferdi2go · 1 comment
Owner

Probleme

a) Timing-Attack auf Passwort-Vergleichserver.py:85

if payload.get("password") != APP_PASSWORD:

String-!= ist nicht zeitkonstant.

b) Kein Rate-Limit auf /loginserver.py:81-89
Unbegrenzte Versuche moeglich. Kurze Passwoerter (aktuell 3 Zeichen) in Sekunden brute-forceable.

Fix

import secrets
if not secrets.compare_digest(payload.get("password", ""), APP_PASSWORD):
    ...

Einfaches In-Memory-Rate-Limit pro IP (5/min) oder slowapi.

## Probleme **a) Timing-Attack auf Passwort-Vergleich** — `server.py:85` ```python if payload.get("password") != APP_PASSWORD: ``` String-`!=` ist nicht zeitkonstant. **b) Kein Rate-Limit auf `/login`** — `server.py:81-89` Unbegrenzte Versuche moeglich. Kurze Passwoerter (aktuell 3 Zeichen) in Sekunden brute-forceable. ## Fix ```python import secrets if not secrets.compare_digest(payload.get("password", ""), APP_PASSWORD): ... ``` Einfaches In-Memory-Rate-Limit pro IP (5/min) oder slowapi.
ferdi2go added the securitypriority: high labels 2026-05-27 12:21:04 +02:00
Author
Owner

Fix umgesetzt in server.py:

  • secrets.compare_digest() fuer Passwort-Vergleich
  • In-Memory-Rate-Limit: max. 5 Versuche/Minute pro IP, sonst HTTP 429

Manueller Test: 5 falsche Versuche -> 6. Versuch liefert 429.

Fix umgesetzt in `server.py`: - `secrets.compare_digest()` fuer Passwort-Vergleich - In-Memory-Rate-Limit: max. 5 Versuche/Minute pro IP, sonst HTTP 429 Manueller Test: 5 falsche Versuche -> 6. Versuch liefert 429.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ferdi2go/OnlyFrames#13