この記事の概要
Apache HTTP Server 2.4.66 の mod_http2 にダブルフリー脆弱性(CVE-2026-23918、CVSSスコア 8.8)が発見されました。
認証不要・1接続 2フレームで DoS が成立し、Debian系ディストリビューションや Apache 公式 Docker イメージでは RCE PoC も実証されています。
2.4.67 以降へのアップグレード、または HTTP/2 の無効化で早急に対応してください。
この脆弱性について
| 項目 | 内容 |
|---|---|
| CVE-ID | CVE-2026-23918 |
| CVSSスコア | 8.8(CVSS v3.1) |
| 脆弱性タイプ | ダブルフリー(CWE-415) |
| 発見者 | Bartlomiej Dmitruk(Striga.ai)/ Stanislaw Strzalkowski(ISEC.pl) |
| 公開日 | 2026年5月5日 |
| PoC公開状況 | RCE PoC 実証済み(x86_64 環境) |
| 対応策 | パッチあり(Apache HTTP Server 2.4.67) |
影響を受けるバージョン:
- Apache HTTP Server 2.4.66(mod_http2 有効時)
修正済みバージョン:
- Apache HTTP Server 2.4.67 以降
原因
今回の脆弱性は、Apache HTTP Server の HTTP/2 実装モジュール mod_http2 のストリームクリーンアップ処理に存在するダブルフリーです。
具体的には h2_mplx.c のコードパスで問題が発生します。
技術的な発生メカニズム:
クライアントが同一の HTTP/2 ストリーム上で HEADERS フレームを送信した直後に、非ゼロのエラーコードで RST_STREAM を送信するという特定のシーケンスを実行すると、マルチプレクサーがストリームを登録する前に 2 つのコールバックが連鎖して呼び出されます。
on_frame_recv_cb(RST 受信時)on_stream_close_cb(ストリームクローズ時)
この 2 つのコールバックがいずれも h2_mplx_c1_client_rst → m_stream_cleanup を呼び出し、同一の h2_stream ポインターをクリーンアップ配列(spurge)に2 回プッシュしてしまいます。
その後 c1_purge_streams が各エントリーに対して h2_stream_destroy → apr_pool_destroy を呼び出すと、2 回目の呼び出しが既に解放済みのメモリーを対象にし、ダブルフリーが発生します。
クライアント
│
├─ HEADERS フレーム送信(ストリーム #N)
└─ RST_STREAM 送信(ストリーム #N, error_code≠0)
↓
on_frame_recv_cb ─┐
on_stream_close_cb ─┘ 両方が m_stream_cleanup を呼ぶ
↓
spurge 配列に h2_stream* が 2 回追加
↓
c1_purge_streams が apr_pool_destroy を 2 回実行
↓
❌ ダブルフリー発生
この攻撃に必要なのは 1 本の TCP 接続と 2 フレームのみであり、認証・特殊ヘッダー・特定 URL は一切不要です。
影響範囲
2 段階の影響シナリオ:
シナリオ 1:DoS(サービス拒否)— 影響: 全対象環境
Apache が multi-threaded MPM(worker / event)でデプロイされている場合、上記の攻撃リクエストにより ワーカープロセスが即座にクラッシュします。
Apache は自動的にワーカーを再生成しますが、攻撃者が連続してリクエストを送り続ける限り、ワーカーが常にクラッシュ状態に保たれ、そのワーカーが処理中の全リクエストがドロップされます。
- 認証不要
- 1 接続・2 フレームで成立
- 標準的な本番デプロイが対象(mod_http2 + worker/event MPM はデフォルト構成)
- ※ MPM prefork は本脆弱性の影響を受けない
シナリオ 2:RCE(リモートコード実行)— 影響: Debian 系・Docker 公式イメージ
Apache Portable Runtime(APR)が mmap アロケーターを使用している環境では、RCE が可能です。
これは Debian / Ubuntu 系ディストリビューション、および Apache 公式 Docker イメージがデフォルトでこの条件を満たします。
研究者チームは x86_64 環境での RCE PoC を実証しており、その攻撃チェーンは次のとおりです。
- ダブルフリーにより解放された仮想アドレスに mmap 再利用で偽の
h2_stream構造体を配置 - 偽構造体のプールクリーンアップ関数ポインターを
system()に向ける - Apache のスコアボードメモリーを偽構造体・コマンド文字列の安定したコンテナとして利用
スコアボードは ASLR が有効な環境でもサーバーライフタイム全体を通じて固定アドレスに存在するため、これが実用的な RCE を可能にしています。
対象環境まとめ:
| 環境 | DoS リスク | RCE リスク |
|---|---|---|
| Apache 2.4.66 + mod_http2 + worker/event MPM | 🔴 高(即成立) | 条件次第 |
| Debian / Ubuntu 系(APR mmap デフォルト) | 🔴 高 | 🟠 中〜高(PoC 実証済み) |
| Apache 公式 Docker イメージ | 🔴 高 | 🟠 中〜高(PoC 実証済み) |
| MPM prefork 使用環境 | ✅ 影響なし | ✅ 影響なし |
| Apache 2.4.67 以降(パッチ適用済み) | ✅ 修正済み | ✅ 修正済み |
対応策・回避策
推奨対応 1:Apache HTTP Server のアップグレード(最優先)
Apache HTTP Server を 2.4.67 以降にアップグレードしてください。
# Ubuntu / Debian 系
sudo apt update
sudo apt install --only-upgrade apache2
apache2 -v
# 期待出力: Server version: Apache/2.4.67 (Ubuntu)
# RHEL / CentOS / AlmaLinux / Rocky Linux 系
sudo dnf update httpd
httpd -v
# Amazon Linux 2023
sudo dnf update httpd
Docker コンテナの場合:
# Dockerfile: 最新の公式イメージを使用する
FROM httpd:2.4.67-alpine
# または
FROM httpd:latest
# docker-compose.yml を使用している場合
docker-compose pull
docker-compose up -d
# 手動でイメージを更新する場合
docker pull httpd:2.4.67-alpine
docker stop <container_name>
docker rm <container_name>
docker run -d ... httpd:2.4.67-alpine
推奨対応 2:HTTP/2 の無効化(即時の暫定回避策)
パッチ適用が即座にできない場合、mod_http2 を無効化することで本脆弱性の影響を回避できます。
# /etc/apache2/mods-available/http2.conf または httpd.conf / apache2.conf に追記
# Protocols ディレクティブから h2 / h2c を除外する
# 変更前(脆弱)
Protocols h2 h2c http/1.1
# 変更後(回避策)
Protocols http/1.1
変更後に設定を反映します。
# Ubuntu / Debian 系
sudo a2dismod http2
sudo systemctl reload apache2
# RHEL 系
sudo systemctl reload httpd
確認方法
現在のバージョン確認:
# Apache バージョン確認
apache2 -v # Debian 系
httpd -v # RHEL 系
apachectl -v # 汎用
# 期待するアウトプット例(修正済み)
# Server version: Apache/2.4.67 (Ubuntu)
mod_http2 が有効かどうかの確認:
# ロード済みモジュールの確認
apache2ctl -M 2>/dev/null | grep http2
# 出力: http2_module (shared) ← 有効になっている場合
# 設定ファイルで HTTP/2 が有効になっているか確認
grep -r "Protocols" /etc/apache2/ /etc/httpd/ 2>/dev/null | grep -i h2
MPM の種類を確認:
# prefork なら DoS/RCE の影響なし
apache2ctl -M 2>/dev/null | grep -E "worker|event|prefork"
# または
apachectl -M | grep mpm
Docker 環境での確認:
# コンテナ内で確認
docker exec <container> httpd -v
# 使用中の Docker イメージのダイジェストを確認
docker inspect <container> | grep -i image
まとめ
CVE-2026-23918 は Apache HTTP Server 2.4.66 の mod_http2 に存在するダブルフリー脆弱性で、認証不要・1 接続 2 フレームで DoS が成立します。
Debian 系・Docker 公式イメージではさらに RCE も実証されており、CVSSスコア 8.8 の評価は妥当です。
mod_http2 はデフォルト有効なため影響範囲が広く、まず自環境の Apache バージョンと mod_http2 の有効状態を確認し、2.4.67 以上へのアップグレードを優先してください。
即時対応が難しい場合は HTTP/2 の無効化で暫定的に回避できます。


コメント