Otkrivanje eksploita u strukturnim formatima fajlova (0‑Click Chains)
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ova stranica sumira praktične tehnike za detekciju 0‑click mobilnih exploit fajlova proverom strukturnih invarijanata njihovih formata umesto oslanjanja na byte potpise. Pristup se generalizuje preko uzoraka, polimorfnih varijanti i budućih eksploita koji zloupotrebljavaju istu parser logiku.
Ključna ideja: enkodirati strukturne nemogućnosti i kontradikcije između polja koje se pojavljuju samo kada je postignuto ranjivo stanje decoder/parser‑a.
See also:
Zašto struktura, a ne potpisi
Kada oružani uzorci nisu dostupni i payload bajtovi mutiraju, tradicionalni IOC/YARA paterni zakažu. Strukturna detekcija ispituje deklarisani raspored kontejnera naspram onoga što je matematički ili semantički moguće za implementaciju formata.
Tipične provere:
- Validirati veličine tabela i granice izvedene iz specifikacije i sigurnih implementacija
- Označiti ilegalne/neudokumentovane opkodove ili prelaze stanja u ugrađenom bytecode‑u
- Uporediti metadata VS stvarne komponente enkodovanog stream‑a
- Detektovati kontradiktorna polja koja ukazuju na konfuziju parser‑a ili postavke za integer overflow
Ispod su konkretni, na terenu testirani paterni za više high‑impact lanaca.
PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)
Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).
Strukturni signali:
- Kontradiktorno stanje rečnika koje se ne može pojaviti u benignom sadržaju, a neophodno je da bi se izazvao overflow u arithmetic decoding.
- Sumnjiva upotreba global segments u kombinaciji sa abnormalnim brojem simbola tokom refinement coding.
Pseudo‑logic:
# 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")
Praktična trijaža:
- Identifikujte i izdvojite JBIG2 streams iz PDF-a
- Koristite pdfid/pdf-parser/peepdf za lociranje i dumpovanje streamova
- Proverite arithmetic coding flags i parametre symbol dictionary u odnosu na JBIG2 spec
Beleške:
- Radi bez ugrađenih payload potpisa
- Nizak FP u praksi zato što je označeno stanje matematički nekonzistentno
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Cilj: WebP lossless (VP8L) Huffman prefix‑code tables.
Strukturni signali:
- Ukupna veličina konstruisanih Huffman tabela prelazi bezbedni gornji prag očekivan od reference/patched implementacija, što implicira preuslov za overflow.
Pseudo‑logika:
# 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")
Practical triage:
- Proveri WebP container chunks: VP8X + VP8L
- Parsiraj VP8L prefix codes i izračunaj stvarne dodeljene veličine tabela
Notes:
- Otporno na polimorfizam na nivou bajta u payload‑u
- Granica je izvedena iz upstream ograničenja i analize patch‑eva
TrueType – TRIANGULATION (CVE‑2023‑41990)
Target: TrueType bytecode inside fpgm/prep/glyf programs.
Structural signals:
- Prisutnost nedokumentovanih/zabranjenih opcodes u Apple‑ovom interpreteru koji koristi exploit chain.
Pseudo‑logic:
# Flag undocumented TrueType bytecode leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Practical triage:
- Izdvojite font tabele (npr. koristeći fontTools/ttx) i skenirajte fpgm/prep/glyf programe
- Nije potrebno potpuno emulirati interpreter da biste izvukli vrednost iz provera prisustva
Notes:
- Može proizvesti retke lažno pozitivne rezultate ako nestandardni fontovi sadrže nepoznate opkodove; verifikujte sekundarnim alatima
DNG/TIFF – CVE‑2025‑43300
Target: DNG/TIFF image metadata nasuprot stvarnom broju komponenti u enkodovanom streamu (npr. JPEG‑Lossless SOF3).
Structural signals:
- Nedoslednost između EXIF/IFD polja (SamplesPerPixel, PhotometricInterpretation) i broja komponenti parsiranog iz zaglavlja image stream-a koje koristi pipeline.
Pseudo‑logic:
# 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")
Praktična trijaža:
- Parsirati primarne IFD i EXIF tagove
- Pronaći i parsirati ugrađeno JPEG‑Lossless zaglavlje (SOF3) i uporediti broj komponenti
Napomene:
- Prijavljeno iskorišćavano u stvarnom svetu; odličan kandidat za provere strukturne konzistentnosti
DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Appended ZIP payload (LANDFALL)
Target: DNG (TIFF‑derived) images carrying an embedded ZIP archive appended at EOF to stage native payloads after parser RCE.
Strukturni signali:
- File magic ukazuje na TIFF/DNG (
II*\x00orMM\x00*) ali ime fajla imitira JPEG (npr..jpg/.jpegu WhatsApp imenovanju). - Prisutnost ZIP Local File Header ili EOCD magic blizu EOF (
PK\x03\x04orPK\x05\x06) koji nije referenciran ni u jednom TIFF IFD data regionu (strips/tiles/JPEGInterchangeFormat). - Neobično veliki trailing podaci nakon poslednjeg referenciranog IFD data bloka (stotine KB do MB), u skladu sa uključenom arhivom .so modula.
Pseudo‑logic:
# 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)")
Praktična trijaža:
- Identifikujte format naspram imena:
- file sample; exiftool -s -FileType -MIMEType sample
- Pronađite ZIP footer/header blizu EOF i 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
- Brza provera da TIFF data regioni ne preklapaju carved ZIP region:
- tiffdump -D sample.dng | egrep ‘StripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLength’
- Proverite
max(offset+length) << zip_off - One‑shot carving (grubo): binwalk -eM sample.dng
Notes:
- Zabeleženo u prirodi protiv Samsung‑ove libimagecodec.quram.so (CVE‑2025‑21042). Priloženi ZIP je sadržao native module (npr. loader + SELinux policy editor) koji su ekstrahovani/izvršeni posle RCE.
HEIF/AVIF – libheif & libde265 (CVE‑2024‑41311, CVE‑2025‑29482, CVE‑2025‑65586)
Target: HEIF/AVIF containers parsed by libheif (and ImageIO/OpenImageIO builds that bundle it).
Strukturni pokazatelji:
- Overlay items (iloc/iref) čiji izvorni pravougaonici prelaze dimenzije osnovne slike ili čiji offseti imaju negativne/prekoračene vrednosti → dovodi do ImageOverlay::parse out‑of‑bounds (CVE‑2024‑41311).
- Grid stavke koje referenciraju nepostojeće item ID‑eve (ImageItem_Grid::get_decoder NULL deref, CVE‑2025‑43967) – jednostavna strukturna provera, dekodiranje nije potrebno.
- SAO/loop‑filter parametri ili brojevi tile‑ova koji primoravaju alokacije tabela većih od maksimalno dozvoljenog u libde265 (CVE‑2025‑29482): preveliki brojevi bandova ili dimenzije slice‑ova.
- Box length/extent sizes koje pokazuju izvan EOF (tipično u CVE‑2025‑65586 PoC‑ima otkrivenim fuzzing‑om).
Pseudo‑logika:
# HEIF overlay bounds check
for overlay in heif_overlays:
if overlay.x < 0 or overlay.y < 0: mark_malicious("HEIF overlay negative offset")
if overlay.x + overlay.w > base.w or overlay.y + overlay.h > base.h:
mark_malicious("HEIF overlay exceeds base image (CVE‑2024‑41311 pattern)")
# Grid item reference validation
for grid in heif_grids:
if any(ref_id not in item_ids):
mark_malicious("HEIF grid references missing item (CVE‑2025‑43967 pattern)")
# SAO / slice allocation guard
if sao_band_count > 32 or (tile_cols * tile_rows) > MAX_TILES or sao_eo_class not in {0..3}:
mark_malicious("HEIF SAO/tiling exceeds safe bounds (CVE‑2025‑29482 pattern)")
Praktični trijaž:
- Brza provera metapodataka bez potpunog dekodiranja:
- heif-info sample.heic
- oiiotool –info –stats sample.heic
- Proveriti extente u odnosu na veličinu fajla:
- heif-convert –verbose sample.heic /dev/null | grep -i extent
- Carve sumnjive boxes za ručni pregled:
- dd if=sample.heic bs=1 skip=$((box_off)) count=$((box_len)) of=box.bin
Napomene:
- Ove provere uhvate malformiranu strukturu pre teškog dekodiranja; korisno za mail/MMS gateway-e koji trebaju samo odluku allow/deny.
- libheif limits se menjaju između verzija; ponovo prilagodite konstante kada upstream promeni (1.18.x → 1.21.x je pooštrio overlay i grid validaciju).
Obrasci implementacije i performanse
Praktični skener treba da:
- Automatski detektovati tip fajla i pozvati samo relevantne analizatore (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF, HEIF/AVIF)
- Koristiti stream/partial‑parse da se minimiziraju alokacije i omogući rani prekid
- Pokretati analize paralelno (thread‑pool) za masovni trijaž
Primer toka rada sa ElegantBouncer (open‑source Rust implementacija ovih provera):
# 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
DFIR saveti i rubni slučajevi
- Embedded objects: PDF-ovi mogu sadržavati slike (JBIG2) i fontove (TrueType); izvucite ih i rekurzivno skenirajte
- Decompression safety: koristite biblioteke koje strogo ograničavaju tabele/bufere pre alokacije
- False positives: pravila držite konzervativnim, favorizujte kontradikcije koje su nemoguće prema specifikaciji
- Version drift: ponovo postavite osnovne granice (npr. VP8L table sizes) kada upstream parseri promene limite
Related tools
- ElegantBouncer – strukturni skener za prethodno navedene detekcije
- pdfid/pdf-parser/peepdf – ekstrakcija PDF objekata i statička analiza
- pdfcpu – PDF linter/sanitizer
- fontTools/ttx – ispis TrueType tabela i bajtkoda
- exiftool – čitanje TIFF/DNG/EXIF metapodataka
- dwebp/webpmux – parsiranje WebP metapodataka i delova
- heif-info/heif-convert (libheif) – inspekcija strukture HEIF/AVIF
- oiiotool – validacija HEIF/AVIF putem OpenImageIO
References
- 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
- CVE‑2024‑41311 analysis (libheif overlay OOB)
- CVE‑2025‑65586 libheif metadata iterator flaw
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


