Ανίχνευση Εκμεταλλεύσεων Μορφοτύπων Αρχείων (0‑Click Chains)

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Αυτή η σελίδα συνοψίζει πρακτικές τεχνικές για τον εντοπισμό exploit αρχείων 0‑click σε κινητά, επαληθεύοντας τις δομικές αμεταβλητές των μορφοτύπων τους αντί να στηρίζεται σε υπογραφές byte. Η προσέγγιση γενικεύεται σε δείγματα, πολυμορφικές παραλλαγές και μελλοντικά exploits που καταχρώνται την ίδια λογική parser.

Κεντρική ιδέα: κωδικοποίηση δομικών αδυνατοτήτων και ασυνεπειών μεταξύ πεδίων που εμφανίζονται μόνο όταν επιτυγχάνεται κατάσταση ευάλωτου decoder/parser.

Δείτε επίσης:

PDF File analysis

Γιατί δομή, όχι υπογραφές

Όταν weaponized δείγματα δεν είναι διαθέσιμα και τα bytes του payload μεταβάλλονται, οι παραδοσιακές IOC/YARA patterns αποτυγχάνουν. Η δομική ανίχνευση εξετάζει τη δηλωμένη διάταξη του container σε σύγκριση με το τι είναι μαθηματικά ή σημασιολογικά εφικτό για την υλοποίηση του μορφοτύπου.

Τυπικοί έλεγχοι:

  • Επαλήθευση μεγεθών πινάκων και ορίων προερχόμενων από το spec και ασφαλείς υλοποιήσεις
  • Σήμανση παράνομων/μη τεκμηριωμένων opcodes ή μεταβάσεων κατάστασης σε ενσωματωμένο bytecode
  • Διπλός έλεγχος metadata VS πραγματικών κωδικοποιημένων στοιχείων του stream
  • Ανίχνευση αντιφατικών πεδίων που υποδεικνύουν σύγχυση parser ή ρύθμιση για integer overflow

Παρακάτω υπάρχουν συγκεκριμένα, επιτόπια δοκιμασμένα πρότυπα για πολλαπλές αλυσίδες υψηλού αντίκτυπου.


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

Στόχος: JBIG2 symbol dictionaries ενσωματωμένα μέσα σε PDFs (συχνά χρησιμοποιούνται στο parsing MMS σε κινητά).

Δομικά σήματα:

  • Αντιφατική κατάσταση λεξικού που δεν μπορεί να εμφανιστεί σε καλοήθες περιεχόμενο αλλά απαιτείται για να ενεργοποιηθεί το overflow στην arithmetic decoding.
  • Υποπτη χρήση global segments σε συνδυασμό με μη φυσιολογικούς αριθμούς συμβόλων κατά τη διάρκεια του refinement coding.

Ψευδο‑λογική:

# 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")

Πρακτική αξιολόγηση:

  • Αναγνωρίστε και εξαγάγετε JBIG2 streams από το PDF
  • pdfid/pdf-parser/peepdf για εντοπισμό και dump των streams
  • Επαληθεύστε τα arithmetic coding flags και τις παραμέτρους του symbol dictionary έναντι του JBIG2 spec

Σημειώσεις:

  • Λειτουργεί χωρίς embedded payload signatures
  • Χαμηλό FP στην πράξη επειδή το flagged state είναι μαθηματικά ασυνεπές

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

Target: WebP lossless (VP8L) Huffman prefix‑code tables.

Structural signals:

  • Το συνολικό μέγεθος των κατασκευασμένων Huffman πινάκων υπερβαίνει το ασφαλές ανώτατο όριο που αναμένεται από τις reference/patched implementations, υπονοώντας την προϋπόθεση overflow.

Pseudo‑logic:

# 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")

Πρακτικός έλεγχος:

  • Έλεγχος chunks του WebP container: VP8X + VP8L
  • Ανάλυση VP8L prefix codes και υπολογισμός των πραγματικών μεγεθών πινάκων που έχουν κατανεμηθεί

Σημειώσεις:

  • Ανθεκτικό στον πολυμορφισμό σε επίπεδο byte του payload
  • Το όριο προκύπτει από upstream limits / ανάλυση patches

TrueType – TRIANGULATION (CVE‑2023‑41990)

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

Structural signals:

  • Presence of undocumented/forbidden opcodes in Apple’s interpreter used by the exploit chain.

Pseudo‑logic:

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

Πρακτική αξιολόγηση:

  • Κάντε dump των font tables (π.χ., χρησιμοποιώντας fontTools/ttx) και σαρώστε τα fpgm/prep/glyf programs
  • Δεν χρειάζεται να προσομοιώσετε πλήρως τον interpreter για να αποκτήσετε αξία από presence checks

Σημειώσεις:

  • Μπορεί να παράγει σπάνια FPs αν μη-τυποποιημένες γραμματοσειρές περιέχουν άγνωστα opcodes· επικυρώστε με secondary tooling

DNG/TIFF – CVE‑2025‑43300

Στόχος: metadata εικόνας DNG/TIFF σε σχέση με τον πραγματικό αριθμό components στο κωδικοποιημένο stream (π.χ., JPEG‑Lossless SOF3).

Δομικές ενδείξεις:

  • Ασυνέπεια μεταξύ πεδίων EXIF/IFD (SamplesPerPixel, PhotometricInterpretation) και του αριθμού components που αναλύεται από το header του image stream που χρησιμοποιεί το pipeline.

Ψευδο‑λογική:

# 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")

