CVE-2025-43300: Corrupção de Memória no Processamento de Imagens DNG em iOS/macOS
Visão Geral
A CVE-2025-43300 é uma vulnerabilidade crítica de corrupção de memória no framework de processamento de imagens da Apple que afeta iOS 18.6.1 e sistemas macOS. A vulnerabilidade existe no código de descompressão JPEG Lossless dentro do RawCamera.bundle, acionada por inconsistências entre os metadados TIFF e os parâmetros do stream JPEG em arquivos DNG.
Detalhes da Vulnerabilidade
Causa Raiz
A vulnerabilidade decorre de uma inconsistência metadados/stream em arquivos DNG (Digital Negative):
- Os metadados SamplesPerPixel nos cabeçalhos TIFF indicam os componentes de cor esperados
- A contagem de componentes SOF3 nos streams JPEG Lossless especifica os componentes de dados reais
- Quando esses valores diferem, a alocação e o processamento ficam desalinhados
Fluxo de Corrupção de Memória
1. O parser lê SamplesPerPixel dos metadados TIFF (ex.: 2 componentes)
2. O sistema aloca buffer: largura × altura × 2 componentes
3. O decodificador JPEG lê a contagem de componentes SOF3 (ex.: 1 componente)
4. O decodificador grava dados com base em suposições inconsistentes
5. Ocorre estouro de buffer quando mais dados são gravados do que o alocado
Vetor de Ataque
- Vulnerabilidade zero-click: Nenhuma interação do usuário é necessária
- Processamento automático: Acionada ao visualizar, importar ou receber arquivos DNG
- Impacto multiplataforma: Afeta tanto sistemas iOS quanto macOS
- Corrupção de memória: Pode levar a falhas de aplicativos ou possível execução de código
Visão Geral das Ferramentas
Este repositório contém duas ferramentas Python para analisar e reproduzir a CVE-2025-43300:
1. Analisador de Vulnerabilidade DNG (dng_vulnerability_analyzer.py)
Finalidade: Analisa a estrutura de arquivos DNG para identificar condições de vulnerabilidade
Principais Recursos:
- Analisa a estrutura de arquivos TIFF/DNG incluindo IFDs e SubIFDs
- Localiza tags de metadados SamplesPerPixel
- Identifica marcadores SOF3 JPEG Lossless e contagens de componentes
- Detecta inconsistências metadados/stream
- Relata offsets exatos de bytes para modificação
Uso:
python3 dng_vulnerability_analyzer.py <dng_file>
Saída:
- Análise da estrutura do arquivo
- Localizações e valores das tags de metadados
- Informações dos componentes do stream JPEG
- Avaliação de vulnerabilidade
- Offsets específicos para criação de POC
2. Modificador Hex Seguro (hex_modifier.py)
Finalidade: Cria arquivos proof-of-concept modificando bytes específicos com segurança
Principais Recursos:
- Verifica os valores de bytes esperados antes da modificação
- Cria hashes SHA256 para rastreamento de arquivos
- Gera relatórios de diff binário
- Implementa verificações de segurança para evitar corrupção acidental
- Suporta criação de POC manual e automatizada
Uso:
# Criar POC usando offsets vulneráveis conhecidos
python3 hex_modifier.py create-poc <input.dng>
# Modificação manual de bytes
python3 hex_modifier.py modify <input.dng> <offset> <old_byte> <new_byte> <output.dng>
# Gerar relatório de diff
python3 hex_modifier.py diff <original.dng> <modified.dng>
Processo de Criação de POC
Etapa 1: Analisar o Arquivo Alvo
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Isso identifica:
- Localização dos metadados SamplesPerPixel
- Localizações das contagens de componentes SOF3 JPEG
- Valores atuais e modificações sugeridas
Etapa 2: Criar Amostra Vulnerável
O POC requer duas modificações específicas de bytes:
- Aumentar os metadados SamplesPerPixel (normalmente de 1 para 2)
- Diminuir a contagem de componentes SOF3 (normalmente de 2 para 1)
python3 hex_modifier.py create-poc IMGP0847.DNG
Etapa 3: Verificar o POC
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Confirma que a inconsistência existe e que a vulnerabilidade é acionada.
Por que o POC Funciona
Mecanismo Técnico
-
Fase de Alocação:
- O parser de imagens lê SamplesPerPixel = 2
- Aloca buffer para 2 componentes de dados de pixel
- Tamanho do buffer = largura_da_imagem × altura_da_imagem × 2
-
Fase de Processamento:
- O decodificador JPEG Lossless encontra SOF3 com 1 componente
- A lógica de parsing fica confusa sobre o tamanho real vs. esperado dos dados
- Tenta gravar dados com base em suposições inconsistentes
-
Corrupção de Memória:
- Mais dados são gravados no buffer do que o originalmente alocado
- O estouro de buffer corrompe regiões adjacentes da memória
- Resulta em falha do aplicativo ou possível execução de código
Arquivos DNG usam o formato contêiner TIFF com streams JPEG Lossless embutidos:
- Metadados TIFF descrevem propriedades da imagem e informações de cor
- Streams JPEG contêm dados de pixel compactados
- Relação de confiança existe entre os metadados e o conteúdo do stream
- Lacuna de validação permite que valores inconsistentes cheguem ao código de processamento
Avaliação de Impacto
Gravidade: Crítica
- Pontuação CVSS: Alta (zero-click, corrupção de memória, amplo impacto)
- Sistemas Afetados: iOS 18.6.1, sistemas macOS com processamento de imagens semelhante
- Vetor de Ataque: Transferência de arquivos por rede/local
- Interação do Usuário: Nenhuma necessária
- Escopo: Todos os dispositivos que processam arquivos DNG
Cenários do Mundo Real
- Anexos de e-mail com arquivos DNG
- Transferências AirDrop
- Sincronização de fotos na nuvem
- Downloads web de amostras de fotógrafos
- Compartilhamento de mídia em aplicativos de mensagens
Mitigação e Correções
Resposta do Fornecedor
- Corrigido no iOS 18.6.2: A Apple implementou validação adequada de metadados
- Atualizações do macOS: Correções semelhantes aplicadas ao processamento de imagens do macOS
- Causa raiz: Adicionadas verificações de consistência entre metadados e parâmetros do stream
Mitigações Recomendadas
- Atualizar sistemas: Instale iOS 18.6.2 ou posterior
- Validação de entrada: Verifique a consistência dos metadados em parsers personalizados
- Verificação de limites: Implemente validação rigorosa do tamanho do buffer
- Fuzzing: Testes regulares de parsers de formato de arquivo
Estrutura do Arquivo e Detalhes Técnicos
Estrutura TIFF/DNG
TIFF Header → IFD Chain → SubIFDs → Image Data
├── Tags de Metadados (SamplesPerPixel, Compression, etc.)
├── Streams JPEG Lossless (marcadores SOF3)
└── Dados de Pixel (compactados)
Principais Localizações da Vulnerabilidade
- Tag SamplesPerPixel: Tag TIFF 0x0115 em estruturas IFD
- Marcadores SOF3: Início do Quadro JPEG Lossless (0xFFC3)
- Contagem de Componentes: Offset de byte +9 a partir do marcador SOF3
- Incompatibilidade Crítica: Quando o valor da tag ≠ contagem de componentes
Diretrizes de Teste
Ambiente de Teste Seguro
- Use sistemas isolados: VMs ou dispositivos de teste dedicados
- Crie snapshots: Antes de testar arquivos POC
- Monitore falhas: Verifique logs do sistema e relatórios de crash
- Isolamento de rede: Evite compartilhamento não intencional de arquivos
Comportamento Esperado
- Sistemas vulneráveis: Falha do aplicativo, erros de corrupção de memória
- Sistemas corrigidos: Tratamento de erro gracioso ou processamento correto
- Indicadores em logs: Violações de acesso à memória, falhas de segmentação
Referências Técnicas
- Especificação TIFF 6.0: Estrutura de tags e formato IFD
- Especificação DNG: Formato Digital Negative da Adobe
- Padrão JPEG: Compactação sem perdas (ITU-T T.87)
Pesquisa de Segurança
- Técnicas de corrupção de memória: Fundamentos de estouro de buffer
- Fuzzing de formatos de arquivo: Descoberta automatizada de vulnerabilidades
- Segurança de parsers: Melhores práticas de validação de entrada
Aviso Legal: Esta pesquisa é fornecida apenas para fins educacionais e de segurança defensiva. Os usuários são responsáveis pelo cumprimento das leis e diretrizes éticas aplicáveis.
NOTA
O crash leva cerca de 1-3 minutos para ser acionado. divirta-se
E para o POC você pode executar open vuln_file.dng para rodar o arquivo ou apenas pré-visualizá-lo e ele será executado