
Pythonツールキット。Apache HTTPサーバーをCVE-2026-23918(HTTP/2のダブルフリーRCE)および関連する4件のCVEに対して監査するための。ALPN検証付きパッシブスキャナ + 読み取り専用のローカル監査ツール。エクスプロイトは含まれていません。
CVE-2026-23918(Apache HTTPD HTTP/2 ダブルフリー RCE)および2026年5月4日のApache Software Foundationセキュリティアドバイザリで開示された4つの関連CVEに対する防御的監査ツール。
| CVE | 深刻度 | コンポーネント | 影響 | 影響を受けるバージョン |
|---|---|---|---|---|
| CVE-2026-23918 | 高 (CVSS 8.8) | HTTP/2 | ダブルフリー / RCE | 2.4.66のみ |
| CVE-2026-24072 | 中程度 | mod_rewrite (ap_expr) | 権限昇格 | ≤ 2.4.66 |
| CVE-2026-28780 | 低 | mod_proxy_ajp | ヒープバッファオーバーフロー | ≤ 2.4.66 |
| CVE-2026-29168 | 低 | mod_md (OCSP) | リソース枯渇 | 2.4.30 – 2.4.66 |
| CVE-2026-29169 | 低 | mod_dav_lock | NULLポインタ参照 / DoS | ≤ 2.4.66 |
すべての問題は Apache HTTP Server 2.4.67 で修正されています。
これらのツールは、自分が所有するシステム、または明示的な書面による許可を得たシステムに対してのみ使用することを目的としています。無許可のスキャンは、お住まいの地域で違法となる可能性があります。
このツールキットは設計上防御的です:
Server: HTTPヘッダーのみを読み取り、標準のTLS ALPNを使用します — これはすべての最新ブラウザがHTTP/2をネゴシエートするために使用するのと同じメカニズムです。.
├── apache_passive_audit.py # 外部アセット監査(バナー取得 + ALPN)
├── apache_local_audit.py # ホスト上 / SSH ローカル監査
├── LICENSE # MIT
├── .gitignore
└── README.md
python3 およびそれ以降のすべてのリリースで動作します。git clone https://github.com/sibersan/cve-2026-23918.git
cd cve-2026-23918
chmod +x apache_passive_audit.py apache_local_audit.py
apache_passive_audit.pyHTTP Server: ヘッダーを読み取ってApacheのバージョンを検出し、CVEテーブルと照合します。さらに、HTTPSターゲットに対して、標準のTLS ALPNネゴシエーションを実行してHTTP/2が公開されているかどうかを判断します — これはCVE-2026-23918が悪用可能であるための主要な前提条件です。エクスプロイトペイロードは送信されません。
スクリプトはTLSハンドシェイクのALPN拡張(RFC 7301)で h2 と http/1.1 を提供します。サーバーの選択は、「HTTP/2が有効か?」に対する標準的で明確な答えです — すべての最新ブラウザとcurlで使用されています。脆弱性や異常な動作を引き起こすことはありません。
リスク判定はこれを反映します:
# 単一ターゲット
python3 apache_passive_audit.py -t https://web.example.com
# 複数ターゲット
python3 apache_passive_audit.py -t https://a.example.com -t https://b.example.com
# ターゲットファイル、並列実行、CSV + JSON出力
python3 apache_passive_audit.py -f targets.txt -w 20 -o report.csv --json report.json
# CI / ログ用(色なし)
python3 apache_passive_audit.py -f targets.txt --no-color
targets.txt の形式(1行に1ターゲット、コメントは #):
https://www.example.com
intranet.example.local:8443
# 古いステージングボックス
http://10.0.5.12
| コード | 意味 |
|---|---|
| 0 | すべてのターゲットが安全 |
| 1 | 少なくとも1つのターゲットがUNKNOWNまたはERROR |
| 2 | 少なくとも1つのターゲットがVULNERABLEまたはAT_RISK |
ServerTokens Prod または Minimal のサーバーはバージョンを隠します — スクリプトは正直に UNKNOWN を返します。ローカル監査で確認してください。apache_local_audit.pyターゲットホスト上(またはSSH経由)で実行され、Apacheバイナリ、バージョン、ロード済みモジュール、HTTP/2設定を検査します。また、悪用可能性の前提条件を評価します:例えば、バージョンが2.4.66でもHTTP/2が無効な場合、CVE-2026-23918のリスクはそれに応じて引き下げられます。
sudo python3 apache_local_audit.py
# JSONレポート(一元管理用)
sudo python3 apache_local_audit.py --json /var/log/apache_audit_$(hostname).json
# カスタムバイナリパス
sudo python3 apache_local_audit.py --binary /opt/apache/bin/httpd
httpd -v / apache2 -v — バージョンhttpd -V — ビルド情報、HTTPD_ROOT、SERVER_CONFIG_FILEapache2ctl -M または httpd -M — ロード済みモジュールdpkg-query / rpm -q — パッケージバージョンInclude/IncludeOptional で取り込まれたすべてのファイル(Debianの sites-enabled/、mods-enabled/ を含む)→ Protocols ディレクティブ(h2 / h2c / http/1.1)| フラグ | 説明 |
|---|---|
--binary | Apacheバイナリパス(自動検出を上書き) |
--json | JSONレポート出力 |
--no-color | 色付き出力を無効化 |
| コード | 意味 |
|---|---|
| 0 | SAFE |
| 1 | PATCH_NEEDED または UNKNOWN |
| 2 | VULNERABLE または AT_RISK |
完全な設定読み取りには sudo/root を推奨します。これがないと、sites-enabled/、mods-enabled/、または /etc/httpd/conf.d/ 内の一部のファイルが読み取れない場合があります。
複数ホストでローカル監査を実行し、レポートを一元的に収集するには、Ansibleアドホックの例:
ansible all -i inventory.ini -b -m script \
-a "apache_local_audit.py --json /tmp/apache_audit.json --no-color"
ansible all -i inventory.ini -b -m fetch \
-a "src=/tmp/apache_audit.json dest=./reports/ flat=no"
収集したJSONファイルは jq または小さなPythonスクリプトでマージできます。
CVE-2026-23918(パッチ適用まで)の場合:
Protocols ディレクティブから h2 と h2c を削除するか、Debian/Ubuntuで sudo a2dismod http2 を実行し、サービスをリロードします。mod_dav_lock をアンロード(CVE-2026-29169)。.htaccess 書き込みアクセス権を持つユーザー/バーチャルホストを監査(CVE-2026-24072)。公式アドバイザリ:https://httpd.apache.org/security/vulnerabilities_24.html
プルリクエストを歓迎します。新しいCVEを追加する場合は:
CVE_TABLE に影響を受けるバージョン範囲と match ラムダを持つエントリを追加。needs フィールドを定義。from __future__ import annotations、PEP 585ジェネリクス(list[int])、subprocess.run(capture_output=True)、@dataclass を避ける。MIT © 2026 SiberSAN
このソフトウェアは「現状のまま」提供され、いかなる種類の保証もありません。本番環境で使用する前にテスト環境で検証してください。ユーザーは、許可されていないシステムに対する使用について、すべての法的責任を負うものとします。
| フラグ | 説明 |
|---|
-t, --target | 単一ターゲット(繰り返し指定可) |
-f, --file | ターゲットリストファイル |
-o, --csv | CSVレポート出力 |
--json | JSONレポート出力 |
--timeout | リクエストタイムアウト(秒、デフォルト10) |
-w, --workers | 並列ワーカースレッド(デフォルト10) |
--no-color | 色付き出力を無効化 |
| レベル | 意味 |
|---|
VULNERABLE | バージョンがアドバイザリのCVE範囲に一致し、前提条件が満たされている(例:HTTP/2有効) |
AT_RISK | 未パッチのバージョンだが高深刻度の前提条件は満たされていない; 他のCVEは引き続き該当 |
SAFE | バージョン2.4.67以上 |
UNKNOWN | バナー非表示(ServerTokens Prod)またはリバースプロキシ/WAFで隠蔽 — ローカル監査スクリプトで確認 |
NOT_APACHE | Apacheではない(nginx、IISなど) |
ERROR | 接続エラー |
| レベル | 意味 |
|---|
VULNERABLE | 未パッチのバージョン + 高深刻度CVEの前提条件満たされている(例:HTTP/2有効) |
AT_RISK | 未パッチのバージョン + 少なくとも1つのCVE前提条件満たされている |
PATCH_NEEDED | 未パッチのバージョンだが、関連モジュール/プロトコルが有効でない — とにかくパッチ適用 |
SAFE | バージョン2.4.67以上 |
UNKNOWN | バージョンを検出できませんでした |