Out-of-bounds Write

Beschreibung

Out-of-bounds Write ist eine Schwachstelle, die auftritt, wenn Software Daten an einen Speicherort außerhalb der beabsichtigten Grenzen eines Puffers schreibt. Dies kann durch Buffer Overflows, inkorrekte Array-Indizierung, Zeigerarithmetik-Fehler oder Integer Overflows auftreten, die Größenberechnungen beeinflussen. Out-of-bounds Writes sind extrem gefährlich, da sie angrenzende Daten korrumpieren, Kontrollflussinformationen (Rücksprungadressen, Funktionszeiger) überschreiben, Sicherheitsflags ändern oder Heap-Metadaten korrumpieren können. Diese Schwachstelle rangiert konsistent als eine der gefährlichsten Software-Schwächen aufgrund ihres direkten Pfads zu beliebiger Code-Ausführung.

Risiko

Out-of-bounds Writes gehören zu den ausnutzbarsten und gefährlichsten Schwachstellenklassen. Sie ermöglichen direkte Speicherkorruption, die Angreifer für Code-Ausführung durch Rücksprungadressen-Überschreibung, vtable-Korruption oder Heap-Exploitation-Techniken nutzen. Die Schwachstelle betrifft kritische Software einschließlich Betriebssysteme, Browser, Netzwerkdienste und eingebettete Systeme. Remote Code Execution durch Out-of-bounds Writes hat große Malware-Kampagnen und APT-Angriffe ermöglicht. Die 2021 CWE Top 25 ordnete Out-of-bounds Write als #1 gefährlichste Software-Schwäche ein.

Lösung

Validieren Sie immer Schreibgrenzen vor Pufferoperationen. Verwenden Sie sichere Funktionen mit expliziten Größenparametern (snprintf, strncpy, memcpy mit validierten Größen). Setzen Sie C++ Container (std::vector, std::string) ein, die Grenzen automatisch verwalten. Aktivieren Sie Compiler-Schutzmassnahmen: Stack Canaries, ASLR, DEP, CFI. Verwenden Sie AddressSanitizer und Speicher-Debugging-Tools während der Entwicklung. Implementieren Sie Integer-Overflow-Prüfungen vor Größenberechnungen. Erwägen Sie speichersichere Sprachen (Rust, Go) für neue Entwicklung.

Häufige Auswirkungen

AuswirkungDetails
IntegritätBereich: Integrität

Korrumpiert angrenzenden Speicher einschließlich Anwendungsdaten, Sicherheitsflags und Kontrollstrukturen.
ZugriffskontrolleBereich: Code-Ausführung

Überschreiben von Rücksprungadressen, Funktionszeigern oder vtables ermöglicht beliebige Code-Ausführung.
VerfügbarkeitBereich: Verfügbarkeit

Speicherkorruption verursacht häufig Abstürze; Angreifer können absichtlich Denial of Service verursachen.

Beispielcode + Lösungscode

Verwundbarer Code

// VERWUNDBAR: Out-of-bounds Write über benutzergesteuerten Index
void update_score(int *scores, int index, int value) {
    scores[index] = value;  // Keine Bounds-Prüfung - beliebiges Schreiben
}

// VERWUNDBAR: Integer Overflow in Größenberechnung
void copy_data(char *dest, char *src, unsigned int count) {
    unsigned int size = count * sizeof(int);  // Overflow möglich
    memcpy(dest, src, size);  // Schreibt über dest hinaus
}

Gefixter Code

#include <stdint.h>
#include <stdbool.h>

// SICHER: Bounds-geprüftes Schreiben
bool update_score(int *scores, size_t scores_size, size_t index, int value) {
    if (index >= scores_size) {
        return false;  // Bounds-Prüfung fehlgeschlagen
    }
    scores[index] = value;
    return true;
}

// SICHER: Integer Overflow-Schutz
bool copy_data_safe(char *dest, size_t dest_size, char *src, size_t count) {
    // Auf Integer Overflow prüfen
    if (count > SIZE_MAX / sizeof(int)) {
        return false;
    }
    size_t size = count * sizeof(int);

    // Ziel-Bounds prüfen
    if (size > dest_size) {
        return false;
    }

    memcpy(dest, src, size);
    return true;
}

Ausgenutzt in der Praxis

EternalBlue/WannaCry (Windows SMB, 2017)

CVE-2017-0144 war ein Out-of-bounds Write in Windows SMB, der den verheerenden WannaCry-Ransomware-Angriff ermöglichte, der über 200.000 Systeme in 150 Ländern betraf und Milliardenschäden verursachte.

Chrome V8 Type Confusion (Chrome, Mehrere)

Mehrere Out-of-bounds Write-Schwachstellen in Chromes V8-Engine wurden in der Praxis für Remote Code Execution gegen Browser-Benutzer ausgenutzt.


Tools zum Testen/Ausnutzen

  • AddressSanitizer - erkennt Out-of-bounds Writes zur Laufzeit.

  • AFL++ - Coverage-gesteuerter Fuzzer zum Entdecken von Speicherkorruption.

  • libFuzzer - In-Process-Fuzzing für Speichersicherheitstests.


CVE-Beispiele

  • CVE-2017-0144 - EternalBlue SMB Out-of-bounds Write ermöglichte WannaCry.

  • CVE-2021-21224 - Chrome V8 Type Confusion führte zu Out-of-bounds Write.


Referenzen

  1. MITRE. "CWE-787: Out-of-bounds Write." https://cwe.mitre.org/data/definitions/787.html

  2. CWE Top 25. "2023 CWE Top 25 Most Dangerous Software Weaknesses." https://cwe.mitre.org/top25/