CVE-2025-43300: Corrupção de Memória no Processamento de Imagens DNG no iOS/macOS
Visão Geral
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 fluxo JPEG em arquivos DNG.
Detalhes da Vulnerabilidade
Causa Raiz
A vulnerabilidade decorre de uma inconsistência entre metadados e fluxo em arquivos DNG (Digital Negative):
- Os metadados SamplesPerPixel nos cabeçalhos TIFF indicam os componentes de cor esperados
- A contagem de componentes SOF3 nos fluxos JPEG Lossless especifica os componentes de dados reais
- Quando esses valores diferem, a alocação e o processamento tornam-se 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 escritos do que alocados
Vetor de Ataque
- Vulnerabilidade zero-clique: Nenhuma interação do usuário necessária
- Processamento automático: Acionado ao visualizar, importar ou receber arquivos DNG
- Impacto multiplataforma: Afeta sistemas iOS e macOS
- Corrupção de memória: Pode levar a falhas na aplicação ou potencial execução de código
Visão Geral das Ferramentas
Este repositório contém duas ferramentas Python para analisar e reproduzir o CVE-2025-43300:
1. Analisador de Vulnerabilidade DNG (dng_vulnerability_analyzer.py)
Propósito: Analisa a estrutura do arquivo DNG para identificar condições de vulnerabilidade
Principais Características:
- Analisa a estrutura do arquivo TIFF/DNG, incluindo IFDs e SubIFDs
- Localiza tags de metadados SamplesPerPixel
- Identifica marcadores SOF3 JPEG Lossless e contagens de componentes
- Detecta inconsistências entre metadados e fluxo
- Relata deslocamentos exatos em 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 fluxo JPEG
- Avaliação da vulnerabilidade
- Deslocamentos específicos para criação de POC
2. Modificador Hex Seguro (hex_modifier.py)
Propósito: Cria arquivos de prova de conceito (POC) modificando bytes específicos com segurança
Principais Características:
- Verifica valores de byte 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 manual e automatizada de POC
Uso:
# Criar POC usando deslocamentos vulneráveis conhecidos
python3 hex_modifier.py create-poc <input.dng>
# Modificação manual de byte
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
Passo 1: Analisar o Arquivo Alvo
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Isso identifica:
- Localização dos metadados SamplesPerPixel
- Localizações da contagem de componentes SOF3 JPEG
- Valores atuais e modificações sugeridas
Passo 2: Criar Amostra Vulnerável
O POC requer duas modificações específicas de byte:
- Aumentar metadados SamplesPerPixel (tipicamente de 1 para 2)
- Diminuir contagem de componentes SOF3 (tipicamente de 2 para 1)
python3 hex_modifier.py create-poc IMGP0847.DNG
Passo 3: Verificar POC
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Confirma que a inconsistência existe e a vulnerabilidade é acionada.
Por que o POC Funciona
Mecanismo Técnico
-
Fase de Alocação:
- O parser de imagem lê SamplesPerPixel = 2
- Aloca buffer para dados de pixel de 2 componentes
- 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 escrever dados com base em suposições inconsistentes
-
Corrupção de Memória:
- Mais dados são escritos no buffer do que originalmente alocado
- O estouro de buffer corrompe regiões de memória adjacentes
- Resulta em falha na aplicação ou potencial execução de código
Arquivos DNG usam o formato contêiner TIFF com fluxos JPEG Lossless embutidos:
- Metadados TIFF descrevem propriedades da imagem e informações de cor
- Fluxos JPEG contêm dados de pixel comprimidos
- Relação de confiança existe entre metadados e conteúdo do fluxo
- Lacuna de validação permite que valores inconsistentes atinjam o código de processamento
Avaliação de Impacto
Gravidade: Crítica
- Pontuação CVSS: Alta (zero-clique, corrupção de memória, amplo impacto)
- Sistemas Afetados: iOS 18.6.1, sistemas macOS com processamento de imagem similar
- Vetor de Ataque: Transferência de arquivo em 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 similares aplicadas ao processamento de imagem do macOS
- Causa raiz: Adicionadas verificações de consistência entre metadados e parâmetros do fluxo
Mitigações Recomendadas
- Atualize os sistemas: Instale iOS 18.6.2 ou superior
- Validação de entrada: Verifique a consistência dos metadados em parsers personalizados
- Verificação de limites: Implemente validação rigorosa de tamanho de buffer
- Fuzzing: Teste regular de parsers de formato de arquivo
Estrutura do Arquivo e Detalhes Técnicos
Estrutura TIFF/DNG
Cabeçalho TIFF → Cadeia IFD → SubIFDs → Dados da Imagem
├── Tags de Metadados (SamplesPerPixel, Compression, etc.)
├── Fluxos JPEG Lossless (marcadores SOF3)
└── Dados de Pixel (comprimidos)
Principais Localizações da Vulnerabilidade
- Tag SamplesPerPixel: Tag TIFF 0x0115 em estruturas IFD
- Marcadores SOF3: Start of Frame JPEG Lossless (0xFFC3)
- Contagem de Componentes: Deslocamento 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 falha
- Isolamento de rede: Evite compartilhamento não intencional de arquivos
Comportamento Esperado
- Sistemas vulneráveis: Falha na aplicação, erros de corrupção de memória
- Sistemas corrigidos: Tratamento de erros gracioso ou processamento correto
- Indicadores de log: 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: Compressã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 formato de arquivo: Descoberta automatizada de vulnerabilidades
- Segurança de parsers: Melhores práticas de validação de entrada
Aviso: Esta pesquisa é fornecida apenas para fins educacionais e de defesa de segurança. Os usuários são responsáveis pela conformidade com as leis aplicáveis e diretrizes éticas.
NOTA
O crash leva cerca de 1 a 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