Broken Access Control ist seit 2021 die Schwachstelle Nummer eins in den OWASP Top 10. Jede dritte Webanwendung hat Autorisierungsprobleme — Benutzer greifen auf Daten zu, für die sie keine Berechtigung haben.
Was ist Broken Access Control¶
Zugriffskontrolle stellt sicher, dass Benutzer nur das tun können, wozu sie berechtigt sind. Broken Access Control tritt auf, wenn die Anwendung diese Prüfung nicht korrekt durchführt — Benutzer können fremde Daten ändern, auf Admin-Oberflächen zugreifen oder ihre Rechte eskalieren.
Typische Angriffe¶
- IDOR (Insecure Direct Object Reference): Änderung der ID in der URL — /api/users/123 → /api/users/456
- Forced Browsing: Direkter Zugriff auf /admin ohne Rollenprüfung
- Parameter Tampering: Änderung der Rolle im POST-Request — role=user → role=admin
- Path Traversal: Zugriff auf Dateien außerhalb des erlaubten Verzeichnisses
Beispiel für verwundbaren Code¶
// BAD — keine Eigentumsüberprüfung
app.get('/api/orders/:id', async (req, res) => {
const order = await Order.findById(req.params.id);
res.json(order);
});
// GOOD — Eigentumsüberprüfung
app.get('/api/orders/:id', async (req, res) => {
const order = await Order.findById(req.params.id);
if (!order || order.userId !== req.user.id) {
return res.status(403).json({ error: 'Forbidden' });
}
res.json(order);
});
Prävention¶
- Deny by Default — alles verboten, sofern nicht explizit erlaubt
- Autorisierungsprüfung auf dem Server, nie nur auf dem Client
- RBAC oder ABAC für Berechtigungsverwaltung verwenden
- Alle unautorisierten Zugriffsversuche protokollieren
- Automatisierte Autorisierungstests in CI/CD
Middleware-Pattern¶
const authorize = (allowedRoles) => { return (req, res, next) => { if (!req.user || !allowedRoles.includes(req.user.role)) { return res.status(403).json({ error: ‘Insufficient permissions’ }); } next(); }; }; app.delete(‘/api/users/:id’, authorize([‘admin’]), deleteUser);
Wichtigste Erkenntnis¶
Zugriffskontrolle gehört auf den Server. Jeder Endpoint muss prüfen, ob der aktuelle Benutzer berechtigt ist, die Aktion durchzuführen. Deny by Default, Versuche protokollieren, automatisch testen.