Detecção Estrutural de Exploits em Formatos de Arquivo (0‑Click Chains)

Reading time: 7 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Esta página resume técnicas práticas para detectar arquivos de exploit 0‑click para dispositivos móveis validando invariantes estruturais de seus formatos em vez de depender de assinaturas de bytes. A abordagem se generaliza entre amostras, variantes polimórficas e explorações futuras que abusem da mesma lógica do parser.

Ideia chave: codificar impossibilidades estruturais e inconsistências entre campos que só aparecem quando um estado vulnerável do decoder/parser é atingido.

Veja também:

PDF File analysis

Por que estrutura, não assinaturas

Quando amostras armadas não estão disponíveis e os bytes do payload mutam, padrões tradicionais IOC/YARA falham. A detecção estrutural inspeciona o layout declarado do container versus o que é matematicamente ou semanticamente possível para a implementação do formato.

Verificações típicas:

  • Validar tamanhos de tabelas e limites derivados da especificação e de implementações seguras
  • Sinalizar opcodes ilegais/não documentados ou transições de estado em bytecode embutido
  • Conferir metadados VS componentes reais do fluxo codificado
  • Detectar campos contraditórios que indiquem confusão do parser ou armadilhas para integer overflow

A seguir estão padrões concretos, testados em campo, para múltiplas cadeias de alto impacto.


PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)

Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).

Sinais estruturais:

  • Estado contraditório do dicionário que não pode ocorrer em conteúdo benigno, mas que é necessário para disparar o estouro na decodificação aritmética.
  • Uso suspeito de segmentos globais combinado com contagens de símbolos anormais durante o refinement coding.

Pseudo‑lógica:

pseudo
# Detecting impossible dictionary state used by FORCEDENTRY
if input_symbols_count == 0 and (ex_syms > 0 and ex_syms < 4):
mark_malicious("JBIG2 impossible symbol dictionary state")

Triagem prática:

  • Identificar e extrair streams JBIG2 do PDF
  • pdfid/pdf-parser/peepdf para localizar e volcar streams
  • Verificar os arithmetic coding flags e os parâmetros do symbol dictionary em relação à especificação JBIG2

Notes:

  • Funciona sem embedded payload signatures
  • Baixa taxa de FP na prática porque o estado sinalizado é matematicamente inconsistente

WebP/VP8L – BLASTPASS (CVE‑2023‑4863)

Alvo: tabelas Huffman de prefix‑code do WebP lossless (VP8L).

Sinais estruturais:

  • O tamanho total das tabelas Huffman construídas excede o limite superior seguro esperado pelas implementações de referência/patchadas, implicando a precondição de overflow.

Pseudo‑lógica:

pseudo
# Detect malformed Huffman table construction triggering overflow
let total_size = sum(table_sizes)
if total_size > 2954:   # example bound: FIXED_TABLE_SIZE + MAX_TABLE_SIZE
mark_malicious("VP8L oversized Huffman tables")

Triagem prática:

  • Verificar chunks do container WebP: VP8X + VP8L
  • Analisar VP8L prefix codes e calcular os tamanhos reais das tabelas alocadas

Notas:

  • Robusto contra o polimorfismo a nível de bytes do payload
  • O limite é derivado de limites upstream/análise de patches

TrueType – TRIANGULATION (CVE‑2023‑41990)

Target: TrueType bytecode inside fpgm/prep/glyf programs.

Sinais estruturais:

  • Presença de opcodes não documentados/proibidos no interpretador da Apple usados pela exploit chain.

Pseudo‑lógica:

pseudo
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue

Triagem prática:

  • Extrair tabelas de fontes (por exemplo, usando fontTools/ttx) e verificar programas fpgm/prep/glyf
  • Não é necessário emular totalmente o interpretador para extrair valor de checagens de presença

Notes:

  • Pode produzir FPs raros se fontes não padronizadas incluírem opcodes desconhecidos; valide com ferramentas secundárias

DNG/TIFF – CVE‑2025‑43300

Target: DNG/TIFF image metadata VS actual component count in encoded stream (e.g., JPEG‑Lossless SOF3).

Sinais estruturais:

  • Inconsistência entre os campos EXIF/IFD (SamplesPerPixel, PhotometricInterpretation) e a contagem de componentes analisada a partir do cabeçalho do fluxo de imagem usado pelo pipeline.

Pseudo‑lógica:

pseudo
# Metadata claims 2 samples per pixel but stream header exposes only 1 component
if samples_per_pixel == 2 and sof3_components == 1:
mark_malicious("DNG/TIFF metadata vs. stream mismatch")

Triagem prática:

  • Analisar as tags IFD e EXIF primárias
  • Localizar e analisar o cabeçalho JPEG‑Lossless embutido (SOF3) e comparar contagens de componentes

Notas:

  • Relatado como explorado em ambientes reais; excelente candidato para verificações de consistência estrutural

Padrões de implementação e desempenho

Um scanner prático deve:

  • Detectar automaticamente o tipo de arquivo e acionar apenas os analisadores relevantes (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
  • Processar por streaming/parse parcial para minimizar alocações e permitir término antecipado
  • Executar análises em paralelo (thread‑pool) para triagem em massa

Exemplo de fluxo de trabalho com ElegantBouncer (implementação open‑source em Rust dessas verificações):

bash
# Scan a path recursively with structural detectors
$ elegant-bouncer --scan /path/to/directory

# Optional TUI for parallel scanning and real‑time alerts
$ elegant-bouncer --tui --scan /path/to/samples

Dicas de DFIR e casos de borda

  • Objetos embutidos: PDFs podem embutir imagens (JBIG2) e fontes (TrueType); extrair e escanear recursivamente
  • Segurança na descompressão: use bibliotecas que limitem estritamente tabelas/buffers antes da alocação
  • Falsos positivos: mantenha regras conservadoras, favoreça contradições que sejam impossíveis segundo a especificação
  • Deriva de versão: reestabelecer limites de referência (e.g., tamanhos de tabela VP8L) quando parsers a montante mudarem limites

Ferramentas relacionadas

  • ElegantBouncer – scanner estrutural para as detecções acima
  • pdfid/pdf-parser/peepdf – extração de objetos PDF e análise estática
  • pdfcpu – linter/sanitizador de PDF
  • fontTools/ttx – extrair tabelas TrueType e bytecode
  • exiftool – ler metadados TIFF/DNG/EXIF
  • dwebp/webpmux – analisar metadados e chunks WebP

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks