CVE-2025-43300: Corruzione della memoria nell'elaborazione delle immagini DNG su iOS/macOS
Panoramica
CVE-2025-43300 è una vulnerabilità critica di corruzione della memoria nel framework di elaborazione delle immagini di Apple che interessa iOS 18.6.1 e i sistemi macOS. La vulnerabilità risiede nel codice di decompressione JPEG Lossless all'interno di RawCamera.bundle, attivata da incongruenze tra i metadati TIFF e i parametri del flusso JPEG nei file DNG.
Dettagli della vulnerabilità
Causa principale
La vulnerabilità deriva da un'incongruenza metadati/flusso nei file DNG (Digital Negative):
- I metadati SamplesPerPixel nelle intestazioni TIFF indicano i componenti colore attesi
- Il conteggio dei componenti SOF3 nei flussi JPEG Lossless specifica i componenti dati effettivi
- Quando questi valori differiscono, l'allocazione e l'elaborazione diventano disallineate
Flusso di corruzione della memoria
1. Il parser legge SamplesPerPixel dai metadati TIFF (es. 2 componenti)
2. Il sistema alloca un buffer: larghezza × altezza × 2 componenti
3. Il decoder JPEG legge il conteggio dei componenti SOF3 (es. 1 componente)
4. Il decoder scrive dati basandosi su assunzioni incoerenti
5. Si verifica un overflow del buffer quando vengono scritti più dati di quelli allocati
Vettore d'attacco
- Vulnerabilità zero-click: nessuna interazione richiesta da parte dell'utente
- Elaborazione automatica: attivata visualizzando, importando o ricevendo file DNG
- Impatto multipiattaforma: interessa sia i sistemi iOS che macOS
- Corruzione della memoria: può causare il crash dell'applicazione o la potenziale esecuzione di codice
Panoramica degli strumenti
Questa repository contiene due strumenti Python per analizzare e riprodurre CVE-2025-43300:
1. DNG Vulnerability Analyzer (dng_vulnerability_analyzer.py)
Scopo: Analizza la struttura dei file DNG per identificare le condizioni di vulnerabilità
Caratteristiche principali:
- Analizza la struttura dei file TIFF/DNG incluse IFD e SubIFD
- Individua i tag di metadati SamplesPerPixel
- Identifica i marcatori SOF3 JPEG Lossless e i conteggi dei componenti
- Rileva incongruenze tra metadati e flusso
- Riporta gli offset esatti in byte per le modifiche
Utilizzo:
python3 dng_vulnerability_analyzer.py <dng_file>
Output:
- Analisi della struttura del file
- Posizioni e valori dei tag di metadati
- Informazioni sui componenti del flusso JPEG
- Valutazione della vulnerabilità
- Offset specifici per la creazione del POC
2. Safe Hex Modifier (hex_modifier.py)
Scopo: Crea file proof-of-concept modificando in modo sicuro byte specifici
Caratteristiche principali:
- Verifica i valori dei byte attesi prima della modifica
- Crea hash SHA256 per il tracciamento dei file
- Genera report di diff binario
- Implementa controlli di sicurezza per prevenire corruzioni accidentali
- Supporta sia la creazione manuale che automatizzata di POC
Utilizzo:
# Crea un POC utilizzando offset vulnerabili noti
python3 hex_modifier.py create-poc <input.dng>
# Modifica manuale dei byte
python3 hex_modifier.py modify <input.dng> <offset> <old_byte> <new_byte> <output.dng>
# Genera un report diff
python3 hex_modifier.py diff <original.dng> <modified.dng>
Processo di creazione del POC
Passo 1: Analizza il file di destinazione
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Questo identifica:
- La posizione dei metadati SamplesPerPixel
- Le posizioni dei conteggi dei componenti SOF3 JPEG
- I valori attuali e le modifiche suggerite
Passo 2: Crea un campione vulnerabile
Il POC richiede due modifiche specifiche ai byte:
- Aumenta i metadati SamplesPerPixel (in genere da 1 a 2)
- Diminuisci il conteggio dei componenti SOF3 (in genere da 2 a 1)
python3 hex_modifier.py create-poc IMGP0847.DNG
Passo 3: Verifica il POC
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Conferma che l'incongruenza esiste e che la vulnerabilità viene attivata.
Perché il POC funziona
Meccanismo tecnico
-
Fase di allocazione:
- Il parser delle immagini legge SamplesPerPixel = 2
- Alloca un buffer per 2 componenti di dati dei pixel
- Dimensione del buffer = larghezza_immagine × altezza_immagine × 2
-
Fase di elaborazione:
- Il decoder JPEG Lossless incontra SOF3 con 1 componente
- La logica di parsing si confonde sulla dimensione dati effettiva rispetto a quella attesa
- Tenta di scrivere dati basandosi su assunzioni incoerenti
-
Corruzione della memoria:
- Più dati scritti nel buffer rispetto a quelli originariamente allocati
- L'overflow del buffer corrompe le regioni di memoria adiacenti
- Risulta in un crash dell'applicazione o nella potenziale esecuzione di codice
I file DNG utilizzano il formato contenitore TIFF con flussi JPEG Lossless incorporati:
- I metadati TIFF descrivono le proprietà dell'immagine e le informazioni sul colore
- I flussi JPEG contengono i dati dei pixel compressi
- Esiste una relazione di fiducia tra metadati e contenuto del flusso
- La lacuna di validazione consente a valori incoerenti di raggiungere il codice di elaborazione
Valutazione dell'impatto
Gravità: Critica
- Punteggio CVSS: Alto (zero-click, corruzione della memoria, ampio impatto)
- Sistemi interessati: iOS 18.6.1, sistemi macOS con elaborazione delle immagini simile
- Vettore d'attacco: Trasferimento di file di rete/locale
- Interazione dell'utente: Nessuna richiesta
- Ambito: Tutti i dispositivi che elaborano file DNG
Scenari reali
- Allegati email con file DNG
- Trasferimenti AirDrop
- Sincronizzazione di foto su cloud
- Download dal web di campioni di fotografi
- Condivisione di media tramite app di messaggistica
Mitigazione e patch
Risposta del fornitore
- Corretto in iOS 18.6.2: Apple ha implementato una corretta validazione dei metadati
- Aggiornamenti macOS: Correzioni simili applicate all'elaborazione delle immagini su macOS
- Causa principale: Aggiunti controlli di coerenza tra metadati e parametri del flusso
Mitigazioni raccomandate
- Aggiornare i sistemi: Installare iOS 18.6.2 o versioni successive
- Validazione dell'input: Verificare la coerenza dei metadati nei parser personalizzati
- Controllo dei limiti: Implementare una validazione rigorosa delle dimensioni del buffer
- Fuzzing: Test regolari dei parser di formato file
Struttura del file e dettagli tecnici
Struttura TIFF/DNG
TIFF Header → IFD Chain → SubIFDs → Image Data
├── Metadata Tags (SamplesPerPixel, Compression, etc.)
├── JPEG Lossless Streams (SOF3 markers)
└── Pixel Data (compressed)
Posizioni chiave della vulnerabilità
- Tag SamplesPerPixel: Tag TIFF 0x0115 nelle strutture IFD
- Marcatori SOF3: Start of Frame JPEG Lossless (0xFFC3)
- Conteggio componenti: Offset in byte +9 dal marcatore SOF3
- Discrepanza critica: Quando il valore del tag ≠ conteggio dei componenti
Linee guida per i test
Ambiente di test sicuro
- Utilizzare sistemi isolati: VM o dispositivi di test dedicati
- Creare snapshot: Prima di testare i file POC
- Monitorare i crash: Controllare i log di sistema e i report di crash
- Isolamento di rete: Prevenire la condivisione involontaria di file
Comportamento atteso
- Sistemi vulnerabili: Crash dell'applicazione, errori di corruzione della memoria
- Sistemi con patch: Gestione degli errori elegante o elaborazione corretta
- Indicatori nei log: Violazioni di accesso alla memoria, segmentation fault
Riferimenti tecnici
- Specifica TIFF 6.0: Struttura dei tag e formato IFD
- Specifica DNG: Formato Adobe Digital Negative
- Standard JPEG: Compressione lossless (ITU-T T.87)
Ricerca sulla sicurezza
- Tecniche di corruzione della memoria: Fondamenti di buffer overflow
- Fuzzing dei formati file: Scoperta automatizzata di vulnerabilità
- Sicurezza dei parser: Best practice per la validazione degli input
Disclaimer: Questa ricerca è fornita esclusivamente a scopo educativo e di difesa della sicurezza. Gli utenti sono responsabili del rispetto delle leggi e delle linee guida etiche applicabili.
NOTA
Il crash richiede circa 1-3 minuti per essere attivato. buon divertimento
E per il POC puoi eseguire open vuln_file.dng per avviare il file oppure visualizzarne l'anteprima e verrà eseguito