Eins hochzĂ€hlen genĂŒgt

đ Was beobachte ich?
Eine App sammelt Ausweise zur AltersprĂŒfung und legt die Bilder an URLs ab, die schlicht durchnummeriert sind. Wer eine Mitglieds-ID um eins erhöht, sieht den nĂ€chsten Pass. Keine Anmeldung, keine PrĂŒfung, wer da zugreift. Genau das ist im Juni beim Cannabis-Club-Dienstleister Nefos bekannt geworden.
đŻ Was soll eigentlich erreicht werden?
Das Ziel ist legitim: Altersverifikation und Mitgliederverwaltung. Schon das Mittel ist fragwĂŒrdig â vollstĂ€ndige Ausweise zu sammeln, setzt in Deutschland etwa das Personalausweisgesetz enge Grenzen, und fĂŒr den reinen Altersnachweis gĂ€be es lĂ€ngst die eID. Doch das eigentliche Versagen liegt woanders.
â ïž Warum funktioniert das nicht?
Weil hier keine exotische LĂŒcke zuschlĂ€gt, sondern grobe FahrlĂ€ssigkeit. Knapp 986.000 Ausweisfotos und 924.000 Pass- und Ausweisnummern lagen an vorhersehbaren, ungeschĂŒtzten Adressen â ein Lehrbuchfall von Broken Access Control, in der OWASP Top 10 2025 unverĂ€ndert auf Platz 1. Dazu IDOR (Insecure Direct Object Reference): jedes fremde Profil per ZĂ€hler abrufbar. Und ein Stripe-SchlĂŒssel im Klartext in der App. Das ist kein Pech und kein raffinierter Angriff, sondern das Auslassen von Grundlagen, die seit zwanzig Jahren bekannt sind.
đĄ Was funktioniert besser?
Jeder Objektzugriff gehört serverseitig autorisiert â nicht erraten aus einer hochzĂ€hlbaren ID. Und der wirksamste Schutz bleibt: Daten, die ich nicht erhebe, kann ich nicht verlieren. Wer hochsensible IdentitĂ€tsdaten sammelt, schuldet mehr als das Minimum â alles andere ist fahrlĂ€ssig.
đđ
- Nearly a million passports and photo IDs were left unprotected (The Verge) https://www.theverge.com/tech/947157/passports-data-breach-cannabis-club-systems-nefos-puffpal
- OWASP Top 10:2025 â A01: Broken Access Control https://owasp.org/Top10/2025/A01_2025-Broken_Access_Control/
- OWASP API Security Top 10 â API1:2023 Broken Object Level Authorization https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/