Sendungsverfolgung baut ihre Datenbankabfrage aus ungeprüften Eingaben
Repository shop-backend · TrackingController.php (Sendungsverfolgung, ohne Anmeldung)
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Beschreibung
Eine kürzliche Änderung am Formular für die Sendungsverfolgung fügt die eingegebene Sendungsnummer direkt in die Datenbankabfrage ein. Das Formular braucht keine Anmeldung, also kann jeder Besucher die Abfrage erweitern und Tabellen lesen, die er nie sehen dürfte. Das Datenbankkonto dahinter darf nur lesen, deshalb lässt sich nichts verändern.
Reproduktion
- Das Formular für die Sendungsverfolgung im Shop ohne Anmeldung öffnen.
- Den Code verfolgen: Die eingegebene Sendungsnummer landet direkt in der Datenbankabfrage.
- Im Testsystem bestätigen, dass eine speziell geformte Sendungsnummer Zeilen aus der Kundentabelle liefert.
TrackingController.php:41
$sql = "SELECT … WHERE tracking_no = '" . $input . "'";
Datenbankkonto: shop_read (nur lesen) Geschäftliche Auswirkung
Jeder im Internet kann Adressen und Bestellhistorie aller Kunden kopieren: eine Datenpanne, die nach DSGVO binnen 72 Stunden gemeldet werden muss. Vor dem Release im Code gefunden, kostet die Behebung eine Zeile.
Empfehlung
Für die Sendungsnummer eine parametrisierte Abfrage nutzen und das erwartete Format prüfen. Den Code nach weiteren Abfragen durchsuchen, die aus Eingaben zusammengesetzt werden. Eine automatische Codeprüfung in den Build aufnehmen, die solche Abfragen meldet.
OWASP Top 10 2021: A03 Injection · CWE-89 (SQL Injection) · OWASP ASVS 4.0 V5.3