๊ตฌ์กฐ์ ํ์ผ ํฌ๋งท ์ต์คํ๋ก์ ํ์ง (0โClick 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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์ด ํ์ด์ง๋ ํฌ๋งท์ ๊ตฌ์กฐ์ ๋ถ๋ณ์ฑ(structural invariants)์ ๊ฒ์ฆํ์ฌ byte signatures์ ์์กดํ์ง ์๊ณ 0โclick ๋ชจ๋ฐ์ผ exploit ํ์ผ์ ํ์งํ๋ ์ค๋ฌด ๊ธฐ๋ฒ๋ค์ ์์ฝํฉ๋๋ค. ์ด ์ ๊ทผ๋ฒ์ ๋์ผํ parser logic์ ์ ์ฉํ๋ ์ํ, polymorphic ๋ณํ ๋ฐ ํฅํ exploit ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๋ฐํ๋ฉ๋๋ค.
ํต์ฌ ์์ด๋์ด: ์ทจ์ฝํ decoder/parser ์ํ์ ๋๋ฌํ์ ๋์๋ง ๋ํ๋๋ ๊ตฌ์กฐ์ ๋ถ๊ฐ๋ฅ์ฑ(structural impossibilities)๊ณผ ํ๋ ๊ฐ ๋ถ์ผ์น(crossโfield inconsistencies)๋ฅผ ์ธ์ฝ๋ฉํฉ๋๋ค.
See also:
์ ๊ตฌ์กฐ์ธ๊ฐ, ์๊ทธ๋์ฒ๊ฐ ์๋๊ฐ
๋ฌด๊ธฐํ๋ ์ํ์ ๊ตฌํ ์ ์๊ณ payload bytes๊ฐ ๋ณ์ดํ ๋ ์ ํต์ ์ธ IOC/YARA ํจํด์ ์คํจํฉ๋๋ค. ๊ตฌ์กฐ์ ํ์ง๋ ์ปจํ ์ด๋๊ฐ ์ ์ธํ ๋ ์ด์์๊ณผ ํฌ๋งท ๊ตฌํ์์ ์ํ์ ๋๋ ์๋ฏธ๋ก ์ ์ผ๋ก ๊ฐ๋ฅํ ๊ฒ ์ฌ์ด๋ฅผ ๋น๊ต ๊ฒ์ฌํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ฒ์ฌ:
- ์คํ๊ณผ ์์ ํ ๊ตฌํ์์ ๋์ถ๋ ํ ์ด๋ธ ํฌ๊ธฐ์ ๊ฒฝ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ
- ์๋ฒ ๋๋ bytecode์์ ๋ถ๋ฒ/๋ฌธ์ํ๋์ง ์์ opcodes๋ ์ํ ์ ํ ํ๋๊ทธ
- metadata์ ์ค์ ์ธ์ฝ๋ฉ๋ ์คํธ๋ฆผ ๊ตฌ์ฑ ์์ ๊ฐ ๊ต์ฐจ ๊ฒ์ฆ
- parser ํผ๋์ด๋ integer overflow ์ค์ ์ ์์ฌํ๋ ๋ชจ์๋ ํ๋ ํ์ง
์๋์๋ ์ฌ๋ฌ ๊ณ ์ํฅ ์ฒด์ธ์ ๋ํด ํ์ฅ์์ ๊ฒ์ฆ๋ ๊ตฌ์ฒด์ ํจํด๋ค์ด ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
PDF/JBIG2 โ FORCEDENTRY (CVEโ2021โ30860)
Target: PDFs ๋ด๋ถ์ ์๋ฒ ๋๋๋ JBIG2 symbol dictionaries (์ข ์ข ๋ชจ๋ฐ์ผ MMS ํ์ฑ์์ ์ฌ์ฉ).
๊ตฌ์กฐ์ ์ ํธ:
- arithmetic decoding์์ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ ๋ฐํ๊ธฐ ์ํด ํ์ํ, ์ ์ ์ฝํ ์ธ ์์๋ ๋ฐ์ํ ์ ์๋ ๋ชจ์๋ dictionary ์ํ
- refinement coding ๋์ ๋น์ ์์ ์ธ ์ฌ๋ณผ ๊ฐ์์ ๊ฒฐํฉ๋ global segments์ ์์ฌ์ค๋ฌ์ด ์ฌ์ฉ
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")
์ค๋ฌด ํธ๋ฆฌ์์ง:
- PDF์์ JBIG2 ์คํธ๋ฆผ์ ์๋ณํ๊ณ ์ถ์ถ
- pdfid/pdf-parser/peepdf๋ฅผ ์ฌ์ฉํด ์คํธ๋ฆผ์ ์ฐพ์ ๋คํ
- ์ฐ์ ๋ถํธํ ํ๋๊ทธ์ ์ฌ๋ณผ ์ฌ์ ๋งค๊ฐ๋ณ์๋ฅผ JBIG2 ์คํ์ ๋ํด ๊ฒ์ฆ
Notes:
- ์๋ฒ ๋๋ payload ์๋ช ์์ด ๋์
- ํ๋๊ทธ๋ ์ํ๊ฐ ์ํ์ ์ผ๋ก ๋ถ์ผ์นํ๋ฏ๋ก ์ค์ ๋ก FP๊ฐ ๋ฎ์
WebP/VP8L โ BLASTPASS (CVEโ2023โ4863)
Target: WebP lossless (VP8L) Huffman prefixโcode tables.
Structural signals:
- ๊ตฌ์ฑ๋ Huffman ํ ์ด๋ธ์ ์ด ํฌ๊ธฐ๊ฐ ์ฐธ์กฐ/ํจ์น๋ ๊ตฌํ์์ ๊ธฐ๋๋๋ ์์ ํ ์ํ์ ์ด๊ณผํ์ฌ overflow ์ ์ ์กฐ๊ฑด์ ์๋ฏธํจ.
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 prefix codes๋ฅผ ํ์ฑํ๊ณ ์ค์ ํ ๋น๋ ํ ์ด๋ธ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐ
Notes:
- payload์ ๋ฐ์ดํธ ์์ค ๋คํ์ฑ์ ๋ํด ๊ฐ๊ฑดํจ
- ๊ฒฝ๊ณ๋ upstream ์ ํ/ํจ์น ๋ถ์์์ ๋์ถ๋จ
TrueType โ TRIANGULATION (CVEโ2023โ41990)
Target: fpgm/prep/glyf programs ๋ด๋ถ์ TrueType bytecode.
Structural signals:
- ์ต์คํ๋ก์ ์ฒด์ธ์์ ์ฌ์ฉ๋๋ Apple์ ์ธํฐํ๋ฆฌํฐ์ ๋ฌธ์ํ๋์ง ์์๊ฑฐ๋ ๊ธ์ง๋ opcodes์ ์กด์ฌ.
Pseudoโlogic:
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
์ค๋ฌด ํธ๋ฆฌ์์ง:
- ํฐํธ ํ ์ด๋ธ ๋คํ(์: fontTools/ttx ์ฌ์ฉ) ๋ฐ fpgm/prep/glyf ํ๋ก๊ทธ๋จ ์ค์บ
- ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฌ๋ง์ผ๋ก๋ ๊ฐ์น ํ๋ณด๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก ์ธํฐํ๋ฆฌํฐ๋ฅผ ์์ ์๋ฎฌ๋ ์ดํธํ ํ์ ์์
์ฐธ๊ณ :
- ๋นํ์ค ํฐํธ์ ์ ์ ์๋ opcodes๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๋๋ฌผ๊ฒ FP๊ฐ ๋ฐ์ํ ์ ์์; ๋ณด์กฐ ํด๋ก ๊ฒ์ฆ
DNG/TIFF โ CVEโ2025โ43300
๋์: DNG/TIFF ์ด๋ฏธ์ง ๋ฉํ๋ฐ์ดํฐ์ ์ธ์ฝ๋ฉ๋ ์คํธ๋ฆผ์ ์ค์ ์ปดํฌ๋ํธ ์(์: JPEGโLossless SOF3) ๊ฐ ๋ถ์ผ์น
๊ตฌ์กฐ์ ์ ํธ:
- EXIF/IFD ํ๋(SamplesPerPixel, PhotometricInterpretation)์ ํ์ดํ๋ผ์ธ์์ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง ์คํธ๋ฆผ ํค๋์์ ํ์ฑ๋ ์ปดํฌ๋ํธ ์ ๊ฐ ๋ถ์ผ์น
์์ฌ ๋ก์ง:
# 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) + Appended ZIP payload (LANDFALL)
Target: DNG (TIFFโderived) images carrying an embedded ZIP archive appended at EOF to stage native payloads after parser RCE.
Structural signals:
- File magic indicates TIFF/DNG (
II*\x00orMM\x00*) but filename mimics JPEG (e.g.,.jpg/.jpegWhatsApp naming). - Presence of a ZIP Local File Header or EOCD magic near EOF (
PK\x03\x04orPK\x05\x06) that is not referenced by any TIFF IFD data region (strips/tiles/JPEGInterchangeFormat). - Unusually large trailing data beyond the last referenced IFD data block (hundreds of KB to MB), consistent with a bundled archive of .so modules.
Pseudoโlogic:
# 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)")
์ค๋ฌด ํธ๋ฆฌ์์ง:
- ํ์๊ณผ ์ด๋ฆ ๊ตฌ๋ถ:
- ํ์ผ ์ํ; exiftool -s -FileType -MIMEType sample
- EOF ๊ทผ์ฒ์ ZIP footer/header ์ฐพ๊ธฐ ๋ฐ carve:
- 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โ
max(offset+length) << zip_off๊ฒ์ฆ- ์ผ๊ด ์นด๋น(๋๋ต): binwalk -eM sample.dng
Notes:
- ์ค์ ๊ณต๊ฒฉ์์ Samsungโs libimagecodec.quram.so (CVEโ2025โ21042)๋ฅผ ๋์์ผ๋ก ์ ์ฉ๋จ. ์ฒจ๋ถ๋ ZIP์๋ ๋ค์ดํฐ๋ธ ๋ชจ๋(์: loader + SELinux policy editor)์ด ํฌํจ๋์ด RCE ์ดํ ์ถ์ถ/์คํ๋จ.
Implementation patterns and performance
์ค์ฉ์ ์ธ ์ค์บ๋๋ ๋ค์์ ํด์ผ ํฉ๋๋ค:
- ํ์ผ ํ์ ์ ์๋ ๊ฐ์งํ๊ณ ๊ด๋ จ๋ ๋ถ์๊ธฐ(PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)๋ง ์คํํ๋๋ก ๋ถ๊ธฐ
- ํ ๋น์ ์ต์ํํ๊ณ ์กฐ๊ธฐ ์ข ๋ฃ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ์คํธ๋ฆฌ๋ฐ/๋ถ๋ถ ํ์ฑ ์ฌ์ฉ
- ๋๋ ํธ๋ฆฌ์์ง๋ฅผ ์ํด ๋ถ์์ ๋ณ๋ ฌ๋ก ์คํ(์ค๋ ๋ ํ ์ฌ์ฉ)
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 ํ ๋ฐ ์์ธ ์ฌ๋ก
- ์๋ฒ ๋๋ ๊ฐ์ฒด: PDFs๋ ์ด๋ฏธ์ง (JBIG2) ๋ฐ ํฐํธ (TrueType)๋ฅผ ํฌํจํ ์ ์์ผ๋ฏ๋ก ์ถ์ถํ์ฌ ์ฌ๊ท์ ์ผ๋ก ์ค์บํ์ธ์
- ์์ถ ํด์ ์์ ์ฑ: ํ ๋น ์ ์ ํ ์ด๋ธ/๋ฒํผ ํฌ๊ธฐ๋ฅผ ์๊ฒฉํ ์ ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ธ์
- ์คํ์ง: ๊ท์น์ ๋ณด์์ ์ผ๋ก ์ ์งํ๊ณ , ์คํ์ ๋ถ๊ฐ๋ฅํ ๋ชจ์์ ์ฐ์ ์ํ์ธ์
- ๋ฒ์ ๋๋ฆฌํํธ: ์์ ํ์๊ฐ ์ ํ์ ๋ณ๊ฒฝํ ๋ ๊ฒฝ๊ณ๊ฐ(์: VP8L table sizes)์ ์ฌ๊ธฐ์คํํ์ธ์
Related tools
- ElegantBouncer โ ์์ ํ์ง๋ค์ ์ํ ๊ตฌ์กฐ์ ์ค์บ๋
- pdfid/pdf-parser/peepdf โ PDF ๊ฐ์ฒด ์ถ์ถ ๋ฐ ์ ์ ๋ถ์
- pdfcpu โ PDF ๋ฆฐํฐ/๋ฌดํดํ ๋๊ตฌ
- fontTools/ttx โ TrueType ํ ์ด๋ธ ๋ฐ ๋ฐ์ดํธ์ฝ๋ ๋คํ
- exiftool โ TIFF/DNG/EXIF ๋ฉํ๋ฐ์ดํฐ ์ฝ๊ธฐ
- dwebp/webpmux โ WebP ๋ฉํ๋ฐ์ดํฐ ๋ฐ ์ฒญํฌ ํ์ฑ
References
- 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 ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


