CVE-2025-43300: Speicherverfälschung bei der DNG-Bildverarbeitung in iOS/macOS
Übersicht
CVE-2025-43300 ist eine kritische Speicherverfälschungsschwachstelle in Apples Bildverarbeitungsframework, die iOS 18.6.1 und macOS-Systeme betrifft. Die Schwachstelle existiert im JPEG-Verlustfrei-Dekomprimierungscode innerhalb von RawCamera.bundle und wird durch Inkonsistenzen zwischen TIFF-Metadaten und JPEG-Stream-Parametern in DNG-Dateien ausgelöst.
Details zur Schwachstelle
Grundursache
Die Schwachstelle resultiert aus einer Inkonsistenz zwischen Metadaten und Stream in DNG-Dateien (Digital Negative):
- SamplesPerPixel-Metadaten in TIFF-Headern geben die erwarteten Farbkomponenten an
- SOF3-Komponentenanzahl in JPEG-Verlustfrei-Streams gibt die tatsächlichen Datenkomponenten an
- Wenn diese Werte abweichen, werden Speicherzuweisung und Verarbeitung falsch ausgerichtet
Ablauf der Speicherverfälschung
1. Parser reads SamplesPerPixel from TIFF metadata (e.g., 2 components)
2. System allocates buffer: width × height × 2 components
3. JPEG decoder reads SOF3 component count (e.g., 1 component)
4. Decoder writes data based on inconsistent assumptions
5. Buffer overflow occurs when more data is written than allocated
Angriffsvektor
- Zero-Click-Schwachstelle: Keine Benutzerinteraktion erforderlich
- Automatische Verarbeitung: Ausgelöst durch Anzeigen, Importieren oder Empfangen von DNG-Dateien
- Plattformübergreifende Auswirkungen: Betrifft sowohl iOS- als auch macOS-Systeme
- Speicherverfälschung: Kann zu Programmabstü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 TIFF/DNG-Dateistruktur einschließlich IFDs und SubIFDs
- Findet SamplesPerPixel-Metadaten-Tags
- Identifiziert JPEG-Verlustfrei-SOF3-Marker und Komponentenanzahlen
- Erkennt Inkonsistenzen zwischen Metadaten und Stream
- Meldet exakte Byte-Offsets für Modifikationen
Verwendung:
python3 dng_vulnerability_analyzer.py <dng_file>
Ausgabe:
- Dateistrukturanalyse
- Metadaten-Tag-Positionen und -Werte
- 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 Modifizieren bestimmter Bytes
Hauptfunktionen:
- Überprüft erwartete Byte-Werte vor der Modifikation
- Erstellt SHA256-Hashes zur Dateiverfolgung
- Erzeugt binäre Diff-Berichte
- Implementiert Sicherheitsprüfungen, um versehentliche Beschädigungen zu verhindern
- Unterstützt sowohl manuelle als auch automatisierte POC-Erstellung
Verwendung:
# Create POC using known vulnerable offsets
python3 hex_modifier.py create-poc <input.dng>
# Manual byte modification
python3 hex_modifier.py modify <input.dng> <offset> <old_byte> <new_byte> <output.dng>
# Generate diff report
python3 hex_modifier.py diff <original.dng> <modified.dng>
POC-Erstellungsprozess
Schritt 1: Zieldatei analysieren
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Dies identifiziert:
- SamplesPerPixel-Metadatenposition
- JPEG-SOF3-Komponentenanzahlpositionen
- Aktuelle Werte und vorgeschlagene Modifikationen
Schritt 2: Angreifbares Beispiel 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 überprüfen
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Bestätigt, dass die Inkonsistenz existiert und die Schwachstelle ausgelöst wird.
Warum der POC funktioniert
Technischer Mechanismus
-
Allokationsphase:
- Bildparser liest SamplesPerPixel = 2
- Weist Puffer für 2 Komponenten Pixeldaten zu
- Puffergröße = Bildbreite × Bildhöhe × 2
-
Verarbeitungsphase:
- JPEG-Verlustfrei-Decoder trifft auf SOF3 mit 1 Komponente
- Parsing-Logik wird hinsichtlich tatsächlicher vs. erwarteter Datengröße verwirrt
- Versucht, Daten basierend auf inkonsistenten Annahmen zu schreiben
-
Speicherverfälschung:
- Mehr Daten in den Puffer geschrieben als ursprünglich zugewiesen
- Pufferüberlauf beschädigt benachbarte Speicherbereiche
- Führt zu Programmabsturz oder potenzieller Codeausführung
DNG-Dateien verwenden das TIFF-Containerformat mit eingebetteten JPEG-Verlustfrei-Streams:
- TIFF-Metadaten beschreiben Bildeigenschaften und Farbinformationen
- JPEG-Streams enthalten komprimierte Pixeldaten
- Vertrauensbeziehung besteht zwischen Metadaten und Stream-Inhalt
- Validierungslücke ermöglicht inkonsistente Werte, die den Verarbeitungscode erreichen
Auswirkungsbewertung
Schweregrad: Kritisch
- CVSS-Score: Hoch (Zero-Click, Speicherverfälschung, 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
Praxisnahe 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
Herstellerreaktion
- Behoben in iOS 18.6.2: Apple hat ordnungsgemäße Metadatenvalidierung implementiert
- macOS-Updates: Ähnliche Korrekturen auf die macOS-Bildverarbeitung angewendet
- Grundursache: Konsistenzprüfungen zwischen Metadaten und Stream-Parametern hinzugefügt
Empfohlene Abhilfemaßnahmen
- Systeme aktualisieren: iOS 18.6.2 oder neuer installieren
- Eingabevalidierung: Metadatenkonsistenz in benutzerdefinierten Parsern überprüfen
- Grenzprüfung: Strikte Puffergrößenvalidierung implementieren
- Fuzzing: Regelmäßiges Testen von Dateiformat-Parsern
Dateistruktur und technische Details
TIFF/DNG-Struktur
TIFF Header → IFD Chain → SubIFDs → Image Data
├── Metadata Tags (SamplesPerPixel, Compression, etc.)
├── JPEG Lossless Streams (SOF3 markers)
└── Pixel Data (compressed)
Wichtige Schwachstellenpositionen
- SamplesPerPixel-Tag: TIFF-Tag 0x0115 in IFD-Strukturen
- SOF3-Marker: JPEG-Verlustfrei-Start-of-Frame (0xFFC3)
- Komponentenanzahl: Byte-Offset +9 vom SOF3-Marker
- Kritische Diskrepanz: Wenn Tag-Wert ≠ Komponentenanzahl
Testrichtlinien
Sicheres Testumfeld
- Isolierte Systeme verwenden: VMs oder dedizierte Testgeräte
- Schnappschüsse erstellen: Vor dem Testen von POC-Dateien
- Abstürze überwachen: Systemprotokolle und Absturzberichte prüfen
- Netzwerkisolierung: Unbeabsichtigte Dateifreigabe verhindern
Erwartetes Verhalten
- Anfällige Systeme: Programmabsturz, Speicherverfälschungsfehler
- Gepatchte Systeme: Fehlerbehandlung ohne Absturz oder korrekte 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
- Speicherverfälschungstechniken: Grundlagen von Pufferüberläufen
- Dateiformat-Fuzzing: Automatisierte Schwachstellenentdeckung
- Parser-Sicherheit: Best Practices für Eingabevalidierung