CVE-2025-43300: Corruzione della memoria nel processamento di 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 colpisce iOS 18.6.1 e sistemi macOS. La vulnerabilità risiede nel codice di decompressione JPEG Lossless all'interno di RawCamera.bundle, innescata 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 negli header TIFF indicano i componenti cromatici attesi
- Il conteggio componenti SOF3 nei flussi JPEG Lossless specifica i componenti dati effettivi
- Quando questi valori differiscono, allocazione e 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 componenti SOF3 (es. 1 componente)
4. Il decoder scrive dati basandosi su assunzioni inconsistenti
5. Si verifica un buffer overflow quando vengono scritti più dati di quanti allocati
Vettore d'attacco
- Vulnerabilità zero-click: Nessuna interazione utente richiesta
- Elaborazione automatica: Innescata visualizzando, importando o ricevendo file DNG
- Impatto cross-platform: Colpisce sia sistemi iOS che macOS
- Corruzione della memoria: Può portare a crash dell'applicazione o potenziale esecuzione di codice
Panoramica degli strumenti
Questo repository contiene due strumenti Python per analizzare e riprodurre CVE-2025-43300:
1. Analizzatore di vulnerabilità DNG (dng_vulnerability_analyzer.py)
Scopo: Analizza la struttura dei file DNG per identificare condizioni di vulnerabilità
Caratteristiche principali:
- Analizza la struttura dei file TIFF/DNG inclusi IFD e SubIFD
- Individua i tag metadati SamplesPerPixel
- Identifica i marcatori SOF3 JPEG Lossless e il conteggio componenti
- Rileva incongruenze metadati/flusso
- Riporta gli offset esatti in byte per le modifiche
Utilizzo:
python3 dng_vulnerability_analyzer.py <file.dng>
Output:
- Analisi della struttura del file
- Posizioni e valori dei tag metadati
- Informazioni sui componenti del flusso JPEG
- Valutazione della vulnerabilità
- Offset specifici per la creazione di POC
2. Modificatore esadecimale sicuro (hex_modifier.py)
Scopo: Crea file proof-of-concept modificando in modo sicuro byte specifici
Caratteristiche principali:
- Verifica i valori 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:
# Creare POC utilizzando offset vulnerabili noti
python3 hex_modifier.py create-poc <input.dng>
# Modifica manuale di byte
python3 hex_modifier.py modify <input.dng> <offset> <vecchio_byte> <nuovo_byte> <output.dng>
# Generare report diff
python3 hex_modifier.py diff <originale.dng> <modificato.dng>
Processo di creazione del POC
Passo 1: Analizzare il file target
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Questo identifica:
- Posizione dei metadati SamplesPerPixel
- Posizioni del conteggio componenti SOF3 JPEG
- Valori correnti e modifiche suggerite
Passo 2: Creare un campione vulnerabile
Il POC richiede due modifiche specifiche di byte:
- Aumentare il metadato SamplesPerPixel (tipicamente da 1 a 2)
- Diminuire il conteggio componenti SOF3 (tipicamente da 2 a 1)
python3 hex_modifier.py create-poc IMGP0847.DNG
Passo 3: Verificare il POC
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Conferma che l'incongruenza esiste e la vulnerabilità viene innescata.
Perché il POC funziona
Meccanismo tecnico
-
Fase di allocazione:
- Il parser dell'immagine legge SamplesPerPixel = 2
- Alloca un buffer per 2 componenti di dati pixel
- Dimensione buffer = larghezza_immagine × altezza_immagine × 2
-
Fase di elaborazione:
- Il decoder JPEG Lossless incontra SOF3 con 1 componente
- La logica di parsing si confonde tra dimensione effettiva e attesa dei dati
- Tenta di scrivere dati basandosi su assunzioni inconsistenti
-
Corruzione della memoria:
- Vengono scritti più dati nel buffer di quanto originariamente allocato
- Il buffer overflow corrompe le regioni di memoria adiacenti
- Risulta in un crash dell'applicazione o potenziale esecuzione di codice
I file DNG utilizzano il formato contenitore TIFF con flussi JPEG Lossless incorporati:
- Metadati TIFF descrivono le proprietà dell'immagine e le informazioni sul colore
- Flussi JPEG contengono dati pixel compressi
- Relazione di fiducia esiste tra metadati e contenuto del flusso
- Gap di validazione permette a valori inconsistenti di raggiungere il codice di elaborazione
Valutazione dell'impatto
Gravità: Critica
- Punteggio CVSS: Alto (zero-click, corruzione memoria, ampio impatto)
- Sistemi interessati: iOS 18.6.1, sistemi macOS con elaborazione immagini simile
- Vettore d'attacco: Trasferimento file di rete/locale
- Interazione utente: Nessuna richiesta
- Ambito: Tutti i dispositivi che elaborano file DNG
Scenari reali
- Allegati email con file DNG
- Trasferimenti AirDrop
- Sincronizzazione foto su cloud
- Download web di campioni fotografici
- Condivisione di media tramite app di messaggistica
Mitigazioni 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 immagini di macOS
- Causa principale: Aggiunti controlli di coerenza tra metadati e parametri del flusso
Mitigazioni raccomandate
- Aggiornare i sistemi: Installare iOS 18.6.2 o successivo
- Validazione dell'input: Verificare la coerenza dei metadati in parser personalizzati
- Controllo dei limiti: Implementare una rigorosa validazione della dimensione del buffer
- Fuzzing: Test regolari dei parser di formati file
Struttura del file e dettagli tecnici
Struttura TIFF/DNG
Header TIFF → Catena IFD → SubIFD → Dati immagine
├── Tag metadati (SamplesPerPixel, Compressione, ecc.)
├── Flussi JPEG Lossless (marcatori SOF3)
└── Dati pixel (compressi)
Posizioni chiave della vulnerabilità
- Tag SamplesPerPixel: Tag TIFF 0x0115 nelle strutture IFD
- Marcatori SOF3: Start of Frame JPEG Lossless (0xFFC3)
- Conteggio componenti: Offset byte +9 dal marcatore SOF3
- Disallineamento critico: Quando il valore del tag ≠ conteggio 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 patchati: Gestione degli errori elegante o elaborazione corretta
- Indicatori di log: Violazioni di accesso alla memoria, segmentation fault
Riferimenti tecnici
- Specifica TIFF 6.0: Struttura dei tag e formato IFD
- Specifica DNG: Formato Digital Negative di Adobe
- Standard JPEG: Compressione lossless (ITU-T T.87)
Ricerca sulla sicurezza
- Tecniche di corruzione della memoria: Fondamenti di buffer overflow
- Fuzzing di formati file: Scoperta automatica di vulnerabilità
- Sicurezza dei parser: Best practice per la validazione dell'input
Disclaimer: Questa ricerca è fornita solo a scopo educativo e difensivo. Gli utenti sono responsabili della conformità alle leggi applicabili e alle linee guida etiche.
NOTA
Il crash richiede circa 1-3 minuti per essere innescato. buon divertimento
E per il POC puoi eseguire open vuln_file.dng per avviare il file o semplicemente visualizzarlo in anteprima e verrà eseguito