Rilevamento degli Exploit in File Strutturati (0‑Click Chains)
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Questa pagina riassume tecniche pratiche per rilevare file exploit mobili 0‑click validando invarianti strutturali dei loro formati invece di affidarsi a byte signatures. L’approccio si generalizza attraverso campioni diversi, varianti polimorfiche e futuri exploit che abusano della stessa parser logic.
Idea chiave: codificare impossibilità strutturali e inconsistenze cross‑field che compaiono solo quando viene raggiunto uno stato vulnerabile del decoder/parser.
Vedi anche:
Perché la struttura, non le signatures
Quando campioni weaponized non sono disponibili e i payload bytes mutano, gli schemi tradizionali IOC/YARA falliscono. La detection strutturale ispeziona il layout dichiarato del contenitore rispetto a ciò che è matematicamente o semanticamente possibile per l’implementazione del formato.
Controlli tipici:
- Validare le dimensioni delle tabelle e i limiti derivati dalla spec e dalle implementazioni sicure
- Segnalare opcodes illegali/non documentati o transizioni di stato in embedded bytecode
- Cross‑check metadata VS componenti reali dello stream codificato
- Rilevare campi contraddittori che indicano parser confusion o set‑up per integer overflow
Di seguito pattern concreti, testati sul campo, per più catene ad alto impatto.
PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)
Obiettivo: JBIG2 symbol dictionaries embedded inside PDFs (spesso usati nel parsing MMS su mobile).
Indicatori strutturali:
- Stato del dizionario contraddittorio che non può verificarsi in contenuti benigni ma è richiesto per innescare l’overflow nell’arithmetic decoding.
- Uso sospetto di global segments combinato con conteggi anomali di symbol durante il refinement coding.
Pseudo‑logica:
# 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")
Triage pratico:
- Identificare ed estrarre gli stream JBIG2 dal PDF
- pdfid/pdf-parser/peepdf per localizzare e dumpare gli stream
- Verificare i flag di arithmetic coding e i parametri del symbol dictionary rispetto alla spec JBIG2
Note:
- Funziona senza embedded payload signatures
- Basso FP in pratica perché lo stato segnalato è matematicamente inconsistente
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Obiettivo: WebP lossless (VP8L) Huffman prefix‑code tables.
Segnali strutturali:
- La dimensione totale delle tabelle Huffman costruite supera il limite superiore sicuro previsto dalle implementazioni reference/patched, implicando la precondizione per un overflow.
Pseudo‑logica:
# 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")
Triage pratico:
- Controllare i chunk del container WebP: VP8X + VP8L
- Analizzare i VP8L prefix codes e calcolare le dimensioni effettivamente allocate delle tabelle
Note:
- Robusto contro il byte‑level polymorphism del payload
- Bound è derivato dai limiti upstream/dall’analisi delle patch
TrueType – TRIANGULATION (CVE‑2023‑41990)
Target: TrueType bytecode all’interno dei programmi fpgm/prep/glyf.
Segnali strutturali:
- Presenza di opcode non documentati/proibiti nell’interprete di Apple usato dalla exploit chain.
Pseudo‑logica:
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Triage pratico:
- Estrarre le tabelle dei font (es., usando fontTools/ttx) e scansionare i programmi fpgm/prep/glyf
- Non è necessario emulare completamente l’interprete per ottenere valore dai presence checks
Note:
- Potrebbe produrre rari falsi positivi (FPs) se font non standard includono opcode sconosciuti; convalida con strumenti secondari
DNG/TIFF – CVE‑2025‑43300
Obiettivo: metadati immagine DNG/TIFF VS reale numero di componenti nel flusso codificato (es., JPEG‑Lossless SOF3).
Segnali strutturali:
- Incoerenza tra i campi EXIF/IFD (SamplesPerPixel, PhotometricInterpretation) e il conteggio dei componenti analizzato dall’header del flusso immagine usato dalla pipeline.
Pseudo‑logica:
# 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")
Triage pratico:
- Analizzare IFD primario e tag EXIF
- Individuare e analizzare l’header JPEG‑Lossless incorporato (SOF3) e confrontare il conteggio dei componenti
Note:
- Segnalato come sfruttato nel mondo reale; eccellente candidato per controlli di consistenza strutturale
DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Appended ZIP payload (LANDFALL)
Obiettivo: immagini DNG (derivate da TIFF) che contengono un archivio ZIP incorporato aggiunto alla fine del file (EOF) per eseguire payload nativi dopo RCE del parser.
Segnali strutturali:
- La magic del file indica TIFF/DNG (
II*\x00orMM\x00*) ma il nome del file imita JPEG (es.,.jpg/.jpegcome avviene con WhatsApp). - Presenza di un ZIP Local File Header o di una magic EOCD vicino alla EOF (
PK\x03\x04orPK\x05\x06) che non è referenziata da nessuna regione dati TIFF IFD (strips/tiles/JPEGInterchangeFormat). - Dati finali insolitamente grandi oltre l’ultimo blocco dati IFD referenziato (centinaia di KB fino a MB), coerenti con un archivio incluso di moduli .so.
Pseudo‑logica:
# Detect appended ZIP payload hidden after DNG/TIFF data (Samsung chain)
if is_tiff_dng(magic):
ext = file_extension()
if ext in {".jpg", ".jpeg"}: mark_suspicious("Extension/magic mismatch: DNG vs JPEG")
zip_off = rfind_any(["PK\x05\x06", "PK\x03\x04"], search_window_last_n_bytes=8*1024*1024)
if zip_off >= 0:
end_dng = approx_end_of_tiff_data() # max(end of Strip/Tile/JPEGInterchangeFormat regions)
if zip_off > end_dng + 0x200:
mark_malicious("DNG with appended ZIP payload (LANDFALL‑style)")
Triage pratico:
- Identificare formato vs nome:
- file sample; exiftool -s -FileType -MIMEType sample
- Individuare footer/header ZIP vicino a EOF e carve:
- off=$(grep -aboa -E $‘PK\x05\x06|PK\x03\x04’ sample.dng | tail -n1 | cut -d: -f1)
- dd if=sample.dng of=payload.zip bs=1 skip=“$off”
- zipdetails -v payload.zip; unzip -l payload.zip
- Verifica di sanità: le regioni dati TIFF non si sovrappongono alla carved ZIP region:
- tiffdump -D sample.dng | egrep ‘StripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLength’
- Verify
max(offset+length) << zip_off - One‑shot carving (coarse): binwalk -eM sample.dng
Notes:
- Exploited in the wild against Samsung’s libimagecodec.quram.so (CVE‑2025‑21042). The appended ZIP contained native modules (e.g., loader + SELinux policy editor) extracted/executed post‑RCE.
Modelli di implementazione e prestazioni
Uno scanner pratico dovrebbe:
- Rilevare automaticamente il tipo di file e dispatchare solo gli analyzers rilevanti (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
- Stream/partial‑parse per minimizzare le allocazioni e abilitare la terminazione anticipata
- Eseguire le analisi in parallelo (thread‑pool) per il triage di massa
Esempio di workflow con ElegantBouncer (implementazione Rust open‑source di questi controlli):
# 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
Consigli DFIR e casi limite
- Oggetti incorporati: i PDF possono incorporare immagini (JBIG2) e font (TrueType); estrarre e scansionare ricorsivamente
- Sicurezza nella decompressione: usare librerie che impongano limiti rigidi a tabelle/buffer prima dell’allocazione
- Falsi positivi: mantenere regole conservative, favorire contraddizioni impossibili secondo la specifica
- Deriva di versione: ricalibrare i limiti di riferimento (p.es., dimensioni delle tabelle VP8L) quando i parser a monte cambiano i limiti
Strumenti correlati
- ElegantBouncer – scanner strutturale per le rilevazioni precedenti
- pdfid/pdf-parser/peepdf – estrazione di oggetti PDF e analisi statica
- pdfcpu – linter/sanitizzatore per PDF
- fontTools/ttx – dump delle tabelle TrueType e del bytecode
- exiftool – lettura dei metadata TIFF/DNG/EXIF
- dwebp/webpmux – analizza i metadata e i chunk di WebP
Riferimenti
- 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
- LANDFALL: New Commercial-Grade Android Spyware in Exploit Chain Targeting Samsung Devices
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

