Unsachgemäße Rechteverwaltung

Beschreibung

Unsachgemäße Rechteverwaltung tritt auf, wenn ein Produkt Rechte für Akteure (Benutzer, Prozesse oder Systeme) nicht ordnungsgemäß zuweist, ändert, verfolgt oder prüft. Dies umfasst die fehlende Einschränkung des Zugangs zu privilegierten Funktionen, die unzureichende Validierung von Rechteanforderungen vor der Ausführung sensibler Operationen und das Ermöglichen unautorisierter Rechteeskalation. Wenn die Rechteverwaltung fehlerhaft ist, können Benutzer mit niedrigeren Rechten auf Funktionen zugreifen, die Administratoren vorbehalten sind, oder reguläre Prozesse können Zugang auf Systemebene erlangen.

Risiko

Unsachgemäße Rechteverwaltung ist eine kritische Schwachstellenklasse, die direkt unautorisierten Zugang und Rechteeskalation ermöglicht. In Webanwendungen ermöglicht fehlerhafte Rollenverwaltung Angreifern, sich bei der Registrierung selbst die Administratorrolle zuzuweisen. In Betriebssystemen und Datenbanken ermöglichen unsachgemäße Rechteprüfungen Benutzern, Befehle als Root/Administrator auszuführen. Für kritische Infrastruktursysteme können Fehler in der Rechteverwaltung Angreifern die volle Kontrolle über industrielle Prozesse geben. Diese Schwachstelle ermöglicht konstant die schwerwiegendsten Angriffsergebnisse: vollständige Systemkompromittierung, Datenverstoss und Dienststörung.

Lösung

Implementieren Sie eine robuste rollenbasierte Zugriffskontrolle (RBAC) mit expliziten Rechteprüfungen für alle sensiblen Operationen. Validieren Sie Rechteanforderungen serverseitig; vertrauen Sie niemals vom Client bereitgestellten Rolleninformationen. Verwenden Sie Allowlist-Ansätze für die Rechtezuweisung -- Standard ist minimaler Zugang. Auditieren Sie alle rechteändernden Operationen. Implementieren Sie Funktionstrennung für kritische Funktionen. Überprüfen und auditieren Sie Benutzerrechte regelmäßig. Verwenden Sie sichere Standardwerte, die minimalen Zugang gewähren. Testen Sie Rechtegrenzen durch Sicherheitsbewertungen mit Fokus auf Autorisierungsumgehung.

Häufige Auswirkungen

AuswirkungDetails
ZugriffskontrolleBereich: Rechteeskalation

Angreifer erhalten Zugang zu administrativen Funktionen und ermöglichen damit die vollständige Systemkontrolle.
IntegritätBereich: Datenmanipulation

Erhöhte Rechte ermöglichen die Änderung kritischer Daten, Konfigurationen und Sicherheitseinstellungen.
VertraulichkeitBereich: Unautorisierter Datenzugriff

Administrativer Zugang ermöglicht die Einsicht in alle Daten, einschließlich der Informationen anderer Benutzer und Systemgeheimnisse.

Beispielcode und Lösung

Verwundbarer Code

// VERWUNDBAR: Rollenzuweisung aus Benutzereingabe
function register_user($username, $password, $role) {
    // Angreifer kann role='admin' bei der Registrierung übergeben!
    $user = [
        'username' => $username,
        'password' => password_hash($password, PASSWORD_DEFAULT),
        'role' => $role  // Benutzergesteuertes Recht!
    ];
    save_user($user);
}

// VERWUNDBAR: Clientseitige Rechteprüfung
function delete_all_users() {
    // Rollenprüfung erfolgt in JavaScript, nicht serverseitig
    // Angreifer kann API direkt aufrufen
    $users = get_all_users();
    foreach ($users as $user) {
        delete_user($user['id']);
    }
}
# VERWUNDBAR: Rechteprüfung basierend auf benutzergelieferten Daten
@app.route('/admin/users/<id>/delete', methods=['DELETE'])
def delete_user(id):
    # Liest Rolle aus Session-Cookie (vom Benutzer änderbar)
    role = request.cookies.get('role')

    if role == 'admin':  # Angreifer kann Cookie fälschen
        User.query.filter_by(id=id).delete()
        return 'Deleted'
    return 'Forbidden', 403

