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
| Auswirkung | Details |
|---|---|
| Integrität | Bereich: Integrität Korrumpiert angrenzenden Speicher einschließlich Anwendungsdaten, Sicherheitsflags und Kontrollstrukturen. |
| Zugriffskontrolle | Bereich: Code-Ausführung Überschreiben von Rücksprungadressen, Funktionszeigern oder vtables ermöglicht beliebige Code-Ausführung. |
| Verfügbarkeit | Bereich: 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
-
MITRE. "CWE-787: Out-of-bounds Write." https://cwe.mitre.org/data/definitions/787.html
-
CWE Top 25. "2023 CWE Top 25 Most Dangerous Software Weaknesses." https://cwe.mitre.org/top25/