Fremde Bestellungen sichtbar durch Ändern der Bestellnummer
api.admin-soehne.example · /v2/orders/{id}
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
Beschreibung
Die Shop-API liefert jedem angemeldeten Nutzer eine Bestellung aus, ohne zu prüfen, ob sie ihm gehört. Bestellnummern sind fortlaufend: Wer seine eigene Nummer um eins erhöht, sieht Name, Adresse und Einkäufe eines fremden Kunden. Mit derselben Anfrage lässt sich auch dessen Lieferadresse ändern.
Reproduktion
- Als Testkunde A anmelden und eine eigene Bestellung öffnen.
- In der Anfrage der App die eigene Bestellnummer durch eine Nummer von Testkunde B ersetzen.
- Die API liefert die vollständige Bestellung von Kunde B statt einer Fehlermeldung.
GET /v2/orders/100482 HTTP/2
Host: api.admin-soehne.example
Authorization: Bearer <Token von Kunde A>
HTTP/2 200
{"id":100482,"customer":"<Kunde B>","address":"…"} Geschäftliche Auswirkung
Wer ein kostenloses Kundenkonto anlegt, kann nacheinander alle jemals aufgegebenen Bestellungen lesen und Pakete an eine andere Adresse umleiten. Das ist eine Datenpanne, die nach DSGVO binnen 72 Stunden gemeldet werden muss, und ein direkter Weg zu Paketdiebstahl.
Empfehlung
Serverseitig bei jeder Anfrage prüfen, ob die Bestellung dem angemeldeten Kunden gehört, sonst „nicht gefunden“ antworten. Dieselbe Prüfung für alle Objekte der API (Rechnungen, Adressen, Retouren). Automatisierte Tests, die mit einem zweiten Testkonto fremde Daten abzurufen versuchen.
OWASP API Security Top 10 2023: API1 Broken Object Level Authorization · CWE-639 (Authorization Bypass Through User-Controlled Key)