更新版:2026年11月9日 第26版の統合報告を読む。このページ内の個別脆弱性レポートは過去時点の資料を含みます。現在の対処は統合版と提供元の最新情報で確認してください。
SECURITY / RUNTIMES

言語ランタイムの脆弱性
PHP・Node.js・Python・Ruby・Java・BIND

アプリを書いていなくても当事者になる層。修正版・暫定緩和・見落としやすい穴まで。2026.10.26

今回の主戦場は言語ランタイム本体でした。PHPは未認証RCE、Node.jsは同梱Brotliの境界外書き込み、PythonはSSLContextのUAF、RubyはOnigmo。アプリのコードを1行も変えていなくても当事者になるのが、この層の怖さです。

1. PHP ―「php2shell」確認済み

CVE深刻度内容
CVE-2026-109618
GHSA-w8hw-w9fx-j79w
9.2memory_limit 超過時に longjmp() で中断した際、内部データの初期化途中でクリーンアップが走り、未初期化メモリを有効なデータとして扱う。mod_phpではアプリのコードが動く前の1リクエストで発火
CVE-2026-109619
GHSA-6wmf-4rv5-p3rp
9.2fatal error 後にリクエスト所有の内部状態が解放済みメモリに残り、同一ワーカーの後続リクエストが正常な初期化より先にそれを使う

影響は8.5.12/8.4.27/8.3.36/8.2.35 未満、およびEOLの8.1以下。Webリクエストを処理するすべてのPHP(FPM・mod_php・php-cgi・FrankenPHP・LiteSpeed)が対象で、mod_phpが最も危険。CMSを更新してもPHP本体は直りません。

暫定緩和(更新の代替にはならない)

① 109618:アプリから上書きできない形(php_admin_value 等)で memory_limit=-1、post_max_size を8〜32Mに下げて upload_max_filesize を下回らせる。ただし RLIMIT_AS/RLIMIT_DATA は脆弱な経路を誘発するので使わない。② 109619:session.upload_progress.enabled=0 を設定して全ワーカー再起動(ini_set() や .user.ini に頼らない)。PHP 8.5では fatal_error_backtraces=0 も有効。

日時悪用の観測
10/17(公表4日前)AWSのハニーポット(MadPot)で悪用試行を検知。発信元は商用匿名化ネットワーク。エンバーゴ中の検知で、情報入手経路は不明
10/21 02:00 UTC〜エンバーゴ解除(14:00 UTC)前に複数のPoCが出現
10/21 公表後Cloudflare観測で45分で数万件、2時間で数十万件、数時間で数百万件

AIfrontierの見解 更新適用に加えて、10/17以降の侵害痕跡(不審プロセス・Webシェル・設定変更)の調査が必要です。JPCERT/CCも10月22日に注意喚起(JPCERT-AT-2026-0033)を出しています。

2. Node.js/Bun ―「Node2Shell」=「HTTP2Shell」確認済み

CVE-2026-111497(CVSS 4.0で9.2)。根本原因はNode.jsではなくGoogle Brotli Cライブラリ(c/dec/decode.c)の境界外書き込みです。ブロック型を宣言したストリームが途中で型を切り替えても排除されず、無効な状態のまま復号が続いてバッファ外へ書き込みます。

上流修正は2026年2月27日にgoogle/brotliへコミット済みだったのに、リリースとアドバイザリは10月21日まで出ていませんでした(Brotli 1.0.10/1.1.1/1.2.1)。報告はOpenAI Codex SecurityのKhai Tran氏・Sylvie Mayer氏。10月22日に公開PoC、無修正のNode.js 24.22.0イメージ(arm64)でのコード実行が報告されています。

コンポーネント影響修正版
Node.js 26.x/24.x/22.x26.12.1/24.22.1/22.23.4 未満26.12.1/24.22.1/22.23.4
Node.js 25/23/20以下EOL(修正なし)22系/24系へ移行
Bun1.4.4 未満1.4.4(bun build --compile の生成物も再ビルド)
Google Brotli 本体1.0.3〜1.0.9/1.1.0/1.2.01.0.10/1.1.1/1.2.1
Python brotli/brotlicffi同一デコーダーを同梱1.2.1/1.2.1.0
Envoy Proxy/IstioBrotli展開フィルターEnvoy 1.40.0/1.39.3/1.38.6/1.37.8、Istio 1.29.9/1.30.6/1.31.2
露出経路と緩和

