CVE-2025-43300: Speicherkorruption in der iOS/macOS DNG-Bildverarbeitung
Überblick
CVE-2025-43300 ist eine kritische Speicherkorruptions-Schwachstelle im Bildverarbeitungs-Framework von Apple, die iOS 18.6.1 und macOS-Systeme betrifft. Die Schwachstelle befindet sich im JPEG-Lossless-Dekomprimierungscode innerhalb von RawCamera.bundle und wird durch Inkonsistenzen zwischen TIFF-Metadaten und JPEG-Stream-Parametern in DNG-Dateien ausgelöst.
Details zur Sicherheitslücke
Grundursache
Die Schwachstelle resultiert aus einer Metadaten/Stream-Inkonsistenz in DNG-Dateien (Digital Negative):
- SamplesPerPixel-Metadaten in TIFF-Headern geben erwartete Farbkomponenten an
- SOF3-Komponentenanzahl in JPEG-Lossless-Streams gibt die tatsächlichen Datenkomponenten an
- Wenn diese Werte voneinander abweichen, sind Speicherzuweisung und -verarbeitung nicht mehr aufeinander abgestimmt
Speicherkorruptionsablauf
1. Parser liest SamplesPerPixel aus TIFF-Metadaten (z. B. 2 Komponenten)
2. System weist Puffer zu: Breite × Höhe × 2 Komponenten
3. JPEG-Decoder liest SOF3-Komponentenanzahl (z. B. 1 Komponente)
4. Decoder schreibt Daten basierend auf inkonsistenten Annahmen
5. Pufferüberlauf tritt auf, wenn mehr Daten geschrieben werden als zugewiesen
Angriffsvektor
- Zero-Click-Schwachstelle: Keine Benutzerinteraktion erforderlich
- Automatische Verarbeitung: Wird durch Anzeigen, Importieren oder Empfangen von DNG-Dateien ausgelöst
- Plattformübergreifende Auswirkung: Betrifft sowohl iOS- als auch macOS-Systeme
- Speicherkorruption: Kann zu Anwendungsabstürzen oder potenzieller Codeausführung führen
Werkzeugübersicht
Dieses Repository enthält zwei Python-Werkzeuge zur Analyse und Reproduktion von CVE-2025-43300:
1. DNG-Schwachstellenanalysator (dng_vulnerability_analyzer.py)
Zweck: Analysiert die DNG-Dateistruktur, um Schwachstellenbedingungen zu identifizieren
Hauptfunktionen:
- Analysiert die TIFF/DNG-Dateistruktur einschließlich IFDs und SubIFDs
- Lokalisiert SamplesPerPixel-Metadaten-Tags
- Identifiziert JPEG-Lossless-SOF3-Marker und Komponentenanzahlen
- Erkennt Metadaten/Stream-Inkonsistenzen
- Meldet genaue Byte-Offsets für Modifikationen
Verwendung:
python3 dng_vulnerability_analyzer.py <dng_datei>
Ausgabe:
- Dateistrukturanalyse
- Positionen und Werte der Metadaten-Tags
- Informationen zu JPEG-Stream-Komponenten
- Schwachstellenbewertung
- Spezifische Offsets für die POC-Erstellung
2. Sicherer Hex-Modifikator (hex_modifier.py)
Zweck: Erstellt Proof-of-Concept-Dateien durch sicheres Ändern bestimmter Bytes
Hauptfunktionen:
- Überprüft erwartete Byte-Werte vor der Modifikation
- Erstellt SHA256-Hashes zur Dateiverfolgung
- Generiert binäre Diff-Berichte
- Implementiert Sicherheitsprüfungen, um versehentliche Beschädigung zu verhindern
- Unterstützt sowohl manuelle als auch automatisierte POC-Erstellung
Verwendung:
# POC mit bekannten verletzlichen Offsets erstellen
python3 hex_modifier.py create-poc <eingabe.dng>
# Manuelle Byte-Modifikation
python3 hex_modifier.py modify <eingabe.dng> <offset> <altes_byte> <neues_byte> <ausgabe.dng>
# Diff-Bericht generieren
python3 hex_modifier.py diff <original.dng> <modifiziert.dng>
POC-Erstellungsprozess
Schritt 1: Zieldatei analysieren
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Dies identifiziert:
- Position der SamplesPerPixel-Metadaten
- Positionen der JPEG-SOF3-Komponentenanzahl
- Aktuelle Werte und vorgeschlagene Modifikationen
Schritt 2: Verletzliches Sample erstellen
Der POC erfordert zwei spezifische Byte-Modifikationen:
- SamplesPerPixel-Metadaten erhöhen (typischerweise von 1 auf 2)
- SOF3-Komponentenanzahl verringern (typischerweise von 2 auf 1)
python3 hex_modifier.py create-poc IMGP0847.DNG
Schritt 3: POC verifizieren
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Bestätigt, dass die Inkonsistenz vorhanden ist und die Schwachstelle ausgelöst wird.
Warum der POC funktioniert
Technischer Mechanismus
-
Zuweisungsphase:
- Bildparser liest SamplesPerPixel = 2
- Weist Puffer für 2 Komponenten Pixel-Daten zu
- Puffergröße = Bildbreite × Bildhöhe × 2
-
Verarbeitungsphase:
- JPEG-Lossless-Decoder trifft auf SOF3 mit 1 Komponente
- Parsing-Logik wird hinsichtlich der tatsächlichen vs. erwarteten Datengröße verwirrt
- Versucht, Daten basierend auf inkonsistenten Annahmen zu schreiben
-
Speicherkorruption:
- Es werden mehr Daten in den Puffer geschrieben als ursprünglich zugewiesen
- Pufferüberlauf beschädigt benachbarte Speicherbereiche
- Führt zu Anwendungsabsturz oder potenzieller Codeausführung
DNG-Dateien verwenden das TIFF-Containerformat mit eingebetteten JPEG-Lossless-Streams:
- TIFF-Metadaten beschreiben Bildeigenschaften und Farbinformationen
- JPEG-Streams enthalten komprimierte Pixeldaten
- Vertrauensbeziehung besteht zwischen Metadaten und Stream-Inhalt
- Validierungslücke erlaubt inkonsistente Werte bis zum Verarbeitungscode
Auswirkungsbewertung
Schweregrad: Kritisch
- CVSS-Score: Hoch (Zero-Click, Speicherkorruption, breite Auswirkung)
- Betroffene Systeme: iOS 18.6.1, macOS-Systeme mit ähnlicher Bildverarbeitung
- Angriffsvektor: Netzwerk/Lokaler Dateitransfer
- Benutzerinteraktion: Keine erforderlich
- Umfang: Alle Geräte, die DNG-Dateien verarbeiten
Reale Szenarien
- E-Mail-Anhänge mit DNG-Dateien
- AirDrop-Übertragungen
- Cloud-Foto-Synchronisation
- Web-Downloads von Fotografen-Beispielen
- Medienfreigabe in Messaging-Apps
Abhilfe und Patches
Reaktion des Anbieters
- Behoben in iOS 18.6.2: Apple implementierte ordnungsgemäße Metadaten-Validierung
- macOS-Updates: Ähnliche Korrekturen in der macOS-Bildverarbeitung
- Grundursache: Konsistenzprüfungen zwischen Metadaten und Stream-Parametern hinzugefügt
Empfohlene Abhilfemaßnahmen
- Systeme aktualisieren: iOS 18.6.2 oder höher installieren
- Eingabevalidierung: Metadatenkonsistenz in benutzerdefinierten Parsern prüfen
- Grenzprüfung: Strenge Puffergrößenvalidierung implementieren
- Fuzzing: Regelmäßige Tests von Dateiformat-Parsern
Dateistruktur und technische Details
TIFF/DNG-Struktur
TIFF-Header → IFD-Kette → SubIFDs → Bilddaten
├── Metadaten-Tags (SamplesPerPixel, Komprimierung, etc.)
├── JPEG-Lossless-Streams (SOF3-Marker)
└── Pixeldaten (komprimiert)
Wichtige Schwachstellenpositionen
- SamplesPerPixel-Tag: TIFF-Tag 0x0115 in IFD-Strukturen
- SOF3-Marker: JPEG-Lossless-Start-of-Frame (0xFFC3)
- Komponentenanzahl: Byte-Offset +9 ab SOF3-Marker
- Kritische Diskrepanz: Wenn Tag-Wert ≠ Komponentenanzahl
Testrichtlinien
Sichere Testumgebung
- Isolierte Systeme verwenden: VMs oder dedizierte Testgeräte
- Snapshots erstellen: Vor dem Testen von POC-Dateien
- Abstürze überwachen: Systemprotokolle und Crash-Berichte prüfen
- Netzwerkisolation: Unbeabsichtigte Dateifreigabe verhindern
Erwartetes Verhalten
- Verletzliche Systeme: Anwendungsabsturz, Speicherkorruptionsfehler
- Gepatchte Systeme: Korrekte Fehlerbehandlung oder ordnungsgemäße Verarbeitung
- Protokollindikatoren: Speicherzugriffsverletzungen, Segmentierungsfehler
Technische Referenzen
- TIFF 6.0 Spezifikation: Tag-Struktur und IFD-Format
- DNG-Spezifikation: Adobe Digital Negative-Format
- JPEG-Standard: Verlustfreie Komprimierung (ITU-T T.87)
Sicherheitsforschung
- Speicherkorruptionstechniken: Grundlagen des Pufferüberlaufs
- Dateiformat-Fuzzing: Automatisierte Schwachstellenentdeckung
- Parser-Sicherheit: Best Practices zur Eingabevalidierung