Was passierte am Freitagmorgen?
Am Freitagmorgen wurden weltweit Windows-Computer in Unternehmen und Behörden durch ein fehlerhaftes Update des IT-Security-Anbieters CrowdStrike lahmgelegt. Flughäfen, Banken, Geschäfte, Krankenhäuser – alle waren betroffen. Ein einziges Chaos!
Die Ursache: Ein klassischer Programmierfehler
Nun gibt es erste Analysen des Speicherfehlers, der den berüchtigten Blue Screen of Death (BSOD) verursachte. Der IT-Experte Zach Vorhies nahm das Speicherabbild unter die Lupe und veröffentlichte seine Analyse auf X (ehemals Twitter). Seine Untersuchung legt nahe, dass der Fehler auf ein grundlegendes Versagen bei der Programmierung der CrowdStrike-Software zurückzuführen ist.
Konkret handelt es sich um einen sogenannten Null-Pointer-Fehler in einem offenbar in C++ geschriebenen Treiber von CrowdStrike. Der Code versuchte, auf eine ungültige Speicheradresse (0x9c bzw. 156) zuzugreifen, ohne vorher zu prüfen, ob diese existiert.
In C++ wird die Adresse 0x0 als Null-Pointer verwendet, um anzuzeigen, dass kein gültiges Objekt vorhanden ist. Eine typische Prüfung, die sicherstellt, dass der Pointer nicht null ist, bevor auf ihn zugegriffen wird, könnte so aussehen:
string* p = get_name();
if (p == NULL) {
print("Could not get name");
}
Im Fall von CrowdStrike wurde diese Prüfung offenbar versäumt. Der Fehler führte dazu, dass der Code versuchte, auf eine ungültige Speicheradresse zuzugreifen, was zum Systemabsturz führte. Da der Treiber bei jedem Start des Rechners geladen wurde, hingen die betroffenen Computer in einer Reboot-Schleife fest und mussten manuell im abgesicherten Modus repariert werden.
C++: Segen oder Fluch?
Die veraltete Programmiersprache C++ scheint in diesem Fall eine entscheidende Rolle gespielt zu haben. In C++ müssen Programmierer explizit prüfen, ob ein Zeiger gültig ist. Wird diese Prüfung vergessen, kann es zu Null Pointer Dereferences kommen – dem Zugriff auf einen ungültigen Speicherbereich. Moderne Programmiersprachen wie Rust verhindern solche Fehler durch strikte Überprüfungen zur Compile-Zeit. Bei C++ liegt die Verantwortung jedoch beim Programmierer.
Mangelnde Qualitätssicherung
Dass ein solch fundamentaler Programmierfehler den Weg in ein produktives Update finden konnte, wirft kein gutes Licht auf die Qualitätssicherung bei CrowdStrike. Offenbar fehlten Prüfmechanismen, die solche Fehler frühzeitig erkennen.
Dabei ist CrowdStrike kein Newcomer, sondern ein erfahrener, weltweit tätiger Anbieter von Sicherheitssoftware. Umso erstaunlicher ist es, dass den Entwicklern ein derart schwerwiegender Fehler unterlaufen konnte. CrowdStrike-CEO George Kurtz war zuvor CTO bei McAfee. Auch dort kam es 2010 zu einem fehlerhaften Update, das weltweit Windows-XP-Rechner lahmlegte. Man hätte erwarten können, dass Kurtz aus dieser Erfahrung gelernt hat.
Schadensersatz für Betroffene?
Für die betroffenen Kunden stellt sich nun die Frage nach Schadensersatz. Fluggesellschaften, Krankenhäuser und Einzelhändler dürften allein durch die Ausfälle am Freitag Schäden in Millionenhöhe erlitten haben. Hinzu kommen die Kosten für die Behebung der Schäden. Auch die mittelbar Betroffenen, etwa Reisende, die ihren Flug verpasst haben, dürften sich jetzt fragen, wer für ihren Schaden aufkommt. Eine mögliche Anlaufstelle zur Prüfung von Schadenersatzansprüchen ist die Flugärger-App der Verbraucherzentrale NRW.
Nicht nur Windows betroffen
Wer jetzt meint, das Problem hätte nur Windows betreffen können, irrt. Schon im April ist etwas Ähnliches Linux widerfahren. Am 19. April veröffentlichte CrowdStrike ein Update für die Software falcon-sensor, die mit der Linuxdistribution Debian Stable inkompatibel war. Dies führte zum Absturz aller Server eines städtischen Tech-Labors. Der Fehler wurde durch Überprüfung der Festplattenprotokolle entdeckt. Durch manuelle Deinstallation konnten die Maschinen wieder booten, aber eine erneute Installation führte erneut zu Abstürzen. CrowdStrike benötigte mehrere Tage, um den Fehler zu bestätigen.
Fazit: Qualität statt Quantität!
Dieser Vorfall unterstreicht die immense Bedeutung sorgfältiger Programmierung und gründlichen Testens, insbesondere bei systemkritischer Software wie Sicherheitstreibern. CrowdStrike wird wahrscheinlich ihre Qualitätssicherungsprozesse überprüfen und verbessern müssen, um ähnliche Vorfälle in Zukunft zu verhindern. Eine Abkehr von C++ und der Einsatz moderner Programmiersprachen sowie verschärfte Qualitätssicherungsmaßnahmen wären das Mindeste.
Also, liebe Entwickler: Das nächste Mal bitte nicht die Null wählen!
