Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2021-28664-PoC — CVE-2021-28664(Mali kbase GPUドライバのuse-after-free)のPoCスケルトン。ARM64 Android上でカーネルの任意物理メモリ読み書きプリミティブを実証する。 | Kitploit
ツール/GitHubGitHub/woaphone/cve-2021-28664-poc
Androidセキュリティメモリフォレンジック脆弱性分析エクスプロイトモバイルセキュリティハードウェアとIoTセキュリティ論文と研究学習と教育バイナリエクスプロイト
GitHubwoaphone/cve-2021-28664-poc

CVE-2021-28664-PoC

CVE-2021-28664(Mali kbase GPUドライバのuse-after-free)のPoCスケルトン。ARM64 Android上でカーネルの任意物理メモリ読み書きプリミティブを実証する。

11時間5分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

CVE-2021-28664-PoC

Mali kbase GPU ドライバの UAF(CVE-2021-28664)→ カーネル任意物理メモリ 読み書きプリミティブ の PoC スケルトン。汎用 ARM64 Android プラットフォーム向けであり、特定のベンダーや機種に依存しない。

研究範囲は 「カーネル任意物理メモリ読み書きプリミティブ」までに限定:GPU ドライバの use-after-free を、安定・制御可能・安全に失敗できるカーネルメモリ読み書き能力へと 変換する方法。

本リポジトリはいかなる攻撃も提供しない。 完成した exploit を含まず、そのまま実行可能なコードを含まず、 いかなるデバイスのオフセット/シリアル番号/ファームウェアも含まない。いかなる内容も攻撃行為への利用を禁ずる(下記参照)。


免責事項 / Disclaimer(必読)

  1. 本リポジトリは攻撃を提供しない。 本リポジトリは脆弱性の原理とメモリ破壊プリミティブの技術的振り返りであり、 方法論ドキュメントと、すべてのデバイス数値を空欄にした教育用テンプレートのみを含む。いかなるデバイスへの 攻撃にも直接使用することはできない。
  2. 攻撃禁止。 本リポジトリの内容を、いかなる未承認のデバイス、他人のデバイス、またはいかなる 違法用途に使用することを厳禁する。それにより生じる一切の結果は使用者が自ら負担し、著者とは無関係である。
  3. 研究実験は 著者本人が所有する デバイス上でのみ行い、目的は脆弱性の再現とセキュリティ研究である。
  4. CVE-2021-28664 は 2021 年に上流(Arm/Mali)により修正済みである。影響を受けるのは長期間 更新されていない旧ドライバ/旧ファームウェアである。本研究の意義は、歴史的脆弱性の悪用原理と 防御視点からの検知アプローチを理解することにある。
  5. 本リポジトリの内容は "AS IS" で提供され、明示的または黙示的ないかなる保証も伴わない。
  6. ベンダー/セキュリティチームを代表してより詳細が必要な場合は、GitHub を通じて著者に連絡されたい。

適用範囲

技術的に適用可能(利用チェーンの各段階が成立する前提)

段階前提条件
脆弱性本体Mali kbase ドライバのバージョンが CVE-2021-28664 の影響範囲(上流修正前の r シリーズ)に該当する。カーネルバージョンとは無関係で、ドライバのみに依存
GPU リソース/dev/mali が対象プロセスから到達可能。MEM_ALLOC が SAME_VA の大バッファをサポート。MEM_ALIAS の挙動が脆弱性の記述に合致
パイプ再利用Linux ≥ 4.5(pipe_buf_operations 導入)、実測では 4.9 ~ 4.14 でいずれも成立。F_SETPIPE_SZ によりパイプを単一ページまで縮小可能
KASLR リークカーネルで CONFIG_RANDOMIZE_BASE が有効(arm64 ≥ 4.6)。anon_pipe_buf_ops が公開シンボルテーブルに存在
物理アドレスモデルarm64 + vmemmap レイアウト。sizeof(struct page)、ページテーブル形式は 必ず実測 すること。仮定してはならない

技術的に適用不可

  • CVE-2021-28664 が修正済みの Mali ドライバ(r バージョン修正後);
  • 非 Mali GPU プラットフォーム(本チェーンは kbase の alias/MMU-dump 挙動に深く依存);
  • pipe_buffer 構造/copy_page_to_iter の検証が大きく異なる新しいカーネル(5.x 以降 は対応するソースで再確認が必要。チェーン構造は参考になるが詳細は汎用ではない);
  • /dev/mali へのアクセス権限がない環境(seLinux/ベンダーポリシーによる制限)。

境界の宣言

  • 本リポジトリは 読み書きプリミティブ のみを対象とする。プリミティブ取得後に具体的なカーネル標的を 特定し、さらなる利用や権限昇格を行うことは、本リポジトリの範囲外である。
  • すべてのデバイス関連定数はテンプレート内で TODO(DEVICE) として空欄にされており、適配は使用者自身の リバースエンジニアリング作業であり、リポジトリは代行しない。

