Detekcija eksploata zasnovanih na strukturi formata fajla (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

Ova stranica sažima praktične tehnike za otkrivanje 0‑click mobilnih fajlova za eksploataciju proverom strukturnih invarianti njihovih formata umesto oslanjanja na bajt potpise. Pristup se generalizuje preko uzoraka, polimorfnih varijanti i budućih eksploita koji zloupotrebljavaju istu logiku parsiranja.

Ključna ideja: kodirati strukturne nemogućnosti i međupoljske nedoslednosti koje se pojavljuju samo kada se dostigne ranjivo stanje dekodera/parsera.

Vidi takođe:

PDF File analysis

Zašto struktura, a ne potpisi

Kada naoružani uzorci nisu dostupni i payload bajtovi mutiraju, tradicionalni IOC/YARA obrasci propadaju. Strukturna detekcija ispituje deklarisani raspored kontejnera naspram onoga što je matematički ili semantički moguće za implementaciju formata.

Tipične provere:

  • Proveriti veličine tabela i granice izvedene iz specifikacije i sigurnih implementacija
  • Označiti ilegalne/nedokumentovane opkode ili prelaze stanja u ugrađenom bytecode-u
  • Uporediti metapodatke naspram stvarnih komponenti enkodiranog toka
  • Otkrivati kontradiktorna polja koja ukazuju na zabunu parsera ili podešavanja za celobrojni preliv

Ispod su konkretni, u praksi testirani obrasci za više lanaca visokog uticaja.


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, ali je potrebno da bi se pokrenuo preliv u aritmetičkom dekodiranju.
  • Sumnjiva upotreba globalnih segmenata u kombinaciji sa abnormalnim brojem simbola tokom refinement kodiranja.

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 tokove iz PDF-a
  • pdfid/pdf-parser/peepdf za lociranje i dumpovanje tokova
  • Proverite arithmetic coding flagove i symbol dictionary parametre u odnosu na JBIG2 spec

Napomene:

  • Radi bez ugrađenih payload potpisa
  • Nizak FP u praksi jer 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 prevazilazi bezbedni gornji prag koji se očekuje od referentnih/patchovanih 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")

Praktična trijaža:

  • Proveri WebP kontejnerske chunk-ove: VP8X + VP8L
  • Parsuj VP8L prefiks kodove i izračunaj stvarne dodeljene veličine tabela

Napomene:

  • Otporno na polimorfizam na nivou bajta payload‑a
  • Granica proizilazi iz analize ograničenja i patch‑ova u upstream‑u

TrueType – TRIANGULATION (CVE‑2023‑41990)

Cilj: TrueType bytecode unutar fpgm/prep/glyf programa.

Strukturni signali:

  • Prisutnost nedokumentovanih/zabranjenih opkodova u Apple‑ovom interpreteru koje koristi exploit chain.

Pseudo‑logika:

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

Praktična trijaža:

  • Izdvoj font tabele (npr. koristeći fontTools/ttx) i skeniraj fpgm/prep/glyf programe
  • Nije potrebno potpuno emulirati interpretator da bi se dobile informacije iz provera prisustva

Napomene:

  • Može proizvesti retke FP-ove ako nestandardni fontovi sadrže nepoznate opcodes; verifikujte sekundarnim alatima

DNG/TIFF – CVE‑2025‑43300

Cilj: DNG/TIFF metapodaci slike naspram stvarnog broja komponenti u enkodiranom streamu (npr. JPEG‑Lossless SOF3).

Strukturni signali:

  • Nesaglasnost između EXIF/IFD polja (SamplesPerPixel, PhotometricInterpretation) i broja komponenti parsiranog iz zaglavlja image streama koje koristi pipeline.

Pseudo‑logika:

# 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đeni JPEG‑Lossless header (SOF3) i uporediti broj komponenti

Notes:

  • Zabeleženo iskorišćavanje 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 indicates TIFF/DNG (II*\x00 or MM\x00*) but filename mimics JPEG (e.g., .jpg/.jpeg WhatsApp naming).
  • Prisutnost ZIP Local File Header ili EOCD magic blizu EOF (PK\x03\x04 ili PK\x05\x06) koji nije referenciran ni u jednom TIFF IFD data regionu (strips/tiles/JPEGInterchangeFormat).
  • Neoobično velika količina podataka nakon poslednjeg referenciranog IFD data bloka (stotine KB do MB), što odgovara priloženom arhivu .so modula.

Pseudo‑logika:

# 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 u odnosu na ime:
  • 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
  • Proverite da se TIFF data regije ne preklapaju sa carved ZIP regionom:
  • 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

Napomene:

  • 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.

Implementation patterns and performance

Praktičan skener treba:

  • Automatski detektovati tip fajla i pokretati samo relevantne analizatore (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
  • Koristiti stream/partial‑parse da se minimizuju alokacije i omogući rani prekid
  • Pokretati analize paralelno (thread‑pool) za masovnu trijažu

Example workflow with ElegantBouncer (open‑source Rust implementation of these checks):

# 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 granični slučajevi

  • Embedded objects: PDFs may embed images (JBIG2) and fonts (TrueType); extract and recursively scan
  • Decompression safety: use libraries that hard‑limit tables/buffers before allocation
  • False positives: keep rules conservative, favor contradictions that are impossible under the spec
  • Version drift: re‑baseline bounds (e.g., VP8L table sizes) when upstream parsers change limits

Povezani alati

  • ElegantBouncer – strukturni skener za gore navedene detekcije
  • pdfid/pdf-parser/peepdf – ekstrakcija PDF objekata i statička analiza
  • pdfcpu – PDF linter/sanitizer
  • fontTools/ttx – ispis TrueType tabela i bytecode-a
  • exiftool – čitanje TIFF/DNG/EXIF metapodataka
  • dwebp/webpmux – parsiranje WebP metapodataka i chunk-ova

References

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