① Express 5/body-parser 2.x(express.json() だけで到達すると報告)。Koa系・@fastify/compress も同様。② fetch() の自動展開(攻撃者管理下のサーバーからの応答)。③ node:zlib のBrotli関数。Express 4/body-parser 1.x は br 本文を展開しません。
緩和は、プロキシ/WAFで Content-Encoding: br を拒否、express.json({inflate:false})、Envoy/IstioのBrotliフィルター無効化。「Accept-Encoding から br を外す」だけでは、サーバーがBrotliで返す応答は防げません。Vercelは10/21からWAFルールを自動適用、Cloudflareも10/25に緊急WAFルール2件をLogモードで追加しています。

同時に10件が修正されました。TLSホスト名検証バイパス(CVE-2026-105483/106069/105482/106072)は中間者攻撃につながるため、外部通信するランタイム・CIから優先的に更新します。randomUUID()/randomInt() のエントロピーキャッシュ(CVE-2026-106074)も含まれます。

注意:コンテナは再ビルドが必須です。node:24.22.0-alpine のようなピン留めタグは、再ビルドしても脆弱なままです。ベースイメージを修正版へ引き直してください。GitHub上の「PoC」「スキャナ」はマルウェア混入の恐れがあるため隔離環境でのみ実行を。

3. Python ― SSLContextとeMudhra確認済み

CVE深刻度内容
CVE-2026-194459.2SSLContextのUAF。sni_callback がコンテキストを切り替えると元の参照が保持されず、未認証のTLSクライアントがクラッシュや解放済みポインタ経由の呼び出しを起こせる
CVE-2026-195537.6wrap_bio() が server_hostname を検証せず、check_hostname=True でもホスト名を渡さないと検証が黙って省略される

修正版は 3.10.22/3.11.17/3.12.15/3.13.16/3.14.8(3.15.0は修正済み)。加えてeMudhra問題で10月21日に緊急リリース(3.15.1/3.14.9/3.13.17、pip 26.2.2・certifi 2026.10.19同梱)、10月24日にはsslモジュールで問題の中間CA鍵を拒否する対応がCVE-2026-115557として開発ブランチにマージされています(10/21リリースには未収録)。

見落としやすい2点:①venvは自動更新されません。本体を上げても、各venvのpipやcertifiは置き換わりません。python -m pip --version/pip show certifi で個別に棚卸しを。②OSの信頼ストアから証明書を消してもpipは守れません。pipはOSストアに加えて内蔵certifiを読みます。REQUESTS_CA_BUNDLE や --cert は「追加」であって、内蔵の問題CAの無効化にはなりません。

4. Ruby ― resolvとOnigmo確認済み

CVE種別内容
CVE-2026-80212DoS悪意あるDNS応答でメモリ枯渇。攻撃者が影響を与えられるホスト名(webhook宛先・ユーザー指定URL)を解決するアプリで、ライブラリが恒久的に保持してしまう応答を返され、繰り返しでプロセスが肥大化
CVE-2026-80213検証迂回ホスト名検証の迂回。許可リストやSSRFフィルタで検査した後に別のドメインを引かされ、許可していないホストへ接続しうる

影響は resolv gem 0.4.0〜0.7.1 と 0.3.1以前。影響するのはresolv経由の名前解決のみ(Resolv直呼び/resolv-replace/同様に解決する依存gem)。Net::HTTP など通常のソケットはOSリゾルバを使うため影響しません。→ resolv 0.7.2(3.3系は0.3.2)へ。

もう一系統がOnigmoです。GitLabのCVSS 10.0×2を含む正規表現系4件の根本原因で、10月23日の Ruby 4.0.9/3.4.12/3.3.13 で修正されました。

