Falsche Standardberechtigungen

Beschreibung

Falsche Standardberechtigungen treten auf, wenn Software Dateien, Verzeichnisse oder andere Ressourcen mit Berechtigungen installiert, die permissiver als notwendig sind, und sie damit unbeabsichtigten Akteuren aussetzt. Häufige Manifestationen umfassen welt-schreibbare ausführbare Dateien, Konfigurationsdateien, die von allen Benutzern lesbar sind, und Verzeichnisse mit übermäßig permissivem Zugang. Wenn kritische Dateien falsche Berechtigungen haben, können lokale Angreifer sensible Daten lesen, ausführbare Dateien modifizieren, um bösartigen Code einzuschleusen, oder Privilegien durch Ausnutzung von setuid/setgid-Binaries mit schwachen Berechtigungen eskalieren.

Risiko

Falsche Standardberechtigungen sind eine bedeutende Quelle für lokale Privilegieneskalationsschwachstellen. Welt-schreibbare ausführbare Dateien ermöglichen jedem lokalen Benutzer, bösartigen Code einzuschleusen, der mit den Privilegien des Dateieigentümers läuft. Konfigurationsdateien mit sensiblen Anmeldedaten werden für unbefugte Benutzer zugänglich. In Multi-Tenant-Umgebungen ermöglichen unsachgemäße Berechtigungen mandantenübergreifenden Datenzugriff. Setuid/setgid-Programme mit schwachen Berechtigungen sind besonders gefährlich - Angreifer können sie modifizieren, um beliebigen Code mit erhöhten Privilegien auszuführen. Diese Schwachstellenklasse wurde in zahlreichen Privilegieneskalationsangriffen über Windows-, Linux- und macOS-Systeme hinweg ausgenutzt.

Lösung

Wenden Sie das Prinzip der geringsten Privilegien auf alle Datei- und Verzeichnisberechtigungen an. Setzen Sie restriktive Berechtigungen während der Installation - Dateien sollten nur von beabsichtigten Benutzern lesbar/schreibbar/ausführbar sein. Setzen Sie niemals welt-schreibbare Berechtigungen auf ausführbare Dateien. Verwenden Sie angemessene umask-Werte während der Installation. Für Konfigurationsdateien, die Anmeldedaten enthalten, beschränken Sie den Zugang nur auf das besitzende Dienstkonto. Auditieren Sie regelmäßig Dateiberechtigungen auf Konfigurationsdrift. Verwenden Sie Sicherheits-Benchmarks (CIS) für plattformspezifische Berechtigungsrichtlinien. Testen Sie Installationen mit Berechtigungsprüfungstools.

Häufige Auswirkungen

AuswirkungDetails
VertraulichkeitBereich: Informationsoffenlegung

Übermäßig permissive Leseberechtigungen legen sensible Daten einschließlich Anmeldedaten, Schlüsseln und Konfigurationsdetails offen.
IntegritätBereich: Code-Injection

Schreibberechtigungen auf ausführbaren Dateien ermöglichen Angreifern, bösartigen Code einzuschleusen, der mit den Privilegien des Dateieigentümers ausgeführt wird.
ZugriffskontrolleBereich: Privilegieneskalation

Die Modifikation von setuid/setgid-Binaries oder Konfigurationsdateien ermöglicht Privilegieneskalation zu root/Administrator.

Beispielcode + Lösungscode

Anfälliger Code

# ANFÄLLIG: Installationsskript mit welt-schreibbaren Berechtigungen
#!/bin/bash
mkdir -p /opt/myapp
cp myapp /opt/myapp/
cp config.ini /opt/myapp/

# Welt-schreibbare ausführbare Datei - jeder Benutzer kann modifizieren!
chmod 777 /opt/myapp/myapp

# Welt-lesbare Konfiguration mit Anmeldedaten
chmod 644 /opt/myapp/config.ini
# Konfiguration enthält: DB_PASSWORD=secret123
# ANFÄLLIG: Dateien mit unsicheren Berechtigungen erstellen
import os

def save_credentials(username, password):
    # Standard-umask kann welt-lesbare Datei erstellen
    with open('/etc/myapp/credentials', 'w') as f:
        f.write(f"{username}:{password}")
    # Datei ist für jeden lesbar!

def create_log_directory():
    # Welt-schreibbares Verzeichnis - Symlink-Angriffe möglich
    os.makedirs('/var/log/myapp', mode=0o777, exist_ok=True)