Πρακτικός έλεγχος:

  • Αναλύστε τις κύριες IFD και EXIF ετικέτες
  • Εντοπίστε και αναλύστε την ενσωματωμένη JPEG‑Lossless κεφαλίδα (SOF3) και συγκρίνετε τον αριθμό των συστατικών

Σημειώσεις:

  • Αναφέρθηκε ότι εκμεταλλεύτηκε σε πραγματικό περιβάλλον· εξαιρετικός υποψήφιος για ελέγχους δομικής συνέπειας

DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Προσαρτημένο ZIP payload (LANDFALL)

Στόχος: DNG (TIFF‑derived) εικόνες που φέρουν ενσωματωμένο ZIP archive προσαρτημένο στο EOF για τη σταδιακή φόρτωση native payloads μετά από parser RCE.

Δομικά σημάδια:

  • Το file magic υποδεικνύει TIFF/DNG (II*\x00 or MM\x00*) αλλά το όνομα αρχείου μιμείται JPEG (π.χ. .jpg/.jpeg ονομασία WhatsApp).
  • Παρουσία ZIP Local File Header ή EOCD magic κοντά στο EOF (PK\x03\x04 or PK\x05\x06) που δεν αναφέρεται από καμία περιοχή δεδομένων TIFF IFD (strips/tiles/JPEGInterchangeFormat).
  • Ασυνήθιστα μεγάλα επακόλουθα δεδομένα πέρα από το τελευταίο αναφερόμενο μπλοκ δεδομένων IFD (εκατοντάδες KB έως MB), συμβατά με συσκευασμένο archive από .so modules.

Ψευδο‑λογική:

# 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)")

Practical triage:

  • Identify format vs name:
  • file sample; exiftool -s -FileType -MIMEType sample
  • Locate ZIP footer/header near EOF and 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
  • Sanity‑check TIFF data regions don’t overlap the 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:

  • Εκμεταλλεύτηκε στο wild εναντίον της Samsung’s libimagecodec.quram.so (CVE‑2025‑21042). Το προσαρτημένο ZIP περιείχε native modules (π.χ., loader + SELinux policy editor) που εξήχθησαν/εκτελέστηκαν μετά το 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).

Structural signals:

  • Overlay items (iloc/iref) whose source rectangles exceed the base image dimensions or whose offsets are negative/overflowing → triggers ImageOverlay::parse out‑of‑bounds (CVE‑2024‑41311).
  • Grid items referencing non‑existent item IDs (ImageItem_Grid::get_decoder NULL deref, CVE‑2025‑43967) – easy structural check, no decoding required.
  • SAO/loop‑filter parameters or tile counts that force table allocations larger than the max allowed by libde265 (CVE‑2025‑29482): overly large band counts or slice dimensions.
  • Box length/extent sizes that point past EOF (typical in CVE‑2025‑65586 PoCs discovered via fuzzing).

Pseudo‑logic:

# 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)")

Πρακτική διαλογή:

  • Γρήγορος έλεγχος μεταδεδομένων χωρίς πλήρη αποκωδικοποίηση:
  • heif-info sample.heic
  • oiiotool –info –stats sample.heic
  • Επικύρωση extents σε σχέση με το μέγεθος αρχείου:
  • heif-convert –verbose sample.heic /dev/null | grep -i extent
  • Εξαγωγή ύποπτων boxes για χειροκίνητη επιθεώρηση:
  • dd if=sample.heic bs=1 skip=$((box_off)) count=$((box_len)) of=box.bin

Σημειώσεις:

  • Αυτοί οι έλεγχοι εντοπίζουν παραμορφωμένη δομή πριν από την έντονη αποκωδικοποίηση· χρήσιμο για mail/MMS gateways που χρειάζονται μόνο αποφάσεις allow/deny.
  • Οι περιορισμοί του libheif αλλάζουν μεταξύ εκδόσεων· επανακαθορίστε τις σταθερές όταν ο upstream αλλάζει (1.18.x → 1.21.x σφίξιμο της επικύρωσης overlay και grid).

Πρότυπα υλοποίησης και απόδοση

Ένας πρακτικός σαρωτής πρέπει:

  • Αυτόματη ανίχνευση τύπου αρχείου και αποστολή μόνο των σχετικών αναλυτών (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF, HEIF/AVIF)
  • Ροή/μερική ανάλυση για ελαχιστοποίηση των κατανομών και δυνατότητα πρόωρου τερματισμού
  • Εκτέλεση αναλύσεων παράλληλα (thread‑pool) για μαζική διαλογή

Παράδειγμα ροής εργασίας με το ElegantBouncer (ανοιχτού κώδικα υλοποίηση σε Rust αυτών των ελέγχων):

# 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 tips and edge cases

  • 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

  • ElegantBouncer – δομικός σαρωτής για τις παραπάνω ανιχνεύσεις
  • pdfid/pdf-parser/peepdf – εξαγωγή αντικειμένων PDF και στατική ανάλυση
  • pdfcpu – έλεγχος/απολύμανση PDF
  • fontTools/ttx – εξαγωγή πινάκων TrueType και bytecode
  • exiftool – ανάγνωση μεταδεδομένων TIFF/DNG/EXIF
  • dwebp/webpmux – ανάλυση μεταδεδομένων WebP και chunks
  • heif-info/heif-convert (libheif) – έλεγχος δομής HEIF/AVIF
  • oiiotool – επαλήθευση HEIF/AVIF μέσω OpenImageIO

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks