Analyse des WebP-0day
(blog.isosceles.com)- Die einzige Sicherheitskorrektur im stabilen Chrome-Update, CVE-2023-4863, ist ein Heap-Buffer-Overflow in der WebP-Bildbibliothek; Google gab an, dass bereits ein Exploit in freier Wildbahn existiert
- Apples Meldung vom 6. September 2023 durch SEAR, Apples CVE-2023-41064 und die Hinweise rund um BLASTPASS von Citizen Lab deuten stark darauf hin, dass es sich um denselben Bug handeln könnte
- Die Schwachstelle wurde als Problem analysiert, bei dem während des Aufbaus der Huffman-Tabelle für die verlustfreie WebP-Komprimierung VP8L über die vorab berechnete Puffergröße hinaus geschrieben werden konnte
- Dass gewöhnliches Fuzzing den Fehler leicht übersehen konnte, lag an den heiklen Trigger-Bedingungen: Mehrere Huffman-Tabellen maximaler Größe und eine bestimmte ungültige Tabelle mussten in genau dieser Reihenfolge erzeugt werden
- Der upstream-Patch für libwebp wirkt ausreichend, aber da libwebp breit in Browsern, Betriebssystemen und Apps eingesetzt wird, sind Patch-Verbreitung und Sandboxing entscheidend
Warum der Chrome-Patch mit BLASTPASS zusammenhängt
- Google behob Anfang September 2023 im stabilen Chrome-Update CVE-2023-4863, gemeldet von Apple Security Engineering and Architecture (SEAR)
- Die Schwachstelle ist ein Heap-Buffer-Overflow in der WebP-Bildbibliothek
- Google erklärte, man wisse von einem „Exploit für CVE-2023-4863, der in freier Wildbahn existiert“
- Zur selben Zeit entdeckte Citizen Lab verdächtiges Verhalten auf dem iPhone einer Person aus einer in Washington, DC ansässigen zivilgesellschaftlichen Organisation
- BLASTPASS wird mit einem iMessage-Zero-Click-Zero-Day-Exploit in Verbindung gebracht, der die Pegasus-Spyware der NSO Group verteilte
- Nachdem Citizen Lab die Ergebnisse seiner technischen Analyse an Apple weitergegeben hatte, veröffentlichte Apple am 7. September in einer Sicherheitsmitteilung zwei CVEs
- Apples erste CVE, CVE-2023-41061, passt zu Hinweisen darauf, dass ein Bild-Exploit in einen PassKit-Anhang eingebettet wurde, um die BlastDoor-Sandbox von iMessage zu umgehen
- Das bösartige Bild scheint in einem anderen Prozess ohne Sandbox verarbeitet worden zu sein
- Die zweite CVE, CVE-2023-41064, ist eine Buffer-Overflow-Schwachstelle in Apple ImageIO
- ImageIO ist Apples Framework zum Parsen von Bildern, das verschiedene Bildformate erkennt und an den passenden Decoder weiterleitet
- Mangels technischer Details ist nicht bekannt, welches Bildformat von CVE-2023-41064 betroffen ist
- Da Apple ImageIO erst kürzlich WebP-Unterstützung hinzugefügt hatte, Apples Sicherheitsteam am 6. September eine WebP-Schwachstelle an Chrome meldete und Google innerhalb von fünf Tagen einen Notfall-Patch veröffentlichte und die Lücke als aktiv ausgenutzt markierte, ist es sehr wahrscheinlich, dass BLASTPASS und CVE-2023-4863 derselbe Bug sind
Wohin der libwebp-Patch auf die Schwachstelle zeigt
- Vergleicht man die Bug-ID aus der Chrome-Sicherheitsmitteilung mit dem Open-Source-Commit in libwebp, entspricht der Patch Fix OOB write in BuildHuffmanTable CVE-2023-4863
- Der Patch wurde am 7. September 2023 erstellt, also einen Tag nach Apples Meldung
- Die Schwachstelle steckt in VP8L, WebPs Unterstützung für verlustfreie Komprimierung
- Die verlustfreie WebP-Komprimierung verwendet Huffman coding, um Pixel mit 100% Genauigkeit zu speichern und wiederherzustellen
- Moderne Implementierungen optimieren das Decoding mit Tabellen statt mit einer konzeptionellen Baumstruktur
- Die verwundbare Version allokierte Speicher anhand einer vorab berechneten Puffergröße aus festen Tabellen und baute dann die Huffman-Tabelle direkt in diesen Bereich
- Die neue Version berechnet in einem ersten Durchlauf die insgesamt für die Ausgabetabelle nötige Größe, schreibt dabei aber noch nichts
- Wenn die Gesamtgröße die vorab berechnete Puffergröße übersteigt, wird stattdessen eine größere Allokation erzeugt
- Der zentrale Ablauf betrifft
huffman_tables, das inReadHuffmanCodesinsrc/dec/vp8l_dec.callokiert wird, sowie die Aufrufe vonVP8LBuildHuffmanTable/BuildHuffmanTableinReadHuffmanCode- Die Huffman-Tabelle ist in fünf Segmente mit unterschiedlichen Alphabetgrößen aufgeteilt
- Um den Overflow auszulösen, mussten alle fünf Tabellen gezielt konstruiert werden
Wie die Trigger-Datei erzeugt wurde
- Die verlustfreie WebP-Komprimierung weist auf Grundlage einer Häufigkeitsanalyse der Eingabepixel häufigen Werten kurze Bitfolgen und seltenen Werten lange Bitfolgen zu
- Die Codes sind so konstruiert, dass der Decoder die Bitfolgenlängen stets unterscheiden kann
- Das komprimierte Bild muss statistische Informationen und Angaben zur Code-Zuweisung enthalten, damit sich die Zuordnung von Codes zu Werten rekonstruieren lässt
- WebP komprimiert auch die Huffman-Tabellen selbst wieder mit Huffman coding, um die Dateigröße zu verringern
- Dadurch wurde die Analyse und das Triggern der Schwachstelle kompliziert
@mistymntncopstellte Harness-Code bereit, der formal gültige WebP-Dateien mit beliebigen Huffman-coding-Daten, also code lengths, erzeugt- Mit diesem Harness ließ sich ein beliebiges
code_lengths-Array an den gewünschten Aufruf vonBuildHuffmanTableübergeben
- Mit diesem Harness ließ sich ein beliebiges
- Bei manuellen Experimenten war das Zusammenspiel zwischen dem Histogramm innerhalb von
BuildHuffmanTable,num_open,num_nodesund demkey-Wert, der die Startposition vonReplicateValueverfolgt, äußerst komplex- Die Root-Tabelle von
count[0]biscount[8]hat keinen direkt großen Einfluss auftotal_size, kann aber spätere interne Zustände verändern - Die Second-Level-Tabellen von
count[9]biscount[15]wirken sich direkt auf die endgültigetotal_sizeaus
- Die Root-Tabelle von
- Mark Adlers enough.c gibt für Alphabetgröße, Root-Tabellengröße und maximale Code-Länge das Histogramm der maximal möglichen Lookup-Tabelle eines Huffman-Baums aus
- In einem Kommentar steht, dass libwebps
kTableSizemit diesem Tool berechnet wurde - Mit dem Tool ließ sich die vorab berechnete Puffergröße reproduzieren, und mit dem Werkzeug von
@mistymntncopwurde bestätigt, dass die von „enough“ erzeugten code lengths die Allokation vonhuffman_tableszu 100% ausfüllen
- In einem Kommentar steht, dass libwebps
Unter welchen Bedingungen der tatsächliche Overflow auftritt
- Das Tool
enoughberechnet das Maximum für gültige und vollständige Codes- Bei einer der kleineren Tabellen mit Symbolgröße 40, 8-Bit-Root-Tabelle und maximaler Code-Länge 15 liegt die Maximalgröße bei 410
- Es wurde kein Fall gefunden, in dem Codes, die
BuildHuffmanTableals gültig akzeptiert, eine Größe über 410 erzeugen
- Der Overflow entsteht nicht durch ausschließlich gültige Huffman-Bäume, sondern beim Einfügen eines ungültigen Huffman-Baums im letzten Schritt
- Zunächst werden mit vier gültigen Huffman-Bäumen Ausgabetabellen maximaler Größe aufgebaut
- Fügt man in die letzte Tabelle einen ungültigen Huffman-Baum ein, kann
ReplicateValuevor der abschließenden Konsistenzprüfung außerhalb des Bereichs schreiben
- Die Reproduktion erfolgt, indem man den verwundbaren libwebp-Commit
7ba44f80f3b94fc0138db159afea770ef06532a0auscheckt, AddressSanitizer aktiviert, mit dem PoC-Code von@mistymntncopbad.webperzeugt und die Datei mitdwebpdecodiert- AddressSanitizer meldet in
BuildHuffmanTableeinenheap-buffer-overflow - Der gemeldete Schreibzugriff erfolgt an einer Adresse direkt hinter einem Bereich von 11816 Byte
- AddressSanitizer meldet in
- Es gibt mehrere Eingaben, die
huffman_tableszum Überlaufen bringen- Unter den gefundenen code lengths gibt es Fälle, die bis zu 400 Byte hinter das Ende der
huffman_tables-Allokation schreiben - Auch wenn die Kontrolle über die geschriebenen Werte nur teilweise möglich ist, scheint eine Ausnutzung realistisch
- Unter den gefundenen code lengths gibt es Fälle, die bis zu 400 Byte hinter das Ende der
- Der Huffman-Baum der ungültigen Eingabe ist teilweise unausgewogen und enthält in einem Abschnitt des unausgewogenen Zweigs viele interne Knoten ohne Kinder
- Diese Struktur erzeugt
key-Indizes, die mit gültigen Bäumen nicht erreichbar sind
- Diese Struktur erzeugt
Wie der Patch den Overflow verhindert
- Zunächst wirkte es so, als würde der Patch den Heap-Overflow verhindern, indem er den Puffer dynamisch auf die benötigte Größe vergrößert
- Tatsächlich lässt die gepatchte Version
BuildHuffmanTablein einem ersten Durchlauf die gesamte benötigte Größe berechnen, ohne in die Tabelle zu schreiben- Bei den ungültigen Eingaben, die den Overflow auslösten, schlägt
BuildHuffmanTablebereits in diesem ersten Durchlauf fehl und gibt 0 zurück - Da der erste Durchlauf nichts schreibt, entsteht selbst bei teilweiser Verarbeitung des ungültigen Baums kein Out-of-Bounds-Write
- Bei den ungültigen Eingaben, die den Overflow auslösten, schlägt
- Da kein gültiger und vollständiger Code gefunden wurde, der denselben Overflow auslöst, wirkt dieser Patch ausreichend
Warum Fuzzing den Fehler leicht übersehen konnte
- libwebp wurde lange über Google OSS-Fuzz gefuzzt, und auch die Unterstützung für verlustfreies WebP wurde umfassend gefuzzt
- Die zentrale Schwierigkeit liegt darin, dass sowohl das Format als auch die Trigger-Bedingungen komplex sind
- Unter Milliarden möglicher Varianten müssen zunächst vier Huffman-Tabellen maximaler Größe für die Alphabetgrößen 280 und 256 aufgebaut werden
- Danach muss für die Alphabetgröße 40 ein ungültiger Huffman-Baum mit sehr spezifischer Form erzeugt werden
- Schon ein einziges falsches Bit in irgendeinem Schritt führt dazu, dass der Bilddecoder mit einem Fehler sauber abbricht
- Google veröffentlichte nach dem Fix des WebP-0day einen neuen Fuzzer speziell für die WebP-Huffman-Routinen
- Selbst mit diesem Fuzzer wurde CVE-2023-4863 nicht gefunden
- Standardmäßige Bitflip-Mutationen, Code-Coverage-Feedback-Schleifen und eingabezustandsbasierte Ansätze wie CmpLog von AFL++ tun sich schwer, bei diesen extremen Zuständen die Zwischenschritte zu passieren
- Dynamische symbolische Ausführung wie TritonDSE von Quarkslab könnte erfolgversprechend sein, wurde aber nicht verifiziert
- Die Schwachstelle unterscheidet sich in ihrem Charakter von der Load_SBit_Png-Lücke in FreeType
- Bei Load_SBit_Png spiegelte der Fuzzing-Harness die API-Nutzung nicht ausreichend wider, weshalb der Fehler unentdeckt blieb
- Bei CVE-2023-4863 liegt die Schwierigkeit weniger an einem unzureichenden Harness als an den inhärenten Einschränkungen der Schwachstelle selbst
Betroffener Bereich und Stand der Reaktion
- Citizen Lab hat einen in freier Wildbahn eingesetzten fortgeschrittenen Exploit erfasst, und Apple sowie Chrome scheinen innerhalb weniger Tage Updates an Milliarden Nutzer ausgeliefert zu haben
- Android könnte zu diesem Zeitpunkt noch betroffen gewesen sein
- Androids BitmapFactory verarbeitet ähnlich wie Apple ImageIO die Bilddecodierung und unterstützt libwebp
- Die damalige Android-Sicherheitsmitteilung enthielt noch keinen Fix für CVE-2023-4863, die Korrektur war jedoch bereits in AOSP gemergt
- Falls Android betroffen ist, könnte dies zu Remote-Exploits in Apps wie Signal oder WhatsApp führen
- Mit einem Fix wurde in der Sicherheitsmitteilung für Oktober gerechnet
- Der upstream-Patch für libwebp scheint korrekt angewendet worden zu sein und verbreitet sich nun an die nötigen Stellen
- Da libwebp an vielen Orten verwendet wird, kann es dauern, bis der Patch überall ausreichend ausgerollt ist
- Bei komplexem Parser-Code wie der Bilddecodierung, der nahe an Zero-Click-Remote-Exploit-Angriffsflächen liegt, reicht Fuzzing allein kaum aus, um Sicherheit zu garantieren; nötig sind proaktive Source-Code-Reviews und angemessene Investitionen in Sandboxing
Asymmetrie bei der Offenlegung technischer Informationen
- Wenn Hersteller nicht genügend technische Details veröffentlichen, können Verteidiger die Auswirkungen einer Schwachstelle nur schwer verifizieren
- Angreifer haben starke Anreize, N-Day-Schwachstellen nachzuverfolgen und auszunutzen, und werden durch fehlende öffentliche Details meist nicht wesentlich aufgehalten
- Verteidigern fehlen oft die Ressourcen, um technische Analysen auf diesem Niveau selbst durchzuführen
- Werden selbst grundlegende Informationen zum Angriffsverhalten zurückgehalten, entsteht eine Asymmetrie, bei der Angreifer mehr Einblick in Schwachstellen und Exploits haben als Verteidiger
1 Kommentare
Meinungen auf Hacker News
Dieser Bug wirkt dem Timsort-Bug von 2015 am ähnlichsten [1]
Timsort ist ein cleverer hybrider Sortieralgorithmus aus CPython, und mehrere Implementierungen, darunter OpenJDK, haben ihn praktisch als Übersetzung auf Quellcode-Ebene übernommen. Er verwaltet einen Stack sortierter Runs, und es gab einen Beweis, dass die strukturell mögliche maximale Stack-Größe eine ausreichend kleine endliche Obergrenze hat. Die ursprüngliche CPython-Implementierung passte jedoch nicht exakt zum Beweis, sodass in seltenen Fällen ein Stack-Overflow möglich war. In CPython war das daher ein schwerer Security-Bug, während Java in diesem Fall eine Exception warf und es in OpenJDK nicht auf dieselbe Weise ein Sicherheitsproblem war
Ähnlich entstand auch dieser WebP-Bug, weil die maximale Tabellengröße zwar formal bewiesen war, aber nicht zu dem Wert passte, der tatsächlich im Quellcode stand. Solche Bugs sind schwer zu verifizieren und schwer zu reviewen. Es ist leicht zu denken, alles sei in Ordnung, weil es einen Beweis gibt und der Source scheinbar dazu passt. Das wirkt wie ein starkes Signal dafür, dass wir zugängliche formale Verifikation statt menschlicher Reviews und außerdem speichersichere Sprachen brauchen. Auch Typsysteme kann man als schwache Form formaler Verifikation betrachten
[1] http://envisage-project.eu/wp-content/uploads/2015/02/sortin...
https://github.com/google/wuffs
Man kann dieselbe Prüfung auch explizit schreiben und so diese Anforderung erfüllen. Wenn man aber glaubte, dass bei High-Performance-Software keine Prüfung nötig sei, ist die Wahrscheinlichkeit groß, dass man genau an der Stelle, an der das WUFFS-Tool den Code nicht akzeptiert, feststellt, dass man falschlag. Das ist schwächer als vollständige formale Verifikation, aber für das Ziel der Programmsicherheit eine große Verbesserung und viel besser als ein menschliches „LGTM“
Neben der Frage „Was muss jetzt gepatcht werden?“ gab es in diesem Artikel einige interessante Punkte. Selbst wenn man die Stelle der Schwachstelle und die Korrektur kennt, kann es noch einiges an Arbeit sein, einen Exploit-PoC zu reproduzieren, und ein Lossless-Decompressor innerhalb eines Image-Decoders kann ziemlich fuzzing-resistent sein. Für Security-Leute mag das selbstverständlich sein, aber als Nicht-Experte fand ich es spannend zu lesen
Ich habe ein paar Fragen, auf die ich keine klare Antwort finde. 1) Sind auch andere Chrome-basierte Browser wie Brave betroffen? 2) Ist auch Desktop-Chrome betroffen, oder ist das nur ein mobiles Problem? 3) Warum habe ich noch nie von WebP gehört? Ich frage mich, ob ich von der Welt abgeschnitten war oder ob es eine Mobile-First-Technik ist
Desktop-Chrome war ebenfalls betroffen, sowohl unter Linux als auch unter Windows. Chrome bündelt seine eigene libwebp; selbst wenn eine Linux-Distribution noch nicht gepatcht hat, ist man bei aktuellem Chrome zumindest hinsichtlich Browser-Angriffen in Ordnung
Große Browser und Betriebssysteme unterstützen erstaunlich viele eher unbekannte Bildformate. Unter macOS kann man zum Beispiel KTX2 (Khronos Texture Container) laden, unter Android DNG (Adobe Digital Negative). Es gibt viele interessante und stark exponierte Angriffsflächen, die Angreifer erkunden können
Der Bug steckt in der Codec-Bibliothek, und WebP hat ein faktisch vereinheitlichtes Implementierungs-Ökosystem: Alle verwenden dieselbe Bibliothek, und alle müssen gepatcht werden
Google hat WebP vor zehn Jahren vorangetrieben, aber lange blieb es Chrome-exklusiv und konnte deshalb nicht richtig an Fahrt gewinnen. Es wurde auch nie ordentlich standardisiert, ist aber Open Source. Bei Bildern niedriger Qualität komprimiert es besser als JPEG, bei hochwertigen Bildern neigt es jedoch dazu, Farben ausbluten zu lassen und unscharf zu wirken. Ironischerweise war WebP zu dem Zeitpunkt, als es breit unterstützt wurde, durch AVIF und JPEG XL technisch bereits dabei, veraltet zu werden
Wenn ein Android-Gerät nicht mehr unterstützt wird, ist es dann faktisch einem derzeit aktiv kursierenden 0-Click-Exploit ausgesetzt? Oder reicht es, SMS-App, Chrome, WhatsApp, Signal usw. zu aktualisieren, um die wichtigsten Eingangswege ausreichend zu schließen?
Wenn man Chrome auf nicht mehr unterstützten Geräten aktualisiert, ist das Chrome-Problem behoben; um Apps wie Signal oder WhatsApp zu reparieren, braucht es jedoch ein Android-OS-Upgrade. Chrome bündelt seine eigene libwebp, aber exponierte Apps wie Messaging-Apps und Gmail verwenden für die Bildanzeige vom OS bereitgestellte Schnittstellen. Bei Android-Geräten mit Sicherheits-Support rechne ich ab Anfang Oktober mit Updates.
„Es gibt viele Eingaben, die huffman_tables tatsächlich zum Überlaufen bringen“ klingt nach einem allgemeineren Problem. Software A erzeugt eine Lookup-Tabelle B, und diese Tabelle wird zur Verarbeitung eines Eingabedatenstroms verwendet.
Jeder Entwickler, dem Sicherheit oder Korrektheit auch nur ein wenig wichtig ist, muss nun eines von zwei Dingen garantieren: A) Die Software ist so geschrieben, dass keine Eingabedaten die Lookup-Tabelle missbrauchen oder zum Fehlschlagen bringen können, oder B) sie wird nur in einer kontrollierten Umgebung eingesetzt, etwa in einer Punkt-zu-Punkt-Kommunikation, bei der beide Kommunikationsparteien vertrauenswürdig sind, sodass garantiert ist, dass der Stream die Lookup-Tabelle niemals missbraucht oder Abweichungen verursacht.
B ist außer in kleinen Gruppen oder Büros kaum möglich, und im Internetmaßstab wirklich unmöglich; am Ende bleibt also nur A. Eine allgemeine Best Practice der künftigen Softwaretechnik sollte sein: Wenn aus irgendeinem Grund eine Lookup-Tabelle verwendet wird, muss der Entwickler sicherstellen, dass diese Tabelle für alle Datentypen korrekt funktioniert, oder fehlerhafte Daten erkennen und angemessen behandeln, bevor sie die Tabelle erreichen.
Wenn ich ein ernsthafter Sicherheitsforscher wäre und Zeit hätte, würde ich eine Liste aller früheren Sicherheitslücken zusammentragen, die irgendwie mit Lookup-Tabellen zu tun hatten, sie eine nach der anderen lesen und die Gemeinsamkeiten vergleichen. Vermutlich gibt es ein Muster. Danach würde ich jede Software durchgehen, die Lookup-Tabellen für Datenströme verwendet, und auf Schwachstellen auditieren — aber das ist nichts, was eine einzelne Person in einem Leben schaffen kann, sondern ein Teamsport.
In welchem Maß hat offener Quellcode NSO wohl dabei geholfen, diesen Bug zu finden? Wenn der Code nur ein Binary Blob gewesen wäre, frage ich mich, ob moderne Decompiler allein ausgereicht hätten, um den Code zu verstehen und einen so schwer greifbaren Bug zu finden.
Überraschend ist, dass es kein „neuer“ Teil des Bildformats ist. Huffman-Kompression gibt es seit über 70 Jahren, kanonisches Huffman nur ein paar Jahrzehnte weniger, und selbst JPEG nutzt Huffman. Das ist jahrzehntealte Technik, zu deren Implementierung es unzählige Texte gibt; eigentlich wirkt es wie eine Technik, bei der die Bugs in den verschiedenen Implementierungen inzwischen ausgeräumt sein sollten.
Ich habe vor Jahren die JPEG-Spezifikation gelesen und auch einen Decoder geschrieben, also habe ich mir die WebP-Spezifikation angesehen: https://developers.google.com/speed/webp/docs/webp_lossless_...
Das Wichtige steht in Abschnitt 6. Was zuerst auffällt: Anders als in der JPEG-Spezifikation ist nicht klar beschrieben, wie die Codes aufgebaut sind. JPEG enthält viele gut lesbare Ablaufdiagramme für den Prozess. WebP sieht eher nach LZH/deflate (zlib) aus und wirkt weniger wie eine „Spezifikation“ als wie eine Sammlung kommentierter Ausschnitte aus Quellcode.
Nach GIF-, JPEG- und PNG-Decodern überlege ich zwar, auch einen WebP-Decoder zu schreiben, aber allein anhand der obigen „Spezifikation“ fühlt es sich fast so an, als solle man es lieber lassen.
Bei Implementierungen von Huffman-Bäumen gibt es viele unterschiedliche Trade-offs; nur weil die Technik alt ist, heißt das daher nicht, dass alle Bugs ausgeräumt sind. Charles Bloom meinte, dass selbst das maßgebliche Paper von 1997 zu Huffman-Optimierungen [1] bis 2010 nicht besonders bekannt war und viele Optimierungen wiederentdeckt und dann wieder vergessen wurden. Daher ist es gut möglich, dass es viele ineffiziente Implementierungen gibt.
[1] https://cbloomrants.blogspot.com/2010/08/08-12-10-lost-huffm...
Inzwischen scheint man nicht einmal mehr Bilder anschauen zu können, ohne sich Sicherheitsgedanken zu machen.
Das klingt nach den typischen Wachstumsschmerzen, die entstehen, wenn man die unsichere Sprache C verwendet. Ich verstehe, dass sie wegen der Browsergeschwindigkeit attraktiv ist, aber ich wünschte, die Branche käme von dem Muster weg, dieselben Fehler zu fördern, die sie seit Beginn der Nutzung von C immer wieder macht.
Es fühlt sich an, als würde man Brücken mit selbstschneidenden Schrauben statt mit Nieten bauen, weil das schneller ist. Wenn die Brücke anfängt durchzuhängen, schraubt man eben noch mehr Schrauben hinein.
„Die gute Nachricht ist, dass Apple und Chrome hervorragend auf die Dringlichkeit dieses Problems reagiert haben“ – das ist schwer nachzuvollziehen. Google war es, das dieses Problem als Chrome-spezifisch eingestuft hat. Allein in den vergangenen sieben Tagen mussten alle großen Linux-Distributionen Updates ausrollen, und Red Hat hat es mit 9,6 bewertet. Auch Python-Docker-Images mit über einer Milliarde Pulls, Puppeteer, WordPress, Node.js usw. waren betroffen, aber der CRBug ist immer noch nicht öffentlich
Seiten wie BleepingComputer haben ohne eigene Untersuchung einfach berichtet, was sichtbar war, und viele Sicherheitsfirmen, die dieses Thema wie eine Drittpartei behandelt haben, ebenso. Wenn man weiß, dass die Gegenseite keine Due Diligence betrieben hat, ist es wirklich schwer, Vertrauen aufzubauen
Adam Caudill hat zusammen mit dem Beispiel, dass 1Password früh gepatcht hat, einen guten Beitrag „Whose CVE is it anyway?“[0] geschrieben und darin das hier angesprochene Problem gut herausgearbeitet. Citizen Lab hat eine Antwort darauf verweigert, ob die beiden Issues zusammenhängen, aber man muss kein Genie sein, um gewisse Dinge zu erkennen
[0]: https://adamcaudill.com/2023/09/14/whose-cve-is-it-anyway/
Der Autor sagt ebenfalls, dass viele andere Systeme gepatcht werden müssen. Aber wie viele der Python-Docker-Images mit einer Milliarde Pulls rendern wohl nicht vertrauenswürdige WebP-Bilder? Bei Node und Ähnlichem gilt dasselbe. Natürlich muss schnell gepatcht werden, aber das ist nicht auf derselben Stufe wie iOS/Android/Chrome
Weltweit sind Hunderte Millionen Menschen von dieser Library betroffen, und der Einfluss vervielfacht sich noch über die jeweils genutzten Geräte und Apps
Ich mag C, aber ich denke, Libraries, die von Hunderten Millionen Menschen weltweit genutzt werden, sollten nicht in C geschrieben werden. Bei solchen Kern-Libraries ist der Risikoanteil zu hoch. Selbst C-Experten machen irgendwann Fehler
Das scheint der Fix zu sein: https://github.com/webmproject/libwebp/commit/dce8397fec159c...
„malloc fail“ – frustrierend. Slack, Discord, Teams und sogar alle modernen Betriebssysteme sind betroffen
C/C++ und dynamische Sprachen vergrößern die Angriffsfläche für undefiniertes Verhalten und subtile Bugs erheblich und sind selbst für die klügsten Entwickler schwer zu linten und eine große Belastung. Basis-Libraries sollten ähnlich wie seL4 formal verifiziert werden
Ein weiteres Problem ist die im gesamten FOSS-Bereich verbreitete Unprofessionalität sowie die Missachtung von Strenge, Qualität, Korrektheit und Sicherheit. Die derzeitige Art, ein Imperium auf Sand zu bauen, ist töricht