Виявлення експлойтів структурних форматів файлів (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 мобільних експлойт-файлів шляхом валідації структурних інваріантів їхніх форматів замість покладання на байтові сигнатури. Підхід узагальнюється на різні зразки, поліморфні варіанти та майбутні експлойти, що зловживають тією ж логікою парсера.
Ключова ідея: закодувати структурні неможливості та несумісності між полями, які з’являються лише коли досягається вразливий стан декодера/парсера.
Див. також:
Чому структура, а не сигнатури
Коли озброєні зразки недоступні і байти payload мутують, традиційні IOC/YARA шаблони зазнають невдачі. Структурне виявлення перевіряє декларативну розмітку контейнера порівняно з тим, що математично або семантично можливо для реалізації формату.
Типові перевірки:
- Перевірка розмірів таблиць і меж, виведених зі специфікації та безпечних реалізацій
- Позначати нелегальні/недокументовані opcode’и або переходи станів у вбудованому байткоді
- Перевіряти відповідність метаданих фактичним закодованим компонентам потоку
- Виявляти суперечливі поля, що свідчать про плутанину парсера або про підготовку цілочисельного переповнення
Нижче наведені конкретні, перевірені на практиці шаблони для кількох ланцюжків високого впливу.
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")
Practical triage:
- Виявити та витягти JBIG2 streams з PDF
- Використати pdfid/pdf-parser/peepdf для пошуку та дампу потоків
- Перевірити прапорці арифметичного кодування та параметри словника символів відповідно до JBIG2 spec
Notes:
- Працює без вбудованих підписів payload
- Низький FP на практиці, оскільки відмічений стан математично неконсистентний
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Target: WebP lossless (VP8L) Huffman prefix‑code tables.
Structural signals:
- Загальний розмір побудованих таблиць 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 та обчислити фактичні розміри виділених таблиць
Примітки:
- Стійкий до байтового поліморфізму payload
- Межа визначається на основі аналізу upstream обмежень і патчів
TrueType – TRIANGULATION (CVE‑2023‑41990)
Ціль: TrueType байткод всередині програм fpgm/prep/glyf.
Структурні сигнали:
- Наявність недокументованих/заборонених opcodes в Apple’s interpreter, які використовуються ланцюгом експлойту.
Псевдологіка:
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Практичний триаж:
- Вивантажити таблиці шрифтів (наприклад, використовуючи fontTools/ttx) та просканувати програми fpgm/prep/glyf
- Не потрібно повністю емуляти інтерпретатор, щоб отримати користь від перевірок на наявність
Notes:
- Може давати рідкісні FPs, якщо нестандартні шрифти містять невідомі opcodes; перевіряйте за допомогою додаткових інструментів
DNG/TIFF – CVE‑2025‑43300
Target: DNG/TIFF image metadata VS actual component count in encoded stream (e.g., JPEG‑Lossless SOF3).
Structural signals:
- Inconsistency between EXIF/IFD fields (SamplesPerPixel, PhotometricInterpretation) and the component count parsed from the image stream header used by the 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")
Практичний триаж:
- Розпарсити основні IFD і EXIF теги
- Знайти та розпарсити вбудований JPEG‑Lossless заголовок (SOF3) і порівняти кількість компонентів
Примітки:
- Зафіксовано експлуатацію у реальному світі; відмінний кандидат для перевірки структурної узгодженості
DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + доданий ZIP payload (LANDFALL)
Ціль: DNG (TIFF‑derived) зображення, що несуть вбудований ZIP архів, доданий в кінці файлу (EOF), щоб stage native payloads після parser RCE.
Структурні сигнали:
- Magic файлу вказує на TIFF/DNG (
II*\x00orMM\x00*) але ім’я файлу імітує JPEG (наприклад,.jpg/.jpeg— номенклатура WhatsApp). - Наявність ZIP Local File Header або EOCD magic біля EOF (
PK\x03\x04orPK\x05\x06), яка не посилається жодним полем даних TIFF IFD (strips/tiles/JPEGInterchangeFormat). - Незвично велика кінцева частина даних після останнього посиланого блоку IFD (сотні KB до MB), сумісна з упакованим архівом .so модулів.
Псевдо‑логіка:
# 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)")
Практичний триаж:
- Визначити формат порівняно з іменем:
- file sample; exiftool -s -FileType -MIMEType sample
- Знайти ZIP footer/header біля 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’
- 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.
Шаблони реалізації та продуктивність
Практичний сканер має:
- Автовизначати тип файлу та запускати тільки відповідні аналізатори (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
- Виконувати потоковий/частковий парсинг, щоб мінімізувати виділення пам’яті і дозволити раннє завершення
- Запускати аналізи паралельно (thread‑pool) для масового триажу
Приклад робочого процесу з 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 та особливі випадки
- Вбудовані об’єкти: PDF можуть містити зображення (JBIG2) та шрифти (TrueType); витягуйте їх і рекурсивно скануйте
- Безпека декомпресії: використовуйте бібліотеки, які жорстко обмежують розміри таблиць/буферів перед виділенням пам’яті
- Хибні позитиви: робіть правила консервативними; надавайте перевагу суперечностям, які неможливі за специфікацією
- Дрейф версій: переоцінюйте межі (наприклад, розміри таблиць VP8L), коли upstream парсери змінюють ліміти
Пов’язані інструменти
- ElegantBouncer – структурний сканер для виявлень, наведених вище
- pdfid/pdf-parser/peepdf – витягування об’єктів PDF та статичний аналіз
- pdfcpu – PDF linter/санітизатор
- fontTools/ttx – вивантаження таблиць TrueType та байткоду
- exiftool – читання метаданих TIFF/DNG/EXIF
- dwebp/webpmux – розбір метаданих WebP та чанків
Посилання
- 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
Вивчайте та практикуйте 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.
HackTricks