脆弱性の背景

CVE-2021-28664:Mali kbase ドライバの MEM_ALIAS パスは GPU_WR 権限の チェックを欠いており、攻撃者は すでに解放された GPU メモリページ を自身の GPU アドレス空間に alias することができ、「GPU 側から解放済み物理ページへの持続的な可視/書込可能」状態を形成する——GPU/カーネル境界を またぐ use-after-free である。

利用価値は GPU メモリそのものではなく、以下にある:

  1. 解放された物理ページはカーネルの slab/buddy により カーネルオブジェクト (本研究では pipe_buffer)へ再割り当てされる;
  2. GPU alias ビューからは依然としてこれらのページが見える → カーネルが使用中のオブジェクトフィールドを読み書き できる;
  3. GPU の WRITE_VALUE job を利用し、alias で可視のページに対してピンポイント改変を行う。

本研究がどこまで到達したか

root@kitploit:~
victim GPU バッファ + MMU ページテーブル dump → 物理アドレスマップの構築
  → trigger バッファ解放で圧力を生成 → pipe をスプレー(F_SETPIPE_SZ で縮小)
  → pipe_buffer 配列が解放領域に着地(クロスキャッシュ UAF 再利用)
  → alias ビューで ops ポインタをスキャン → anon_pipe_buf_ops をリーク → KASLR slide
  → GPU で pipe_buffer の page / offset / len を改変
  → 正規の pipe read/write パスを利用
  ⇒ 任意物理ページ読み(偽装 page ポインタ)
  ⇒ 任意物理ページ書き(pipe merge 書き込みパス)
  ⇒ 既知内容ページを自己検証 oracle として使用し、読み書きが空洞/未マップ領域に落ちないことを保証

ここまで。

主要技術ポイント(各ポイントは docs/ に独立した節がある)

  • 多段セーフティゲート:いかなる物理読みの前にも overlap / 自己整合 / contiguity / 内容自己検証などの複数のゲートを通過しなければならず、いずれか一つでも失敗すれば直ちに現場を復元して終了する——本研究全体で最も重要な エンジニアリング規律。
  • 物理アドレスモデルの落とし穴:GPU PTE ソフトウェアフラグビットの汚染、物理アドレスの 32 ビット切り捨て、 KASLR がカーネルイメージの 物理ベースアドレス もランダム化すること、ベンダーごとの page_to_virt 実装差異、 no-map 予約領域は線形マッピングにそもそも存在しない(読むと panic)。
  • m 曖昧性の処理:物理アドレス上位ビットの曖昧性は決して推測に頼らず、「既知内容ページ oracle」で 内容自己検証を行う。
  • プリミティブの寿命と安全な失敗:読みプローブには回数予算があり、超過後は必ず本ラウンドを放棄する。各 実験のすべての終了パスで、改変されたオブジェクトフィールドを復元しなければならない。

リポジトリ構造

root@kitploit:~
docs/
  01-exploit-chain.md            UAF から読み書きプリミティブまで:各段階の原理と実装要点
  02-physical-address-model.md   物理アドレスモデル、セーフティゲート、m 曖昧性、既知の落とし穴
exploit/
  cve-2021-28664-poc.c           読み書きプリミティブの完全なフロー骨格(デバイス値なし)
scripts/
  README.md                      実験自動化ツールの設計説明(ループ/検証/復元)

ソースコードの説明

exploit/cve-2021-28664-poc.c は 読み書きプリミティブの PoC 骨格テンプレート である:

  • 完全なフロー構造を保持(リソース準備 → スプレー → スキャン → キャリブレーション → 読み書きプリミティブ → 復元終了);
  • すべてのデバイス関連定数は TODO(DEVICE) で注記され、そのまま使用可能な数値は 一切ない;
  • 各危険操作の前に明示的な検証ゲートと復元パスがあり、「安全な失敗」の設計方法を示す。

これはチェーン全体がどのように構成されるかを理解するためのものであり、いかなるデバイスに対しても有効なツールとして直接コンパイルできるものではない。

参考

  • ARM Mali kbase ドライバ(公開カーネルソースツリー)
  • CVE-2021-28664 の上流修正記録と公開分析
  • Linux fs/pipe.c / include/linux/pipe_fs_i.h(公開ソース)
  • arm64 メモリモデル:Documentation/arch/arm64/memory.rst(公開ドキュメント)

License

  • コード(exploit/):GPL-3.0、LICENSE を参照
  • ドキュメント(README、docs/、scripts/):CC BY-NC-SA 4.0、LICENSE-DOCS を参照 (商用禁止;派生コンテンツは同一条件で共有し、本声明を保持すること)
ツールをダウンロード