Виявлення експлойтів структурних форматів файлів (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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Ця сторінка узагальнює практичні методи виявлення 0‑click мобільних експлойт-файлів шляхом перевірки структурних інваріантів їхніх форматів замість покладання на байтові сигнатури. Підхід узагальнюється на зразки, поліморфні варіанти та майбутні експлойти, що зловживають тією самою логікою парсера.
Ключова ідея: закодувати структурні неможливості та суперечності між полями, які з’являються лише тоді, коли досягається вразливий стан декодера/парсера.
See also:
Чому структура, а не сигнатури
Коли озброєні зразки недоступні і байти payload мутують, традиційні IOC/YARA патерни не спрацьовують. Структурне виявлення перевіряє оголошену розмітку контейнера порівняно з тим, що математично або семантично можливо для реалізації формату.
Типові перевірки:
- Перевіряти розміри таблиць і межі, виведені зі специфікації та безпечних реалізацій
- Позначати незаконні/недокументовані опкоди або переходи станів у вбудованому байткоді
- Перехресна перевірка метаданих проти фактичних закодованих компонентів потоку
- Виявляти суперечливі поля, які свідчать про плутанину парсера або про конструкції, спрямовані на виклик переповнення цілих чисел
Нижче наведено конкретні, перевірені на практиці шаблони для кількох ланцюжків з високим ступенем впливу.
PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)
Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).
Structural signals:
- Contradictory dictionary state that cannot occur in benign content but is required to trigger the overflow in arithmetic decoding.
- Suspicious use of global segments combined with abnormal symbol counts during 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")
Практичний триаж:
- Виявити та витягти JBIG2 потоки з PDF
- pdfid/pdf-parser/peepdf — для пошуку та дампу потоків
- Перевірити прапори арифметичного кодування та параметри словника символів відповідно до JBIG2 spec
Notes:
- Працює без підписів вбудованого payload
- Низький рівень FP на практиці, оскільки позначений стан математично неконсистентний
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Target: WebP lossless (VP8L) Huffman prefix‑code tables.
Структурні сигнали:
- Загальний розмір побудованих Huffman-таблиць перевищує безпечну верхню межу, яку очікують еталонні/виправлені реалізації, що вказує на наявність передумови переповнення.
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")
Практичний тріаж:
- Перевірити чанки контейнера WebP: VP8X + VP8L
- Розібрати префіксні коди VP8L і обчислити фактичні розміри виділених таблиць
Примітки:
- Стійкий до byte‑level polymorphism payload
- Межа визначається на основі upstream limits/patch analysis
TrueType – TRIANGULATION (CVE‑2023‑41990)
Ціль: TrueType bytecode всередині програм fpgm/prep/glyf.
Структурні сигнали:
- Наявність недокументованих/заборонених opcodes в Apple’s interpreter, які використовуються exploit chain.
Псевдологіка:
# Flag undocumented TrueType bytecode leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Практичний тріаж:
- Dump font tables (e.g., using fontTools/ttx) and scan fpgm/prep/glyf programs
- No need to fully emulate the interpreter to get value from presence checks
Notes:
- May produce rare FPs if nonstandard fonts include unknown opcodes; validate with secondary tooling
DNG/TIFF – CVE‑2025‑43300
Ціль: невідповідність метаданих зображення DNG/TIFF та фактичної кількості компонентів у кодуваному потоці (наприклад, JPEG‑Lossless SOF3).
Структурні сигнали:
- Невідповідність між полями EXIF/IFD (SamplesPerPixel, PhotometricInterpretation) та кількістю компонентів, розпарсеною з заголовка потоку зображення, який використовує 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) та порівняти кількості компонентів
Notes:
- Повідомлялося про експлуатацію у реальному середовищі; відмінний кандидат для перевірок структурної узгодженості
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.
Structural signals:
- Магічна сигнатура файлу вказує на TIFF/DNG (
II*\x00orMM\x00*) але ім’я файлу маскується під JPEG (e.g.,.jpg/.jpegWhatsApp naming). - Наявність ZIP Local File Header або EOCD сигнатури поблизу EOF (
PK\x03\x04orPK\x05\x06), яка не посилається з жодної TIFF IFD data region (strips/tiles/JPEGInterchangeFormat). - Непривично велика хвостова частина даних після останнього згаданого блоку даних IFD (сотні KB до MB), що відповідає присутності вкладеного архіву з .so модулями.
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)")
Практичний триаж:
- Визначити формат vs ім’я:
- file sample; exiftool -s -FileType -MIMEType sample
- Знайти ZIP футер/хедер біля EOF і вирізати:
- 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
- Перевірити, що регіони даних TIFF не перекривають вирізаний ZIP:
- tiffdump -D sample.dng | egrep ‘StripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLength’
- Переконатися
max(offset+length) << zip_off - One‑shot carving (coarse): binwalk -eM sample.dng
Примітки:
- 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.
HEIF/AVIF – libheif & libde265 (CVE‑2024‑41311, CVE‑2025‑29482, CVE‑2025‑65586)
Ціль: HEIF/AVIF containers parsed by libheif (and ImageIO/OpenImageIO builds that bundle it).
Структурні сигнали:
- 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) – простий структурний чек, декодування не потрібне.
- 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).
Псевдологіка:
# 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 шлюзів, яким потрібні лише рішення allow/deny.
- Обмеження libheif змінюються між версіями; оновлюйте базові константи при змінах upstream (1.18.x → 1.21.x посилив валідацію overlay і grid).
Implementation patterns and performance
Практичний сканер має:
- Автоматично визначати тип файлу і запускати лише релевантні аналізатори (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF, HEIF/AVIF)
- Потоковий/частковий парсинг щоб мінімізувати алокації і дозволити раннє завершення
- Виконувати аналізи паралельно (thread‑pool) для масового тріажу
Приклад робочого процесу з ElegantBouncer (open‑source реалізація на 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 поради та крайові випадки
- Вбудовані об’єкти: файли PDF можуть вбудовувати зображення (JBIG2) та шрифти (TrueType); витягуйте та рекурсивно скануйте
- Безпека при декомпресії: використовуйте бібліотеки, які строго обмежують розміри таблиць/буферів перед виділенням
- Помилкові спрацьовування: тримайте правила консервативними, віддавайте перевагу суперечностям, які неможливі згідно зі специфікацією
- Дрейф версій: переналаштовуйте базові межі (наприклад, розміри таблиць VP8L), коли upstream-парсери змінюють ліміти
Пов’язані інструменти
- ElegantBouncer – структурний сканер для вищезгаданих виявлень
- pdfid/pdf-parser/peepdf – витяг об’єктів PDF та статичний аналіз
- pdfcpu – PDF лінтер/санітизатор
- fontTools/ttx – вивантаження таблиць TrueType та байткоду
- exiftool – читання метаданих TIFF/DNG/EXIF
- dwebp/webpmux – розбір метаданих та чанків WebP
- heif-info/heif-convert (libheif) – перегляд структури HEIF/AVIF
- oiiotool – перевірка HEIF/AVIF за допомогою 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
Вивчайте та практикуйте 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