GitLabのCVERuby側のバグ修正を含む最初のリリース
CVE-2026-89078選択(alternation)後のパターン解析失敗時の二重解放4.0.0/3.4.12/3.3.13
CVE-2026-93577/97229コンパイル済みパターンのサイズ計算での整数オーバーフロー4.0.8/3.4.12/3.3.13
CVE-2026-110264多数の繰り返しを含むパターンでの内部IDオーバーフロー4.0.9/3.4.12/3.3.13
効くアプリと効かないアプリ:攻撃者が制御できる文字列を正規表現としてコンパイルするアプリ(Regexp.new/Regexp.union//#{input}/)が対象です。自作リテラルだけなら影響しません。そしてRegexp.timeout では防げず、パターン長の制限も緩和策になりません(短いパターンで発火する例があります)。

5. Oracle Java SE ― コード欠陥ではなく「信頼の欠陥」確認済み

CVE-2026-91403(CVSS 3.1で9.1、JSSE)。実体は認証局 eMudhra の中間CA証明書8枚の秘密鍵漏えいです。連鎖するルート証明書がJDK同梱の cacerts にあったため、攻撃者が漏えい鍵で発行した偽証明書をJavaアプリが正規として信頼してしまいます。影響は TLSなりすまし・中間者攻撃による窃取・改竄、署名付きJARの検証もすり抜けうる。

対象は 8u511/11.0.33/17.0.21/21.0.13/25.0.5/27.0.1、GraalVM for JDK 17.0.21/21.0.13、GraalVM Enterprise 21.3.20。修正は該当ルートを含まない最新のJava更新(Oracle Patch Availability Document CPU426)。OpenJDKディストリ(Temurin・Corretto等)やOSのCAパッケージでも同様の失効対応を確認してください。

更新できない場合(Oracle公式の暫定策)

キーストアをバックアップの上、該当ルート4件を削除して再起動します。

keytool -delete -cacerts -alias "emsignrootcag1 [jdk]" keytool -delete -cacerts -alias "emsignrootcag2 [jdk]" keytool -delete -cacerts -alias "emsigneccrootcag3 [jdk]" keytool -delete -cacerts -alias "comodoaaaca [jdk]"

JDK 8は -keystore $JDK_HOME/jre/lib/security/cacerts を指定。または失効確認を有効化(-Dcom.sun.net.ssl.checkRevocation=true -Dcom.sun.security.enableCRLDP=true)。署名付きJARはJDK 17以降で jarsigner -verify -revcheck -strict。可用性の注意:削除によりeMudhra系の正規証明書を使う接続先とのTLSが失敗する場合があります。業務上の接続先を先に確認してください。

6. ISC BIND 9 ― 回避策なし確認済み

10月21日に4件が一斉開示。中心はCVE-2026-94300(CVSS 3.1で8.1)。GSS-TSIG(Kerberos認証をTSIG署名に組み合わせる動的更新)の実装不備で、取得済みの署名付きUDPメッセージをリプレイすると named のメモリが壊れ、サービス停止やRCEに至る恐れがあります。JPRSは10月22日に緊急技術情報を発出しました。

CVEスコア内容
CVE-2026-943008.1GSS-TSIGの同時メッセージでメモリ破壊 → DoS/RCE
CVE-2026-196307.5リゾルバの資源枯渇型DoS(増幅)
CVE-2026-968887.5redirectゾーン+strict QNAME最小化でアサーション失敗
CVE-2026-973137.5複数RPZゾーンの recursive-only 混在で異常終了

影響は 9.11.0〜9.18.50/9.20.0〜9.20.29/9.21.0〜9.21.26。9.18系などEOL系列に修正版はありません。→ 9.20.30/9.21.27(プレビュー版は 9.20.30-S1)へ。ISCは「No workarounds known」、JPRSも「一時的な回避策は存在しません」と明言しています。GSS-TSIGの使用有無は named.conf の tkey-gssapi-keytab/update-policy で確認できますが、使用していなくても更新対象です。適用後は named -v → named-checkconf → 再起動まで。

出典

  • php.net「PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 released」(2026-10-21) https://www.php.net/archive/2026.php#2026-10-21-5
  • CERT-EU Security Advisory 2026-018 https://cert.europa.eu/publications/security-advisories/2026-018
  • AWS Security Blog(MadPotによる公表前の悪用検知) https://aws.amazon.com/blogs/security/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot/
  • JPCERT/CC JPCERT-AT-2026-0033 https://www.jpcert.or.jp/at/2026/at260033.html
  • Node.js「October 2026 Security Releases」(2026-10-21) https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
  • Aikido Security「Node2Shell」 https://www.aikido.dev/blog/node2shell-nodejs-brotli-rce-cve-2026-111497
  • GitHub Advisory GHSA-9v8h-qqgm-4m35(Python brotli) https://github.com/advisories/GHSA-9v8h-qqgm-4m35
  • Python Software Foundation Blog(3.10.22ほか) https://blog.python.org/2026/10/python-31022-31117/
  • Ruby公式「セキュリティアドバイザリ: CVE-2026-80212 / 80213」 https://www.ruby-lang.org/ja/news/2026/08/27/multiple-vulnerabilities-in-resolv/
  • Ruby公式「Regexp fixes for GitLab CVEs」(2026-10-23) https://www.ruby-lang.org/en/news/2026/10/23/regexp-fixes-for-gitlab-cves/
  • Oracle Security Alert CVE-2026-91403 https://www.oracle.com/security-alerts/alert-cve-2026-91403.html
  • Oracle「Distrusting eMudhra Intermediate Certificates in Oracle JDK」(2026-10-24更新) https://ops.java/emudhra
  • JPRS 緊急技術情報(BIND 9、2026-10-22) https://jprs.jp/tech/security/2026-10-22-bind9-cve-2026-94300.html
  • ISC KB CVE-2026-94300 https://kb.isc.org/docs/cve-2026-94300