
Analyse technique détaillée de CVE-2025-43300, une vulnérabilité de dépassement de tampon dans le traitement de fichiers DNG permettant l'exécution de code à distance. Explique l'incohérence des métadonnées TIFF/JPEG, les mécanismes de corruption mémoire et le déroulement de l'exploitation.
La CVE-2025-43300 est une vulnérabilité de dépassement de tampon (buffer overflow) dans le traitement des fichiers DNG (Digital Negative) qui se produit en raison d'une incohérence entre les métadonnées TIFF et les données JPEG, permettant l'exécution de code à distance (RCE).
DNG File
├── TIFF Container (metadados)
│ ├── Header
│ ├── IFD (Image File Directory)
│ │ ├── Tag 277: SamplesPerPixel (declara quantos componentes)
│ │ ├── Tag 513: JpegOffset (onde começa o JPEG)
│ │ └── Tag 514: JpegLength (tamanho do JPEG)
│ └── Outros metadados
└── JPEG Data (dados reais da imagem)
├── SOI (Start of Image)
├── SOF0 (Frame Header)
│ └── Components: número real de componentes
└── Compressed Data
// PROBLEMA FUNDAMENTAL:
TIFF declara: "Esta imagem tem 2 componentes" (SamplesPerPixel = 2)
JPEG contém: "Na verdade tenho 3 componentes" (SOF0 Components = 3)
// Código vulnerável (simplificado)
int samples = read_tiff_tag(277); // Lê 2
buffer = malloc(samples * sizeof(component)); // Aloca para 2
// Mas processa baseado no JPEG
int components = read_jpeg_sof0(); // Lê 3
for (int i = 0; i < components; i++) { // Loop 3 vezes!
buffer[i] = process_component(i); // OVERFLOW no i=2!
}
[1] ABERTURA DO ARQUIVO
↓
[2] PARSER TIFF
├─→ Lê Header TIFF
├─→ Localiza IFD
├─→ Lê Tag 277 (SamplesPerPixel = 2)
└─→ Aloca buffer para 2 componentes
[3] LOCALIZAÇÃO DO JPEG
├─→ Lê Tag 513 (offset do JPEG)
└─→ Navega até posição no arquivo
[4] PARSER JPEG
├─→ Lê marcador SOF0 (0xFFC0)
├─→ Extrai número de componentes (3)
└─→ NÃO VALIDA contra TIFF!
[5] PROCESSAMENTO
├─→ Loop para processar 3 componentes
├─→ Buffer só tem espaço para 2
└─→ 3º componente escreve FORA do buffer
[6] BUFFER OVERFLOW
├─→ Sobrescreve dados adjacentes
├─→ Pode sobrescrever endereço de retorno
└─→ Possibilita controle de execução
[7] EXECUÇÃO DE CÓDIGO
└─→ Atacante controla fluxo do programa
Stack Layout:
+----------------+ ← Topo
| Buffer (2 comp)| [Componente 0]
| | [Componente 1]
+----------------+
| Dados locais |
+----------------+
| Frame Pointer |
+----------------+
| Return Address | ← Endereço para retornar
+----------------+
Stack Layout:
+----------------+
| Buffer (2 comp)| [Componente 0]
| | [Componente 1]
+----------------+
| Dados locais | [Componente 2] ← OVERFLOW!
+----------------+
| Frame Pointer | [Sobrescrito]
+----------------+
| Return Address | [Controlado pelo atacante]
+----------------+