
Analisi tecnica dettagliata di CVE-2025-43300, una vulnerabilità di buffer overflow nell'elaborazione di file DNG che consente l'esecuzione remota di codice. Spiega l'inconsistenza dei metadati TIFF/JPEG, i meccanismi di corruzione della memoria e il flusso dello sfruttamento.
La CVE-2025-43300 è una vulnerabilità di buffer overflow nell'elaborazione dei file DNG (Digital Negative) che si verifica a causa di una incoerenza tra metadati TIFF e dati JPEG, consentendo l'esecuzione remota di codice (RCE).
DNG File
├── TIFF Container (metadati)
│ ├── Header
│ ├── IFD (Image File Directory)
│ │ ├── Tag 277: SamplesPerPixel (dichiara quanti componenti)
│ │ ├── Tag 513: JpegOffset (dove inizia il JPEG)
│ │ └── Tag 514: JpegLength (dimensione del JPEG)
│ └── Altri metadati
└── JPEG Data (dati reali dell'immagine)
├── SOI (Start of Image)
├── SOF0 (Frame Header)
│ └── Components: numero reale di componenti
└── Compressed Data
// PROBLEMA FONDAMENTALE:
TIFF dichiara: "Questa immagine ha 2 componenti" (SamplesPerPixel = 2)
JPEG contiene: "In realtà ho 3 componenti" (SOF0 Components = 3)
// Codice vulnerabile (semplificato)
int samples = read_tiff_tag(277); // Legge 2
buffer = malloc(samples * sizeof(component)); // Alloca per 2
// Ma elabora in base al JPEG
int components = read_jpeg_sof0(); // Legge 3
for (int i = 0; i < components; i++) { // Loop 3 volte!
buffer[i] = process_component(i); // OVERFLOW a i=2!
}
[1] APERTURA DEL FILE
↓
[2] PARSER TIFF
├─→ Legge Header TIFF
├─→ Trova IFD
├─→ Legge Tag 277 (SamplesPerPixel = 2)
└─→ Alloca buffer per 2 componenti
[3] LOCALIZZAZIONE DEL JPEG
├─→ Legge Tag 513 (offset del JPEG)
└─→ Naviga fino alla posizione nel file
[4] PARSER JPEG
├─→ Legge marcatore SOF0 (0xFFC0)
├─→ Estrae numero di componenti (3)
└─→ NON VALIDA contro TIFF!
[5] ELABORAZIONE
├─→ Loop per elaborare 3 componenti
├─→ Buffer ha spazio solo per 2
└─→ 3° componente scrive FUORI dal buffer
[6] BUFFER OVERFLOW
├─→ Sovrascrive dati adiacenti
├─→ Può sovrascrivere indirizzo di ritorno
└─→ Permette controllo dell'esecuzione
[7] ESECUZIONE DI CODICE
└─→ Attaccante controlla il flusso del programma
Stack Layout:
+----------------+ ← Cima
| Buffer (2 comp)| [Componente 0]
| | [Componente 1]
+----------------+
| Dati locali |
+----------------+
| Frame Pointer |
+----------------+
| Return Address | ← Indirizzo di ritorno
+----------------+
Stack Layout:
+----------------+
| Buffer (2 comp)| [Componente 0]
| | [Componente 1]
+----------------+
| Dati locali | [Componente 2] ← OVERFLOW!
+----------------+
| Frame Pointer | [Sovrascritto]
+----------------+
| Return Address | [Controllato dall'attaccante]
+----------------+