
GIGABYTE H510M K V2 (`H510MKV2.F3`) BIOS イメージの静的リバースエンジニアリング: PI-spec SMM Core メモリアロケータの完全な UEFI ファームウェアボリューム抽出分析と、GIGABYTE/Binarly が2025年に開示した4つの SMM メモリ破壊脆弱性 (CVE-2025-7026 CVE-2025-7027 CVE-2025-7028 CVE-2025-7029) を対象としたハンティング。
GIGABYTE H510M K V2(H510MKV2.F3)BIOSイメージの静的リバースエンジニアリング: PI仕様のSMM Coreメモリアロケータの完全なUEFIファームウェアボリューム抽出分析、およびGIGABYTE/Binarlyが2025年に開示した4件のSMMメモリ破壊の脆弱性(CVE-2025-7026 CVE-2025-7027 CVE-2025-7028 CVE-2025-7029)を対象とした的を絞った探索。
ステータス: 4件中1件のCVE(CVE-2025-7027)が存在することを確認。残り3件はアクセス可能な全ファームウェアにわたって積極的に検索したが発見されず、それが何を意味し何を意味しないかの正確な内容は未確認のCVEを参照。
これはn-dayリサーチであり、0-day開示ではありません。ここで参照する4件のCVEはすべて、このリサーチが始まる前に、GIGABYTEによってすでに公開開示・パッチ適用済み(パッチ済みファームウェアは2025-06-12に出荷開始)であり、BinarlyとCERT/CCによってCVEが割り当てられ文書化されていました。このリポジトリの内容は新しい脆弱性の発見ではありません。これは、特定の公開ダウンロード可能なBIOSビルドに、以前に開示・パッチ適用済みのバグクラスが存在するかどうかを検証する独立した静的解析です。
| ボード | GIGABYTE H510M K V2 (H510MKV2) |
| BIOSファイル | H510MKV2.F3 |
| ファイルサイズ | 16777216 バイト (16 MB) |
| ファイル日付 | 2023-12-20 |
| MD5 | a9bca8aeb55061824af1c3eedfb5c846 |
| SHA-256 | 934a935e5faba8d2cea4e1d51e9edb6aed86b32f412d0da5bae602bd9fd8f9f3 |
| チップセット | Intel H510 |
| ベンダーパッチ提供開始 | 2025-06-12 (このビルドはそれより約18か月前) |
uefi-firmware-parser)。SMM/DXEボリューム全体で356個のFFSファイルを列挙し、そのうち302個に抽出可能なPE32/TEイメージが含まれていました。PiSmmCore(PI仕様のSMM Core)を分離し完全にリバースエンジニアリング。ハードコードされた"sphd"/"tail"ガードシグネチャを介して、実際のSMMプール/ページアロケータ(SmmAllocatePool/SmmFreePool/SmmAllocatePages/SmmFreePages内部)を確認・命名しました。これはEDK2のオープンソースMdeModulePkg/Core/PiSmmCore/Pool.cと完全に一致します。GenericComponentSmmEntry内の正確な脆弱コードパスを発見・追跡しました。NVRAM変数(SetupXtuBufferAddress)がGetVariable()を介して検証なしで取得され、SW SMI 0xB2経由で到達可能な書き込みポインタとして直接使用されています。これはBinarlyの公開された根本原因の説明と細部に至るまで一致します。uefi_firmware (uefi-firmware-parser -e) がBIOSイメージを再帰的に展開: Intel Flash Descriptor領域 → ファームウェアボリューム → FFSファイル → セクション。見つかったすべてのLZMA/Tiano圧縮ファームウェアボリュームを解凍しました。.ui(ドライバ表示名)セクションと.pe/.teイメージセクションを持つすべてのFFSファイルを、<DriverName>__<GUID8>.<pe32|te>という名前のスタンドアロンPE32+/TEバイナリとしてコピーしました。ida-pro-mcp / idalibヘッドレスワーカーインターフェース経由)。モジュールごとに1つのデータベース。自動解析 + Hex-Raysのみ。この環境ではFLIRTシグネチャやEDK2型ライブラリは利用できませんでした(後述の制限事項に記載)。BIOSイメージには4つのIntel Flash Descriptor領域が含まれています。GIGABYTE/OEMコードを含むのはregion-biosのみです(region-me.fd region-gbe.fd region-pdr.fdはIntel Management Engine / GbE / ディスクリプタファームウェアであり、別コンポーネントのためスコープ外として調査していません)。
region-bios内で4つのファームウェアボリュームが見つかり抽出されました:
| ボリューム (コンテナFFS GUID) | 内容 | 抽出されたファイル数 |
|---|---|---|
file-9e21fd93-... → volume-ee4e5898-... | メインDXE/SMMドライバボリューム。すべてのSmm*ドライバ、プラットフォームDXEドライバ | 302 |
file-f641ac56-... → volume-ee4e5898-... | 上記の複製/PEIフェーズコピー(より小さなサブセット: PiSmmCommunicationPei IT8728FSmmFeaturesPei など) | 22 |
file-3417f275-... → volume-3417f275-... | 初期PEI/DXEブリングアップボリューム(DxeIpl FspS3Notify ...) | 21 (うち2つはイメージ付き) |
file-05ca020b-... → volume-05ca020b-... | 小さな補助ボリューム。実行可能イメージなし | 2 |
4つすべてを抽出しマーカースキャンしました(未確認のCVEを参照)。
SMM/
├── README.md this file
├── CVE_ANALYSIS.md full technical deep-dive (code-level detail confidence notes)
├── flash.fd copy of the extracted 16MB BIOS image
├── regions/ raw recursive extraction (every FV/FFS/section as produced by uefi_firmware)
├── smm_modules/ PiSmmCore isolated + fully analyzed (.pe32 + Hex-Rays .i64 renames applied)
├── smm_modules_all/ all 51 `Smm*`-named drivers as standalone PE32/TE + manifest.txt
│ (4 extra ones PiSmmCpuDxeSmm SmmAccess SmmControl SmmLockBox
│ FlashSmiSmm FlashDriverSmm have auto-analyzed .i64 databases)
├── all_modules/ every extractable module from the main DXE/SMM volume (302 not just Smm*-named)
├── extra_volumes_modules/ modules from the two smaller auxiliary firmware volumes
└── f641_pei_modules/ modules from the duplicate PEI-phase volume copy
| CVE | Binarly ID | CVSS | 公開された根本原因の概要 |
|---|---|---|---|
| CVE-2025-7026 | BRLY-2025-008 | 8.2 | SW SMIハンドラ(SwSmiInputValue 0xB2)は、BinarlyがCommandRcx0と呼ぶ関数内でRBXレジスタを未チェックのポインタとして信頼します。*RBXが'$DB$'/'2DB$'と一致する場合、ハンドラは任意のSMRAM書き込みを実行します。 |
| CVE-2025-7027 | BRLY-2025-009 | 8.2 | 二重ポインタ参照: 検証されていないNVRAM変数(SetupXtuBufferAddress)と攻撃者制御のRBX由来ポインタの組み合わせにより、任意のSMRAM書き込みが発生します。 |
| CVE-2025-7028 | BRLY-2025-010 | 8.2 | RBX/RCXから派生しReadFlash/WriteFlash/EraseFlash/GetFlashInfo経由で到達可能な関数ポインタ構造体(FuncBlock)の検証欠如。 |
| CVE-2025-7029 | BRLY-2025-011 | 8.2 | 電源/熱(オーバークロック)構成ロジックにおいて、RBXの未チェックな使用が攻撃者の影響を受けるOcHeaderポインタを制御し、任意のSMRAM書き込みにつながります。 |
4件すべてに共通する点: Software SMIハンドラが、レジスタまたはNVRAM由来の値を、実際にSMRAMの外にあるかを検証せずにメモリへのポインタとして信頼しています。これによりring-0(Administrator/root)の攻撃者が、通常のSW SMIトリガーをSMM特権(ring -2)の任意読み取り/書き込みに変換し、ファームウェア全体の侵害、Secure Bootのバイパス、OSより下の層への永続化を実現できます。
これは脆弱性ではありません。セキュリティバグに向けられる前に、ツールチェーン(抽出 → PE分離 → IDA/Hex-Rays → 手動RE)が実際にソースで検証可能な本物のEDK2内部構造を復元できることを証明することで、残りの作業の基盤となった背景調査です。
PiSmmCore(GUID e94f54cd-81eb-47ed-aec3-856f5dc157a9)はPI仕様のSMM Coreです。SmmAllocatePool/SmmFreePool/SmmAllocatePages/SmmFreePagesとSMIハンドラディスパッチテーブルを保持しています。
コールチェーン(smm_modules/PiSmmCore.pe32.i64内のアドレス):
_ModuleEntryPoint (0x1184)
-> SmmCoreEntryPointHelper (0x14D4) writes the "SMST" table signature
-> SmmInternalAllocatePool_wrapper (0x95EC)
-> InternalAllocPoolByIndex_sphd_tail (0x57A8) <- the allocator
-> SmmAllocateZeroedPool (0x961C) alloc + zero wrapper
SmmFreePool_wrapper (0x9714)
-> SmmIsBufferInsideSmram (0x95A8) decides SMRAM-resident vs not
-> SmmInternalFreePool_sphd_tail (0x591C) validates sphd/tail frees
-> InternalFreePages (0x6A2C) page-granularity free + coalesce
InternalFindFreePages (0x6820) page-granularity alloc (mirror of InternalFreePages)