// ANFÄLLIG: Setuid-Binary mit schwachen Berechtigungen erstellen
#include <sys/stat.h>

int install_helper() {
    // Binary kopieren
    copy_file("helper", "/usr/local/bin/helper");

    // Setuid-Bit setzen ABER Berechtigungen erlauben welt-schreiben!
    chmod("/usr/local/bin/helper", S_ISUID | S_IRWXU | S_IRWXG | S_IRWXO);
    // Jeder Benutzer kann jetzt diese setuid-Binary modifizieren!

    return 0;
}

Korrigierter Code

# SICHER: Restriktive Berechtigungen
#!/bin/bash

# Verzeichnis mit eingeschränkten Berechtigungen erstellen
install -d -m 755 -o root -g root /opt/myapp

# Ausführbare Datei: Eigentümer ausführen, kein Schreiben für andere
install -m 755 -o root -g root myapp /opt/myapp/

# Konfiguration mit Anmeldedaten: nur Eigentümer
install -m 600 -o myapp -g myapp config.ini /opt/myapp/

# Berechtigungen verifizieren
ls -la /opt/myapp/
import os
import stat

# SICHER: Restriktive Dateierstellung
def save_credentials(username, password):
    filepath = '/etc/myapp/credentials'

    # Verzeichnis mit eingeschränkten Berechtigungen erstellen
    os.makedirs('/etc/myapp', mode=0o700, exist_ok=True)

    # Restriktive umask setzen vor Dateierstellung
    old_umask = os.umask(0o077)
    try:
        with open(filepath, 'w') as f:
            f.write(f"{username}:{password}")
    finally:
        os.umask(old_umask)

    # Berechtigungen verifizieren und durchsetzen
    os.chmod(filepath, stat.S_IRUSR | stat.S_IWUSR)  # 0600

def create_log_directory():
    # Verzeichnis nur vom Eigentümer schreibbar
    os.makedirs('/var/log/myapp', mode=0o755, exist_ok=True)
    # Log-Dateien sollten nur-anhängen für Dienstbenutzer sein
#include <sys/stat.h>
#include <unistd.h>

// SICHER: Ordnungsgemäße setuid-Binary-Installation
int install_helper_safe() {
    const char *path = "/usr/local/bin/helper";

    // Binary kopieren
    copy_file("helper", path);

    // Zuerst ordnungsgemäßes Eigentum setzen
    chown(path, 0, 0);  // root:root

    // Setuid mit KEINEN Schreibberechtigungen für Gruppe/Ändere
    // S_ISUID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH = 4755
    chmod(path, S_ISUID | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);

    // Berechtigungen verifizieren
    struct stat st;
    stat(path, &st);
    if (st.st_mode & S_IWGRP || st.st_mode & S_IWOTH) {
        // Immer noch schreibbar - Installation fehlschlagen lassen
        unlink(path);
        return -1;
    }

    return 0;
}

Ausgenutzt in der Praxis

BackTrack Linux btinstall (BackTrack, 2012)

CVE-2012-5697 im BackTrack Linux Installationsskript setzte welt-schreibbare Berechtigungen auf alle Dateien in /frameworkgui/, was lokale Privilegieneskalation ermöglichte.

Schneider Electric Harmony/Magelis (Industrie, 2021)

CVE-2021-22817 in der Schneider Electric Industrie-PC-Serie ermöglichte unbefugten Zugriff aufgrund falscher Standardberechtigungen auf dem Basis-Installationsverzeichnis.

Samsung Mobile Firmware (Samsung, 2025)

Kritische Schwachstellen in Samsung Mobile Firmware bezüglich falscher Standardberechtigungen, mit veröffentlichten Zero-Day-Exploits.


Tools zum Testen/Ausnutzen

  • LinPEAS — Fehlkonfigurierte Berechtigungen auf Linux enumerieren.

  • WinPEAS — Schwache Berechtigungen auf Windows enumerieren.

  • unix-privesc-check — UNIX-Dateiberechtigungen auditieren.


CVE-Beispiele


Referenzen

  1. MITRE. "CWE-276: Incorrect Default Permissions." https://cwe.mitre.org/data/definitions/276.html

  2. CIS Benchmarks. "File Permission Guidelines." https://www.cisecurity.org/benchmark/