Structural File‑Format Exploit Detection (0‑Click Chains)
Reading time: 9 minutes
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
このページでは、バイト署名に依存する代わりにフォーマットの構造的不変量を検証することで、0‑clickのモバイル向けエクスプロイトファイルを検出する実践的手法をまとめる。 このアプローチはサンプルやポリモーフィックな亜種、同じパーサーロジックを悪用する将来のエクスプロイトにも一般化可能である。
Key idea: 脆弱なデコーダ/パーサ状態に到達したときにのみ現れる構造的に不可能な事象やフィールド間の矛盾を符号化すること。
See also:
Why structure, not signatures
武装化されたサンプルが入手できない、あるいはペイロードバイトが変化する場合、従来のIOC/YARAパターンは機能しない。構造的検出は、コンテナが宣言するレイアウトと、そのフォーマット実装にとって数学的または意味論的に可能な範囲とを比較検査する。
Typical checks:
- 仕様や安全な実装から導出されるテーブルサイズや境界を検証する
- 埋め込みバイトコード内の違法/未文書化のopcodesや状態遷移をフラグする
- メタデータと実際のエンコード済みストリーム要素をクロスチェックする
- パーサの混乱やinteger overflowのセットアップを示す矛盾するフィールドを検出する
以下は複数の高影響チェーンに対してフィールドで検証された具体的なパターンである。
PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)
Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).
Structural signals:
- 通常のコンテンツでは発生し得ない矛盾した辞書状態で、arithmetic decodingにおけるオーバーフローを引き起こすために必要なもの
- 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")
Practical triage:
- PDFからJBIG2ストリームを特定して抽出する
- ストリームの検索とダンプにpdfid/pdf-parser/peepdfを使用
- 算術符号化フラグとシンボル辞書のパラメータをJBIG2 specに照らして検証する
Notes:
- 埋め込まれたペイロード署名がなくても機能する
- フラグ付けされた状態が数学的に矛盾しているため、実運用での偽陽性は少ない
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Target: WebP lossless (VP8L) Huffman prefix‑code tables.
Structural signals:
- 構築されたHuffmanテーブルの合計サイズがリファレンス/パッチ適用済み実装で期待される安全上限を超えており、オーバーフローの前提条件を示唆する。
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 のプレフィックスコードを解析し、実際に割り当てられたテーブルサイズを算出する
Notes:
- payload のバイトレベルのポリモーフィズムに対して堅牢
- 境界は上流の制限およびパッチ分析から導出される
TrueType – TRIANGULATION (CVE‑2023‑41990)
Target: fpgm/prep/glyf プログラム内の TrueType bytecode.
Structural signals:
- exploit chain で使用される Apple の interpreter に、ドキュメント化されていない/禁止された opcodes が存在する。
Pseudo‑logic:
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Practical triage:
- フォントテーブルをダンプ(例: fontTools/ttx を使用)し、fpgm/prep/glyf プログラムをスキャンする
- 存在チェックから得られる情報のためにインタプリタを完全にエミュレートする必要はない
Notes:
- 非標準フォントに未知の opcodes が含まれる場合、稀に FPs を生むことがある; 二次的なツールで検証すること
DNG/TIFF – CVE‑2025‑43300
Target: DNG/TIFF 画像のメタデータと、エンコードされたストリーム内の実際のコンポーネント数(例: JPEG‑Lossless SOF3)との不一致
Structural signals:
- パイプラインが使用するイメージストリームヘッダから解析されたコンポーネント数と、EXIF/IFD フィールド(SamplesPerPixel, PhotometricInterpretation)との不一致。
Pseudo‑logic:
# 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")
Practical triage:
- 主要な IFD と EXIF タグを解析する
- 埋め込まれた JPEG‑Lossless ヘッダ (SOF3) を特定して解析し、コンポーネント数を比較する
Notes:
- 実際の攻撃で悪用が報告されている。構造的一貫性チェックの優れた候補
Implementation patterns and performance
A practical scanner should:
- ファイルタイプを自動検出し、関連するアナライザのみをディスパッチする (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
- 割り当てを最小化し早期終了を可能にするためにストリーム/部分解析を行う
- バルクトリアージのために解析を並列(thread‑pool)で実行する
Example workflow with 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 のヒントとエッジケース
- Embedded objects: PDFs may embed images (JBIG2) and fonts (TrueType); extract and recursively scan
- Decompression safety: use libraries that hard‑limit tables/buffers before allocation
- False positives: keep rules conservative, favor contradictions that are impossible under the spec
- Version drift: re‑baseline bounds (e.g., VP8L table sizes) when upstream parsers change limits
関連ツール
- 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
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。