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
Haftungsausschluss: Diese Forschung wird nur zu Bildungs- und Sicherheitsabwehrzwecken bereitgestellt. Benutzer sind für die Einhaltung geltender Gesetze und ethischer Richtlinien verantwortlich.
HINWEIS
Der Absturz tritt nach etwa 1–3 Minuten auf. Viel Spaß
Und für den POC können Sie open vuln_file.dng ausführen, um die Datei zu öffnen, oder sie einfach in der Vorschau anzeigen, und sie wird ausgeführt.