# VERWUNDBAR: Insecure Direct Object Reference + Rechte
@app.route('/api/user/<id>/make_admin', methods=['POST'])
def make_admin(id):
    # Keine Prüfung, ob der aktuelle Benutzer Rechte ändern darf
    user = User.query.get(id)
    user.role = 'admin'
    db.session.commit()
    return 'OK'

Sichere Lösung

// SICHER: Serverseitig kontrollierte Rollenzuweisung
function register_user($username, $password) {
    // Rolle wird immer auf Standard gesetzt, niemals aus Benutzereingabe
    $user = [
        'username' => $username,
        'password' => password_hash($password, PASSWORD_DEFAULT),
        'role' => 'user'  // Immer Standardrolle
    ];
    save_user($user);
}

// Rolle kann nur von einem bestehenden Admin erhöht werden
function elevate_user_role($admin_id, $target_user_id, $new_role) {
    // Prüfen, ob Admin tatsächlich Admin ist (serverseitige Prüfung)
    $admin = get_user($admin_id);
    if ($admin['role'] !== 'admin') {
        throw new UnauthorizedException();
    }

    // Neue Rolle validieren
    if (!in_array($new_role, ['user', 'moderator', 'admin'])) {
        throw new InvalidRoleException();
    }

    // Rechteänderung für Audit protokollieren
    audit_log("Role change: {$admin_id} changed {$target_user_id} to {$new_role}");

    update_user_role($target_user_id, $new_role);
}
from functools import wraps

# SICHER: Decorator für Rechteverifizierung
def require_admin(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        # Benutzer aus sicherer Session holen (nicht aus Cookies)
        user_id = session.get('user_id')
        if not user_id:
            return 'Unauthorized', 401

        # Tatsächliche Rolle aus der Datenbank nachschlagen
        user = User.query.get(user_id)
        if not user or user.role != 'admin':
            return 'Forbidden', 403

        return f(*args, **kwargs)
    return decorated

@app.route('/admin/users/<id>/delete', methods=['DELETE'])
@require_admin  # Serverseitige Rechteprüfung
def delete_user(id):
    User.query.filter_by(id=id).delete()
    audit_log(f"User {session['user_id']} deleted user {id}")
    return 'Deleted'

@app.route('/api/user/<id>/make_admin', methods=['POST'])
@require_admin
def make_admin(id):
    # Prüfen, ob der Anfragende Rechte erhöhen darf
    current_user = User.query.get(session['user_id'])
    if current_user.role != 'super_admin':
        return 'Only super admins can create admins', 403

    user = User.query.get(id)
    user.role = 'admin'
    db.session.commit()
    audit_log(f"Privilege escalation: {current_user.id} made {id} admin")
    return 'OK'

Ausgenutzt in der Praxis

WordPress Opal Estate Pro (WordPress, 2025)

CVE-2025-6934 (CVSS 9.8 Kritisch) im WordPress Opal Estate Pro Plugin ermöglicht nicht authentifizierten Angreifern die Registrierung als Administratoren aufgrund unsachgemäßer Rolleneinschränkung im Registrierungsprozess.

Fortinet-Produkte Rechteeskalation (Fortinet, 2025)

CVE-2025-22254 betrifft FortiOS, FortiProxy und FortiWeb und ermöglicht authentifizierten Read-Only-Admin-Benutzern, Super-Admin-Rechte durch manipulierte WebSocket-Anfragen zu erlangen.

Schneider Electric Saitel DR RTU (Industrie, 2025)

CVE-2025-8453 (CVSS 8.4) ermöglicht privilegierten Ingenieuren die Eskalation zu Root durch unsachgemäße Sudoers-Konfiguration in industriellen Steuerungssystemen.


Tools zum Testen und Ausnutzen

  • Burp Suite -- Autorisierung und Rechtegrenzen testen.

  • OWASP ZAP -- automatisiertes Scannen auf Rechteeskalation.

  • AuthMatrix -- Burp-Erweiterung für Autorisierungstests.


CVE-Beispiele


Referenzen

  1. MITRE. "CWE-269: Improper Privilege Management." https://cwe.mitre.org/data/definitions/269.html

  2. OWASP. "Access Control." https://owasp.org/www-community/Access_Control