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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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:
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:
# 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:
# 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:
# 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:
# 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):
# 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
- ELEGANTBOUNCER: When You Can't Get the Samples but Still Need to Catch the Threat
- ElegantBouncer project (GitHub)
- Researching FORCEDENTRY: Detecting the exploit with no samples
- Researching BLASTPASS – Detecting the exploit inside a WebP file (Part 1)
- Researching BLASTPASS – Analysing the Apple & Google WebP PoC file (Part 2)
- Researching TRIANGULATION – Detecting CVE‑2023‑41990 with single‑byte signatures
- CVE‑2025‑43300: Critical vulnerability found in Apple’s DNG image processing
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.