<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:snf="http://www.smartnews.be/snf"><channel><title>言語別脆弱性レーダー</title><link>https://humanhacker.ai/media/vuln-radar/</link><description>プログラミング言語のライブラリの脆弱性と修正版</description><language>ja</language><copyright>© ヒューマンハッカー株式会社</copyright><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><lastBuildDate>Sun, 01 Nov 2026 12:00:00 GMT</lastBuildDate><ttl>30</ttl><atom:link href="https://humanhacker.ai/media/vuln-radar/feed.xml" rel="self" type="application/rss+xml"/><snf:logo><url>https://humanhacker.ai/assets/images/feed/feed-logo.5cc0447a4c.png</url></snf:logo><snf:darkModeLogo><url>https://humanhacker.ai/assets/images/feed/feed-logo-dark.d0bbd8bc35.png</url></snf:darkModeLogo><item><title>PHPのWindows版のBrotliの脆弱性、8.5.12-1などへの入れ替えとcURL・Guzzleの確かめ方（CVE-2026-111497）</title><link>https://humanhacker.ai/media/vuln-radar/php-windows-brotli/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/php-windows-brotli/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>PHPのWindows版に同梱のBrotliの脆弱性CVE-2026-111497は、米CISAが悪用を確認しています。10月21日の版も対象のままである理由、GuzzleやWordPressで自動展開が有効になる条件、8.5.12-1などへの入れ替えと確かめ方を説明します。</description><content:encoded><![CDATA[<p>PHP公式は2026年10月26日（日本時間）、圧縮形式Brotliの脆弱性CVE-2026-111497を直したWindows向けパッケージ8.5.12-1・8.4.27-1・8.3.36-1・8.2.35-1を公開しました。10月21日にPHP本体の脆弱性の修正で上げた環境も、同梱のBrotliは古いままです。PHPの版の表示は変わらないので、同梱のBrotliの版で確かめます。</p><h2>PHPのWindows版で起きることと、10月21日の版が対象の理由</h2><p>CVEの記録（採番機関はGoogle）によると、Brotli 1.0.3〜1.2.0の展開処理に不備があり、細工した圧縮データを展開すると、メモリの破壊、情報の漏えい、サービス停止、場合によっては任意のコード実行につながるおそれがあります。修正版は1.0.10・1.1.1・1.2.1です。深刻度は、Googleの評価でCVSS 4.0の9.2、NVDの評価でCVSS 3.1の9.8です。<a href="#source-2">[2]</a><a href="#source-4">[4]</a></p><p>PHP公式によると、Windows版ではcURL拡張を通じてこの展開処理に届きます。パッケージに付く部品の一覧（SBOM）では、10月21日に出た8.5.12・8.4.27・8.3.36・8.2.35のWindows版はBrotli 1.2.0を同梱し、-1の版は1.2.1です。<mark>10月21日の更新を済ませた環境も、-1の版に入れ替えるまでは対象です。</mark><a href="#source-1">[1]</a><a href="#source-6">[6]</a><a href="#source-7">[7]</a></p><p>Brotliそのものの仕組みと、Python・Node.jsでの確かめ方は、<a href="https://humanhacker.ai/media/vuln-radar/brotli-decoder/">Brotliの脆弱性の記事</a>で説明しています。</p><figure><div><div><div><p><span>Windows版PHPでは、</span><span>cURLの自動展開から同梱のBrotliの不備に届く</span></p><p>PHP公式の告知とCVEの記録から、攻撃の入口と脆弱な部品を並べる。</p></div><div><div><b>外部のAPI・Webページ</b><span>細工した圧縮データを含むHTTP応答を返す</span></div></div><div><span>↓</span><span>cURLの自動展開が有効なとき</span></div><div><p>Windows版PHP 8.2〜8.5（10月26日より前の版）</p><div><div><b>cURL拡張</b><span>CURLOPT_ENCODINGを設定するとHTTP応答を自動で展開する</span></div><div><b>同梱の<b>Brotli</b> 1.2.0</b><span>10月21日に出た8.5.12などのWindows版も1.2.0のまま</span></div></div></div><div><span>↓</span><span>展開処理の不備</span></div><div><div><b>起きること</b><span>メモリの破壊、情報の漏えい、サービス停止、場合によっては任意のコード実行</span></div></div><div><span>↓</span><span>初期設定で自動展開を有効にする</span></div><div><div><b>Guzzle 7・8</b><span>decode_contentの初期値がtrue</span></div><div><b>LaravelのHTTPクライアント</b><span>Guzzleを使うため同じく有効</span></div><div><b>WordPress（Requests）</b><span>cURLで通信するとき有効にする</span></div></div><p>出典　PHP公式「Updated PHP Windows builds for Brotli security fix」（2026-10-26）、CVEの記録「CVE-2026-111497」（2026-10-22）</p></div></div></figure><h2>PHPのcURLで自動展開が有効になる場合</h2><p>PHP公式は、cURLでHTTP応答の自動展開が有効なときに問題の処理に届くとし、cURLの初期設定では無効だが、アプリやHTTPクライアントのライブラリが有効にすることがあると説明しています。有効にする設定は<code>CURLOPT_ENCODING</code>（別名<code>CURLOPT_ACCEPT_ENCODING</code>）です。よく使われるライブラリの初期の動作は、ソースで見ると次のとおりです。<a href="#source-1">[1]</a><a href="#source-8">[8]</a><a href="#source-9">[9]</a><a href="#source-12">[12]</a><a href="#source-16">[16]</a></p><div><table><thead><tr><th>使い方</th><th>初期設定での自動展開</th></tr></thead><tbody><tr><td>自分で<code>curl_*</code>関数を呼ぶ</td><td><code>CURLOPT_ENCODING</code>を設定したときだけ有効</td></tr><tr><td>Guzzle 7・8</td><td>有効（<code>decode_content</code>の初期値がtrueで、<code>CURLOPT_ENCODING</code>に空文字を設定し、使えるすべての展開方式を有効にする）</td></tr><tr><td>LaravelのHTTPクライアント</td><td>Guzzleを使うため、同じく有効</td></tr><tr><td>WordPress（Requests）</td><td>有効（cURLで通信するとき<code>CURLOPT_ENCODING</code>に空文字を設定）</td></tr></tbody></table></div><p><mark>GuzzleやWordPressを使うアプリは、何も設定していなくても自動展開が有効です。</mark>外部のAPIやWebページから受け取る応答が経路になります（ソースから見た当社の整理）。</p><h2>Brotliの脆弱性の悪用の状況</h2><p>米CISAは10月27日（米国時間）、この脆弱性を「Google Brotli」としてKEVに追加しました。対応期限は11月10日です。PHPのWindows版を通じた悪用の記載は、11月1日の確認時点でPHP公式の告知にもKEVにもありません。今後30日に悪用される見込みの推定（EPSS）は82.6%です（10月31日時点、CVEとしての値）。<a href="#source-1">[1]</a><a href="#source-3">[3]</a><a href="#source-13">[13]</a></p><p>セキュリティ会社ELLIO（第三者）は、PoCが公開されていて、それを写したNode.jsを狙う攻撃の通信を観測したと報告しています。PHPのWindows版で動くPoCの記載は、確認した一次情報にはありません。当社はPoCを検証していません。<a href="#source-14">[14]</a></p><figure><div><div><div><p><span>10月21日の更新のあとに同梱のBrotliが直り、</span><span>翌日にKEVに載った</span></p><p>PHP公式の告知、CVEの記録、KEVから、日付のある出来事を並べる。</p></div><p><span></span>PHP公式　<span></span>Google・米CISAなど</p><div><div><span></span><p>2026年10月21日</p><div><div><b>PHP 8.5.12などを公開</b><span>PHP本体の脆弱性2件の修正。Windows版の同梱Brotliは1.2.0のまま</span></div></div></div><div><span></span><p>10月22日</p><div><div><b>GoogleがBrotli 1.2.1などを公開</b><span>CVE-2026-111497の記録も同じ日に出た</span></div><div><b>9.2</b><span>CVSS 4.0（Googleの評価）</span></div></div></div><div><span></span><p>10月26日</p><div><div><b>PHP公式が8.5.12-1などを再公開</b><span>Windows版の同梱Brotliを1.2.1に入れ替えた</span></div></div></div><div><span></span><p>10月27日</p><div><div><b>米CISAが「Google Brotli」としてKEVに追加</b><span>米国時間。PHP本体の2件は10月26日からKEVに載っている</span></div></div></div><div><span></span><p>10月31日</p><div><div><b>EPSSの推定</b><span></span></div><div><b>82.6%</b><span>今後30日に悪用される見込み</span></div></div></div><div><span></span><p>11月10日</p><div><div><b>KEVの対応期限</b><span></span></div></div></div></div><p>出典　PHP公式「Updated PHP Windows builds for Brotli security fix」（2026-10-26）、CVEの記録「CVE-2026-111497」（2026-10-22）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）</p></div></div></figure><h2>攻撃を受けていないかの確認</h2><p>悪用が確認された脆弱性は、更新に加えて、更新前に攻撃を受けていないかを確認します。</p><ol><li>公開していた期間のWebサーバー・アプリケーションのログで、異常終了や不審な要求がないか確認します。</li><li>見覚えのないファイル（Webシェルなど）や、設定・アカウントの変更がないか確認します。</li><li>サーバーから見覚えのない宛先への通信がないか確認します。</li><li>痕跡が見つかった場合は、ログや機器の状態を保全し、専門の窓口に相談します。</li></ol><h2>PHPの系列ごとの入れ替え先</h2><p>入れ替え先は、PHP公式の告知と、配布元のWindows版の一覧から出しました（11月1日確認）。</p><div><table><thead><tr><th>系列</th><th>10月21日の版（Brotli 1.2.0）</th><th>入れ替え先（Brotli 1.2.1）</th></tr></thead><tbody><tr><td>8.5</td><td>8.5.12</td><td><b>8.5.12-1</b></td></tr><tr><td>8.4</td><td>8.4.27</td><td><b>8.4.27-1</b></td></tr><tr><td>8.3</td><td>8.3.36</td><td><b>8.3.36-1</b></td></tr><tr><td>8.2</td><td>8.2.35</td><td><b>8.2.35-1</b></td></tr><tr><td>8.1</td><td>8.1.34（2025年12月）</td><td>再公開なし。8.2以上へ移る</td></tr></tbody></table></div><p>「-1」は依存ライブラリを更新して作り直したことを示し、PHPのソースと実行時の版は変わりません。-2以降の版は出ていません。配布物の一覧は、<code>windows.php.net</code>から<code>downloads.php.net/~windows/releases/</code>に転送されます。<a href="#source-1">[1]</a><a href="#source-5">[5]</a></p><p>各パッケージには部品の一覧（.cdx.json）と、既知の脆弱性への対応を書いたVEX（.openvex.json）が付きます。8.5.12-1のVEXにはCVE-2026-111497の記載がないので、脆弱性スキャナーの結果は、部品の一覧のBrotliの版と照らし合わせます。8.1はPHPのサポート対象（8.2〜8.5）に入っておらず、8.1.34には部品の一覧もありません。<a href="#source-5">[5]</a><a href="#source-6">[6]</a><a href="#source-11">[11]</a><a href="#source-15">[15]</a></p><figure><div><div><div><p><span>10月21日の版は同梱のBrotliが1.2.0で、</span><span>末尾に「-1」が付いた版に入れ替える</span></p><p>PHPの系列ごとに、10月21日の版と入れ替え先を並べる。</p></div><div><div></div><div><b>10月21日の版</b><span>Brotli 1.2.0</span></div><div><b>入れ替え先</b><span>Brotli 1.2.1</span></div><div>8.5</div><div><span>8.5.12</span></div><div><span>8.5.12-1</span></div><div>8.4</div><div><span>8.4.27</span></div><div><span>8.4.27-1</span></div><div>8.3</div><div><span>8.3.36</span></div><div><span>8.3.36-1</span></div><div>8.2</div><div><span>8.2.35</span></div><div><span>8.2.35-1</span></div><div>8.1</div><div><span>8.1.34（2025年12月）</span></div><div><span>再公開なし。8.2以上へ移る</span></div></div><div><b>だから</b>　php -vの表示は変わらないので、curl_version()のbrotli_versionが1.2.1かで確かめる。</div><p>出典　PHP公式「Updated PHP Windows builds for Brotli security fix」（2026-10-26）、PHP公式「Windows向け配布物の一覧」（2026-11-01確認）</p></div></div></figure><h2>Windows版PHPの同梱Brotliを確かめて、-1の版に入れ替える手順</h2><ol><li><p>使っているPHPの場所を確かめます。コマンドラインとWebサーバー（IISのFastCGI、Apacheなど）で別のPHPを使っていることがあるので、Webサーバーの設定に書かれたPHPの場所とも照らし合わせます。</p><div><div><span>コマンドプロンプト</span></div><pre><code>where php</code></pre></div></li><li><p>系列と、スレッドセーフ版（TS）か非スレッドセーフ版（NTS）か、x64かx86かを確かめます。入れ替えるzipを選ぶときに使います。</p><div><div><span>コマンドプロンプト</span></div><pre><code>php -v
php -i | findstr /c:&quot;Thread Safety&quot; /c:&quot;Architecture&quot;</code></pre></div></li><li><p>cURL拡張が使う同梱Brotliの版を表示します。1.2.1でなければ入れ替えの対象です。</p><div><div><span>コマンドプロンプト</span></div><pre><code>php -r &quot;echo curl_version()['brotli_version'] ?? 'none';&quot;</code></pre></div></li><li><p>アプリとComposerで入れたライブラリ（vendorフォルダ）で、自動展開を有効にする設定と、Guzzleが入っているかを確かめます。vendor\guzzlehttpに当たるのはGuzzle自身の処理で、Guzzleを使っていれば初期設定で有効です。</p><div><div><span>コマンドプロンプト</span></div><pre><code>findstr /s /i /m &quot;CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING decode_content&quot; *.php
composer show guzzlehttp/guzzle</code></pre></div></li><li><p>配布元の一覧から、同じ系列・同じ種類（TS／NTS、x64／x86）の-1の版を入手し、SHA-256の値を一覧の<code>sha256sum.txt</code>と照らし合わせます。</p><div><div><span>PowerShell</span></div><pre><code>Get-FileHash .\php-8.5.12-1-nts-Win32-vs17-x64.zip -Algorithm SHA256</code></pre></div></li><li><p>php.iniを残してPHPのフォルダを入れ替え、Webサーバーを再起動します（IISの例）。そのあと、Webサーバーが使うPHPでもう一度<code>brotli_version</code>が1.2.1になったことを確かめます。</p><div><div><span>コマンドプロンプト（管理者）</span></div><pre><code>iisreset
php -r &quot;echo curl_version()['brotli_version'] ?? 'none';&quot;</code></pre></div></li></ol><h2>すぐに入れ替えられないとき</h2><p>PHP公式の告知に回避策の記載はありません。条件から見ると、cURLの自動展開を使わなければ経路から外れます。Guzzleでは<code>'decode_content' =&gt; false</code>を指定し、自分のコードでは<code>CURLOPT_ENCODING</code>を設定しないようにします。これは当社の整理で、提供元が示した回避策ではありません。<a href="#source-1">[1]</a><a href="#source-8">[8]</a></p><p>自動展開を止めると、圧縮された応答がそのまま渡り、アプリが読めなくなる場合があります。外部のAPIとの連携を検証環境で確かめてから切り替えます。</p><h2>10月21日のPHP本体の修正とは別に入れ替える</h2><p>PHP公式は10月21日、PHP本体の脆弱性2件（CVE-2026-109618・CVE-2026-109619、報道ではPHP2Shellとも呼ばれます）を直した8.5.12などを公開しました。この2件は10月26日からKEVに載っています。今回の-1の版は、同梱のBrotliを入れ替えたもので、原因も確かめる所も別です。<a href="#source-3">[3]</a><a href="#source-10">[10]</a></p><p>-1の版は8.5.12などと同じソースから作られているので、10月21日より前の版に留まっている環境も、-1の版に入れ替えれば両方の修正が入ります。<a href="#source-1">[1]</a></p><p><a href="../php/">PHPの脆弱性情報まとめで、PHP2Shell・追加の設定問題・Brotliの対応を比較する</a>こともできます。</p>]]></content:encoded><category>PHP</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>TwistedのHTTP/2の脆弱性、1接続でCPUを使い切らせるおそれと、HTTP/2が有効かの確かめ方・26.10.0への更新（GHSA-vpp8-g58w-m8mp）</title><link>https://humanhacker.ai/media/vuln-radar/twisted-http2-dos/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/twisted-http2-dos/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>Python向けTwistedのHTTP/2サーバーに、認証なしの1接続でCPUを使い切らせる脆弱性があり、10月30日に正式版26.10.0で直りました。HTTP/2が動く条件（h2とTLS）の確かめ方、修正の効き方、CVE番号の扱い、Python 3.9の環境での注意を説明します。</description><content:encoded><![CDATA[<p>Python向けのネットワーク処理フレームワークTwistedのHTTP/2サーバーに、認証なしの1接続でCPUを使い切らせる脆弱性（GHSA-vpp8-g58w-m8mp）が、2026年10月23日（日本時間）にTwistedから公表されました。対象は26.4.0以前で、10月30日に修正を含む正式版26.10.0が出ています。TwistedのHTTP/2は、追加の部品とTLSがそろったときだけ動くので、まず自分の環境で有効かを確かめます。</p><h2>TwistedのHTTP/2サーバーで起きること</h2><p>公式アドバイザリによると、相手が<code>END_STREAM</code>付きの要求を送った直後にそのストリーム（1つの接続の中の個々の通信）を中止すると、Twistedは中止を処理する前に要求の振り分けと応答の作成を済ませてしまいます。中止されたストリームは同時に扱える数（100）の枠から外れ、中止の頻度を抑える仕組みも無かったため、<mark>1つの接続で同じことを繰り返すだけで、わずかな通信量でCPUの1コアを使い切らせることができます。</mark><a href="#source-1">[1]</a></p><p>影響はサービス停止（DoS）で、情報の漏えいや改ざん、コードの実行は無いとされています。深刻度は、Twistedの評価でCVSS 3.1の7.5（重要）です。2019年に直したHTTP/2の大量送信の問題（GHSA-32gv-6cf3-wcmq）の修正は、この経路を防いでいません。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>要求の直後の中止を1接続で繰り返すと、</span><span>TwistedのHTTP/2サーバーがCPUを使い切る</span></p><p>公式アドバイザリとソースから、攻撃の入口と脆弱な処理を並べる。</p></div><div><div><b>認証のない相手</b><span>END_STREAM付きの要求を送った直後に、そのストリームを中止する</span></div></div><div><span>↓</span><span>TLSでHTTP/2を合意した接続</span></div><div><p><b>Twisted</b> 26.4.0以前のtwisted.web</p><div><div><b>HTTP/2サーバー</b><span>h2とpriorityが入りH2_ENABLEDがTrueのときだけ動く</span></div><div><b>中止の前に処理を済ませる</b><span>要求の振り分けと応答の作成を先に行う</span></div><div><b>枠と制限の抜け</b><span>中止したストリームは同時の数（100）の枠から外れ、中止の頻度の制限も無い</span></div></div></div><div><span>↓</span><span>繰り返すだけで</span></div><div><div><b>CPUの1コアを使い切る</b><span>わずかな通信量でサービス停止（DoS）になる</span></div></div><div><span>↓</span><span>起きないこと</span></div><div><div><b>漏えい・改ざん・コード実行</b><span>アドバイザリは無いとしている</span></div></div><p>出典　Twisted公式「GHSA-vpp8-g58w-m8mp」（2026-10-23）、Twistedのソース「twisted/web/http.py」（26.10.0）</p></div></div></figure><h2>TwistedでHTTP/2が有効になる条件</h2><p>アドバイザリの対象は<code>twisted.web</code>のHTTP/2サーバーです。ソースを見ると、HTTP/2の処理は追加の部品h2とpriority（<code>twisted[http2]</code>で入る）が読み込めたときだけ有効になり（<code>H2_ENABLED</code>）、そのときだけTLSの合意の候補にHTTP/2を出します。HTTP/2に切り替わるのは、TLSの接続でHTTP/2が合意されたときだけで、それ以外はHTTP/1.1で処理します。<a href="#source-1">[1]</a><a href="#source-5">[5]</a><a href="#source-6">[6]</a><a href="#source-8">[8]</a></p><div><table><thead><tr><th>確かめること</th><th>HTTP/2が動く</th><th>HTTP/2が動かない</th></tr></thead><tbody><tr><td>h2とpriority</td><td>入っている（<code>H2_ENABLED</code>がTrue）</td><td>入っていない</td></tr><tr><td>待ち受けの方式</td><td>TLS（<code>ssl:</code>など）</td><td>平文のTCP（<code>tcp:</code>など）</td></tr><tr><td>前段の機器</td><td>無い、またはTLSをそのまま通す</td><td>前段がTLSを終端し、HTTP/1.1で渡す</td></tr></tbody></table></div><p>3行目は、ソースから見た当社の整理です。DjangoのASGIサーバーDaphneは、<code>Twisted[tls,http2]</code>を入れて<code>ssl:</code>で起動するとHTTP/2を扱い、起動時に「HTTP/2 support enabled」と記録します。<a href="#source-9">[9]</a></p><h2>TwistedのHTTP/2の脆弱性の悪用の状況</h2><p>米CISAのKEVには、この攻撃の型であるHTTP/2の仕様の番号CVE-2023-44487が、2023年10月10日から載っています。2023年に実際の攻撃で使われた型です。Twistedのこの不具合そのものが悪用されたという記載は、11月1日の確認時点でTwistedのアドバイザリにもKEVにもありません。この件はCVEの番号が付いていないため、今後30日に悪用される見込みの推定（EPSS）もありません。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><p>アドバイザリには、攻撃の手順が文章で書かれています（コードは載っていません）。攻撃の型はよく知られているので、HTTP/2を外部に公開しているなら早めに更新します。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>攻撃の型は2023年からKEVに載り、</span><span>Twistedは10月30日に正式版で直した</span></p><p>KEV、アドバイザリ、PyPIの公開日から、日付のある出来事を並べる。</p></div><p><span></span>Twisted　<span></span>米CISA・GitHub</p><div><div><span></span><p>2023年10月10日</p><div><div><b>HTTP/2の仕様の番号CVE-2023-44487がKEVに</b><span>2023年に実際の攻撃で使われた型</span></div></div></div><div><span></span><p>2026年5月11日</p><div><div><b>26.4.0を公開</b><span>この件の対象になる版</span></div></div></div><div><span></span><p>10月23日</p><div><div><b>アドバイザリを公表し、26.10.0rc1で修正</b><span>攻撃の手順が文章で書かれている</span></div><div><b>7.5</b><span>CVSS 3.1（Twistedの評価）</span></div></div></div><div><span></span><p>10月27日</p><div><div><b>26.10.0rc2を公開</b><span></span></div></div></div><div><span></span><p>10月30日</p><div><div><b>正式版26.10.0を公開</b><span>他に6件の脆弱性の修正も入る。同じ日にGitHub Advisory Databaseに収録</span></div></div></div><div><span></span><p>11月1日</p><div><div><b>この不具合の悪用の記載は無い</b><span>アドバイザリにもKEVにも無い</span></div></div></div></div><p>出典　Twisted公式「GHSA-vpp8-g58w-m8mp」（2026-10-23）、Twisted公式「26.10.0リリースノート」（2026-10-30）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）</p></div></div></figure><h2>Twistedの対象と推奨する版</h2><p>推奨する版は、Twistedのアドバイザリ（26.4.0以前が対象、26.10.0rc1で修正）と、PyPIに公開済みの版から出しました（11月1日確認）。上げる前に、リリースノートで変更点を確かめてください。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-4">[4]</a></p><div><table><thead><tr><th>版</th><th>PyPIへの公開（日本時間）</th><th>この件</th><th>必要なPython</th></tr></thead><tbody><tr><td>26.4.0以前</td><td>26.4.0は2026年5月11日</td><td>対象</td><td>3.9.12以上（26.4.0）</td></tr><tr><td>26.10.0rc1・rc2</td><td>10月23日・10月27日</td><td>修正済み（リリース候補）</td><td>3.10以上</td></tr><tr><td>26.10.0</td><td>10月30日</td><td><b>修正済み（推奨）</b></td><td>3.10以上</td></tr></tbody></table></div><p>26.10.0には、他に6件の脆弱性の修正も入っています。リリースノートは、26.10.0がPython 3.10に対応する最後の版だとしています。Python 3.9で使える修正済みの版は無いので、3.9の環境ではPythonから上げます。<a href="#source-2">[2]</a><a href="#source-4">[4]</a><a href="#source-10">[10]</a></p><figure><div><div><div><p><span>推奨する版は26.10.0で、</span><span>Python 3.10以上が必要</span></p><p>アドバイザリとPyPIの公開日から、版ごとの扱いを並べる。</p></div><div><div><b>26.4.0以前</b><div><span>この件</span><span>対象</span></div><div><span>PyPIへの公開</span><span>26.4.0は2026年5月11日</span></div><div><span>必要なPython</span><span>3.9.12以上（26.4.0）</span></div></div><div><b>26.10.0rc1・rc2</b><span>リリース候補</span><div><span>この件</span><span>修正済み</span></div><div><span>PyPIへの公開</span><span>10月23日・10月27日</span></div><div><span>必要なPython</span><span>3.10以上</span></div></div><div><b>26.10.0</b><span>推奨</span><div><span>この件</span><span>修正済み</span></div><div><span>PyPIへの公開</span><span>10月30日</span></div><div><span>必要なPython</span><span>3.10以上</span></div></div></div><div><b>だから</b>　Python 3.9で使える修正済みの版は無いので、3.9の環境はPythonから上げる。</div><p>出典　Twisted公式「GHSA-vpp8-g58w-m8mp」（2026-10-23）、PyPI「Twisted」（2026-11-01確認）</p></div></div></figure><h2>TwistedのHTTP/2が有効かを確かめて、26.10.0へ上げる手順</h2><ol><li><p>動いているPython環境で、Twistedとh2・priorityの版を確かめます。「Required-by」に、Twistedを必要としているパッケージ（Daphneなど）が出ます。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip show twisted h2 priority</code></pre></div></li><li><p>TwistedのHTTP/2の処理が有効かを確かめます。Trueなら、TLSで待ち受けるサーバーはHTTP/2を受け付けます。</p><div><div><span>ターミナル</span></div><pre><code>python -c &quot;from twisted.web.http import H2_ENABLED; print(H2_ENABLED)&quot;</code></pre></div></li><li><p>外から見て、そのサーバーがHTTP/2で応答するかを確かめます。「2」と出ればHTTP/2です。前段の機器があるときは、Twistedが直接応答しているかを構成と照らし合わせます。</p><div><div><span>ターミナル</span></div><pre><code>curl -s --http2 -o /dev/null -w &quot;%{http_version}\n&quot; https://&lt;ホスト&gt;:&lt;ポート&gt;/</code></pre></div></li><li><p>Pythonの版を確かめ、3.10以上なら26.10.0以上に上げます。ロックファイルに古い版が固定されていないかも確かめ、使っている場合はロックファイルも更新します。</p><div><div><span>ターミナル</span></div><pre><code>python --version
python -m pip install --upgrade &quot;twisted&gt;=26.10.0&quot;
grep -i -n &quot;twisted&quot; requirements*.txt poetry.lock uv.lock</code></pre></div></li><li><p>サーバーを再起動し、動いている環境（コンテナなど）の中でもう一度版を確かめます。</p><div><div><span>ターミナル</span></div><pre><code>docker exec &lt;コンテナ名&gt; python -m pip show twisted</code></pre></div></li></ol><h2>すぐに26.10.0へ上げられないとき</h2><p>公式のアドバイザリに回避策の記載はありません。条件から見ると、HTTP/2を使わない環境は影響の経路から外れます。h2が読み込めなければTwistedはHTTP/2を候補に出さず、HTTP/1.1だけで処理します。Daphneなら<code>http2</code>の追加の部品を入れない形に戻します。これらはソースから見た当社の整理で、提供元が示した回避策ではありません。<a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><p>h2は他のパッケージ（HTTP/2を使うクライアントなど）が必要としていることもあるので、外す前に<code>pip show h2</code>の「Required-by」を確かめます。</p><h2>Twisted 26.10.0の修正の効き方</h2><p>26.10.0では、相手がストリームを中止する頻度に上限が付きました。ソースでは、中止は一度に1,000回まで、その後は毎秒33回ずつ回復し、使い切った接続は<code>ENHANCE_YOUR_CALM</code>の理由を付けて切断します。<mark>設定を変えなくても初期設定で効きます。</mark>上限の値は名前が<code>_</code>で始まる内部の値で、設定項目としては公開されていません。<a href="#source-2">[2]</a><a href="#source-7">[7]</a></p><h2>CVE-2023-44487の番号と、この件の関係</h2><p>Twistedのアドバイザリと、GitHub Advisory Database（日本時間10月30日に収録）のCVE欄は空欄です。一方で26.10.0のリリースノートは、この件を「CVE-2023-44487 (GHSA-vpp8-g58w-m8mp)」として載せています。CVE-2023-44487は2023年に多くの製品で同時に公表されたHTTP/2の仕様の番号です。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-10">[10]</a></p><p>このため、CVEの番号で照らし合わせる脆弱性スキャナーでは、2023年の他の製品の件と混ざったり、番号の無い件として出たりします。Twistedについては、GHSAの番号とTwistedの版で判断します（当社の整理）。</p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Pythonの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Python</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Go製フレームワークEchoのProxyミドルウェアに脆弱性、WebSocketの切り替えを断られた接続でルートの認証を回避されるおそれ。govulncheckで出ない間の確かめ方</title><link>https://humanhacker.ai/media/vuln-radar/echo-websocket/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/echo-websocket/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>EchoのProxyミドルウェアの脆弱性CVE-2026-118264は、上流がWebSocketへの切り替えを断っても接続を中継し続け、Echoのルートで行う認証を回避されるおそれがあります。対象の条件、v4は4.16.3・v5は5.4.4への上げ方、4.16.3のIPExtractorの移行、govulncheckでまだ検出されない点を説明します。</description><content:encoded><![CDATA[<p>Go製のWebフレームワークEchoのProxyミドルウェアで、WebSocketへの切り替えを上流に断られた接続が中継されたまま残り、Echoのルートで行う認証・認可を回避されるおそれがある脆弱性（CVE-2026-118264）が、2026年10月23日にEchoから公表されました。修正版はv4の4.16.1とv5の5.4.1ですが、その後にProxyミドルウェアとクライアントのIPの扱いの修正が続いたため、上げる先はv4が4.16.3、v5が5.4.4です。11月1日時点で、Goの脆弱性データベースには未収録で、govulncheckでは検出されません。</p><h2>EchoのProxyミドルウェアで起きることと仕組み</h2><p>EchoのProxyミドルウェアは、利用者がWebSocketへの切り替え（アップグレード）を求めると、上流のサーバーが受け入れたかを確かめる前に、接続をそのまま中継する方式（生のトンネル）に切り替えていました。上流が通常のHTTP応答を返して接続を保ったままにすると、その接続で続けて送られるHTTPリクエストは、Echoのルーターやルートごとのミドルウェアを通らずに、同じ上流へ直接届きます。<a href="#source-1">[1]</a></p><p><mark>このため、Echoのルートだけで行っている認証・認可を回避されるおそれがあります。</mark>Echoは、任意のホストへ中継できるわけではなく、上流自身の認証を回避するものでもないと説明しています。修正版では、アップグレードをGoの標準のリバースプロキシで扱い、上流が正しく受け入れたときだけ中継に切り替えます。断られたアップグレードは通常のHTTPリクエストのままです。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>断られたアップグレードの接続が中継されたまま残り、</span><span>Echoのルートの認証を通らない</span></p><p>Echoのアドバイザリから、攻撃の入口と脆弱な処理を並べる。</p></div><div><div><b>利用者</b><span>WebSocketへのアップグレードを求める</span></div></div><div><span>↓</span><span>Proxyを置いた外部のルート</span></div><div><p><b>Echo</b>のProxyミドルウェア（v4 4.16.0以前、v5 5.4.0以前）</p><div><div><b>受け入れの確認の前に切り替える</b><span>上流が受け入れたかを確かめる前に、生のトンネルにする</span></div></div></div><div><span>↓</span><span>断っても接続を閉じない上流</span></div><div><div><b>上流のサーバー</b><span>続けて送られたHTTPリクエストが直接届く</span></div></div><div><span>↓</span><span>起きること</span></div><div><div><b>ルートの認証・認可を回避</b><span>Echoのルーターとルートごとのミドルウェアを通らない</span></div><div><b>及ばない範囲</b><span>任意のホストへの中継や、上流自身の認証の回避はできない</span></div></div><p>出典　Echo公式「GHSA-cxf3-9h37-7rr8」（2026-10-29更新）</p></div></div></figure><h2>Echoの脆弱性の影響を受ける条件</h2><p>Echoのアドバイザリは、悪用には次の3つがそろう必要があるとしています。Proxyミドルウェアを使っていないアプリは、この脆弱性の対象になりません。<a href="#source-1">[1]</a></p><ul><li>外部から届くルートに、Proxyミドルウェア（<code>middleware.Proxy</code>・<code>middleware.ProxyWithConfig</code>）を置いている</li><li>上流のサーバーが、アップグレードを断っても接続を閉じない</li><li>狙われる上流のリソースが独自の認可を持たず、Echoのルートでの確認に頼っている</li></ul><p>影響を受ける版について、Echoはv4・v5の全系列で生のトンネルの実装があったとし、v4.15.0・v4.16.0・v5.0.0・v5.4.0で再現を確かめ、v4.0.0のソースにも同じ確認の抜けがあると書いています。<a href="#source-1">[1]</a></p><h2>Echoの脆弱性の悪用の状況</h2><p>11月1日に確かめた時点で、米CISAの悪用が確認された脆弱性の一覧（KEV、10月30日版）には載っていません。CVEの記録に米CISAが付けた評価（SSVC、10月30日）も、悪用は「なし」です。<a href="#source-3">[3]</a><a href="#source-4">[4]</a></p><p>Echoのアドバイザリには再現を確かめた版の記載がありますが、攻撃のコード（PoC）は載っておらず、公開されたPoCも確認できませんでした。今後30日に悪用される見込みの推定（EPSS）は0.43%です（10月31日時点）。深刻度は、EchoとCVEの採番機関のGitHubの評価でCVSS 4.0の9.1（緊急）です。NVDは11月1日時点で分析中で、独自の値を付けていません。<a href="#source-1">[1]</a><a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><figure><div><div><div><p><span>公表から1週間で修正が続き、</span><span>11月1日時点で悪用もGoのデータベースへの収録も無い</span></p><p>アドバイザリ、CVEの記録、KEVなどから、日付のある出来事を並べる。</p></div><p><span></span>Echo　<span></span>GitHub・米CISAなど</p><div><div><span></span><p>2026年10月23日</p><div><div><b>アドバイザリを公表し、4.16.1・5.4.1を公開</b><span></span></div><div><b>9.1</b><span>CVSS 4.0（Echoの評価）</span></div></div></div><div><span></span><p>10月24日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>10月29日</p><div><div><b>CVE-2026-118264の記録を公開</b><span>同じ日にEchoがアドバイザリを更新</span></div></div></div><div><span></span><p>10月30日</p><div><div><b>4.16.3・5.4.4を公開</b><span>v4はIPのヘッダーを信頼してしまう2件も修正</span></div></div></div><div><span></span><p>10月30日</p><div><div><b>米CISAの評価（SSVC）は悪用「なし」</b><span>KEVの10月30日版にも載っていない</span></div></div></div><div><span></span><p>10月31日</p><div><div><b>EPSSの推定</b><span></span></div><div><b>0.43%</b><span>今後30日に悪用される見込み</span></div></div></div><div><span></span><p>11月1日</p><div><div><b>Goの脆弱性データベースに未収録</b><span>govulncheckでは検出されない</span></div></div></div></div><p>出典　Echo公式「GHSA-cxf3-9h37-7rr8」（2026-10-29更新）、CVE Program「CVE-2026-118264」（2026-10-29）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）、Go公式「Go Vulnerability Database」（2026-11-01確認）</p></div></div></figure><h2>Echoの対象の版と推奨する版</h2><p>今回の脆弱性は4.16.1と5.4.1で直ります（どちらも10月23日公開）。ただ、4.16.1の時点ではv4に、クライアントが送ったIPのヘッダーを信頼してしまう2件（CVE-2026-118651、CVE-2026-118653）が残っていました。この2件はEchoのv4.16.3のリリースノートで修正済みとされています（GitHub Advisory Databaseの修正版の欄は、11月1日時点で空欄です）。v5は5.4.3で別の問題（GHSA-v97q-3xf5-rj74）が直り、5.4.4でProxyの<code>X-Real-IP</code>の扱いがさらに直されています。<a href="#source-2">[2]</a><a href="#source-7">[7]</a><a href="#source-8">[8]</a><a href="#source-9">[9]</a></p><div><table><thead><tr><th>モジュール</th><th>影響を受ける版</th><th>今回の修正版</th><th>推奨する版</th><th>必要なGo</th></tr></thead><tbody><tr><td><code>github.com/labstack/echo/v4</code></td><td>4.0.0〜4.16.0</td><td>4.16.1</td><td><b>4.16.3</b>（10月30日公開）</td><td>1.26以上</td></tr><tr><td><code>github.com/labstack/echo/v5</code></td><td>5.0.0〜5.4.0</td><td>5.4.1</td><td><b>5.4.4</b>（10月30日公開）</td><td>1.25以上</td></tr></tbody></table></div><p>推奨する版は、Echoのアドバイザリ・リリースノートと、Goのモジュールのプロキシ（proxy.golang.org）で公開済みの版から出しました（11月1日確認）。更新の前に、Echoのリリースノートで変更点を確かめてください。<a href="#source-2">[2]</a><a href="#source-7">[7]</a><a href="#source-10">[10]</a></p><figure><div><div><div><p><span>この件は4.16.1・5.4.1で直るが、</span><span>上げる先は4.16.3・5.4.4</span></p><p>アドバイザリとリリースノートから、v4とv5を並べる。</p></div><div><div></div><div><b>v4</b><span>github.com/labstack/echo/v4</span></div><div><b>v5</b><span>github.com/labstack/echo/v5</span></div><div>影響を受ける版</div><div><span>4.0.0〜4.16.0</span></div><div><span>5.0.0〜5.4.0</span></div><div>この件の修正版</div><div><span>4.16.1（10月23日）</span></div><div><span>5.4.1（10月23日）</span></div><div>その後の修正</div><div><span>IPのヘッダーを信頼してしまう2件を4.16.3で修正</span></div><div><span>5.4.3でGHSA-v97q-3xf5-rj74、5.4.4でX-Real-IPの扱いを修正</span></div><div>推奨する版</div><div><span>4.16.3（10月30日公開）</span></div><div><span>5.4.4（10月30日公開）</span></div><div>必要なGo</div><div><span>1.26以上</span></div><div><span>1.25以上</span></div><div>IPExtractor</div><div><span>設定しないとRealIP()が接続元のアドレスを返す。プロキシの裏なら先に設定</span></div><div><span>移行は要らない</span></div></div><p>出典　Echo公式「GHSA-cxf3-9h37-7rr8」（2026-10-29更新）、Echo公式「v4.16.3のリリースノート」（2026-10-30）、Echo公式「v5.4.3・v5.4.4のリリースノート」（2026-10-30）</p></div></div></figure><h2>Echoの版を確かめて上げる手順</h2><ol><li><p>間接的な依存も含めて、v4・v5のどちらが何の版で入っているかを確認します。</p><div><div><span>ターミナル</span></div><pre><code>go list -m all | grep labstack/echo</code></pre></div></li><li><p>Proxyミドルウェアを使っている箇所を探します。見つからなければ、この脆弱性の対象ではありません（他の修正のために上げることは勧めます）。</p><div><div><span>ターミナル</span></div><pre><code>grep -rn 'middleware.Proxy' --include='*.go' .</code></pre></div></li><li><p>v4を4.16.3に上げる場合は、Goの版が1.26以上かを確かめます。プロキシの裏で動かしているなら、先にIPExtractorを設定します。</p><div><div><span>ターミナル</span></div><pre><code>go version
grep -rn 'IPExtractor' --include='*.go' .</code></pre></div></li><li><p>推奨する版へ上げ、go.mod・go.sumを整えます（使っている系列の行を実行します）。</p><div><div><span>ターミナル</span></div><pre><code>go get github.com/labstack/echo/v4@v4.16.3
go get github.com/labstack/echo/v5@v5.4.4
go mod tidy</code></pre></div></li><li><p>テストを通したあと、組み上がったバイナリに記録された版を確かめます。コンテナイメージの中のバイナリでも同じ確認をします。</p><div><div><span>ターミナル</span></div><pre><code>go list -m github.com/labstack/echo/v4 github.com/labstack/echo/v5
go version -m ./app | grep labstack/echo</code></pre></div></li></ol><h2>すぐ上げられないときの回避策</h2><p>Echoのアドバイザリが挙げる回避策は次の2つです。<a href="#source-1">[1]</a></p><ul><li>影響するProxyのルートに届く前に、WebSocketのアップグレード要求を拒否する</li><li>上流の各リソースで、Echoとは別に認可を行う</li></ul><p><mark>上流から101以外の応答を返すようにするだけでは、問題の中継は防げないと書かれています。</mark>WebSocketを使っていないProxyのルートなら、前段のロードバランサーやEchoの手前のミドルウェアで<code>Upgrade</code>ヘッダー付きの要求を断る形が、1つめの回避策に当たります。<a href="#source-1">[1]</a></p><h2>4.16.3に上げる前のIPExtractorの設定</h2><p>4.16.3では、<code>Echo#IPExtractor</code>を設定していない場合、<code>Context.RealIP()</code>が<code>X-Forwarded-For</code>・<code>X-Real-IP</code>を使わず、接続元のアドレスを返すように変わりました。Proxyミドルウェアが上流へ送る<code>X-Real-IP</code>も、この値で置き換えます。<a href="#source-7">[7]</a><a href="#source-10">[10]</a></p><p><mark>ロードバランサーなどの裏で動かしているアプリは、設定しないまま上げると、利用者全員がプロキシのアドレスに見えます。</mark>回数制限、IPによるアクセス制限、ログに影響するため、Echoは上げる前に、自社のプロキシだけを信頼するIPExtractor（<code>ExtractIPFromXFFHeader</code>か<code>ExtractIPFromRealIPHeader</code>に<code>TrustIPRange</code>を指定）を設定するよう求めています。プロキシを置かない場合は<code>ExtractIPDirect()</code>を使います。v5は5.4.4でもこの移行は要りません。<a href="#source-7">[7]</a><a href="#source-9">[9]</a><a href="#source-10">[10]</a></p><h2>govulncheckで出ない間の確かめ方</h2><p>Goの脆弱性データベース（vuln.go.dev）には、11月1日時点でEchoのv4が3件（GO-2021-0051・GO-2022-1031・GO-2026-6293）、v5が2件（GO-2026-4502・GO-2026-6293）しか載っておらず、今回のCVE-2026-118264や同じ時期のEchoのアドバイザリは収録されていません。<mark>govulncheckやそれを使うCIの検査で何も出なくても、対象外とは判断できません。</mark><a href="#source-11">[11]</a></p><p>当面は、<code>go list -m</code>や、組み上がったバイナリに記録されたモジュールの版で、v4・v5の版を直接確かめます。Echo v4は、最新版に対して不具合の修正を2026年12月31日まで、セキュリティの修正を2027年12月31日まで行うとしています。新しく作るものにはv5を勧めています。<a href="#source-10">[10]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Goの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Go</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Brotliの脆弱性の確認方法、PythonとNode.jsで対象かを確かめて直す（CVE-2026-111497、コード実行のおそれ）</title><link>https://humanhacker.ai/media/vuln-radar/brotli-decoder/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/brotli-decoder/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>圧縮形式Brotliの展開処理の脆弱性CVE-2026-111497（HTTP2Shell）は、米CISAが悪用を確認しています。Pythonのbrotli・brotlicffi、Node.jsの同梱版などで、自分の版と構成が対象かを確かめる方法と修正版を、言語ごとに説明します。</description><content:encoded><![CDATA[<p>Googleの圧縮形式Brotliで、圧縮データを展開する処理がメモリの範囲外に書き込む脆弱性CVE-2026-111497が、2026年10月22日（日本時間）にGoogleから修正版とともに公表されました。HTTP2Shellとも呼ばれます。Pythonのパッケージ、Node.jsの実行環境、.NETなど、Brotliを組み込んだ言語の環境が対象です。直し方は言語ごとに違い、Node.jsでは表示されるBrotliの番号が修正後も変わりません。</p><h2>Brotliの脆弱性CVE-2026-111497で起きることと深刻度</h2><p>CVEの記録（採番機関はGoogle）によると、展開処理（<code>c/dec/decode.c</code>）の不備で、認証のない遠隔の攻撃者が細工した圧縮データを送ると、展開の状態を持つメモリの破壊、メモリ内容の漏えい、サービス停止、場合によっては任意のコード実行につながるおそれがあります。対象は1.0.3〜1.2.0で、修正版は1.0.10・1.1.1・1.2.1です。Googleは日本時間の10月22日早朝にこの3つを公開しました。<a href="#source-1">[1]</a><a href="#source-4">[4]</a></p><p>深刻度は、Googleの評価でCVSS 4.0の9.2、NVDの評価でCVSS 3.1の9.8です。米CISAは10月27日（米国時間）、この脆弱性を「Google Brotli」としてKEVに追加しました。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-3">[3]</a></p><figure><div><div><div><p><span>細工した圧縮データを展開すると、</span><span>Brotliを組み込んだ各言語の環境でメモリの破壊などが起きるおそれ</span></p><p>CVEの記録と各言語の告知から、攻撃の入口と脆弱な部品を並べる。</p></div><div><div><b>細工した圧縮データ</b><span>認証のない遠隔の攻撃者が送る</span></div></div><div><span>↓</span><span>展開するとき</span></div><div><p><b>Brotli</b> 1.0.3〜1.2.0の展開処理</p><div><div><b>Python</b><span>brotli・brotlicffi</span></div><div><b>Node.js</b><span>実行環境に同梱（node:zlib）</span></div><div><b>.NET</b><span>実行環境に同梱</span></div><div><b>Go</b><span>移植版andybalholm/brotli</span></div></div></div><div><span>↓</span><span>展開処理の不備</span></div><div><div><b>起きること</b><span>メモリの破壊、メモリ内容の漏えい、サービス停止、場合によっては任意のコード実行</span></div></div><div><span>↓</span><span>気づかないうちに展開している経路</span></div><div><div><b>urllib3</b><span>brotliかbrotlicffiが入っていると応答を展開する。requestsなども同じ</span></div><div><b>Node.jsのfetch()</b><span>Brotliで圧縮された応答をnode:zlibで展開する</span></div><div><b>body-parser 2</b><span>Express 5で、圧縮された要求の本文を初期設定で展開する</span></div></div><p>出典　CVEの記録「CVE-2026-111497」（2026-10-22）、NVD「CVE-2026-111497」（2026-10-30更新）、Node.js公式「October 2026 Security Releases」（2026-10-21）</p></div></div></figure><h2>Brotliの脆弱性の影響を受ける条件</h2><p><mark>問題が起きるのは圧縮データを展開するときで、圧縮するだけの使い方は対象の記載がありません。</mark><a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-5">[5]</a><a href="#source-8">[8]</a><a href="#source-13">[13]</a></p><p>直接入れた覚えがなくても、他のパッケージの依存で入っていることがあります。たとえばurllib3は、brotliかbrotlicffiが入っていると、Brotliで圧縮された応答を展開します。requestsなどurllib3を使うライブラリも同じ経路を通ります。<a href="#source-11">[11]</a></p><p>外部のデータを展開する経路は、アプリが直接呼ぶ場合に限りません。Node.js組み込みの<code>fetch()</code>はBrotliで圧縮された応答を<code>node:zlib</code>で展開し、Express 5が使うbody-parser 2は、Brotliで圧縮された要求の本文を初期設定で展開します。<a href="#source-12">[12]</a><a href="#source-17">[17]</a></p><h2>悪用の状況</h2><p>米国のCISAは2026年10月27日、CVE-2026-111497を「悪用が確認された脆弱性の一覧（KEV）」に追加しました。実際の攻撃で使われていることを示すため、優先して対応します。</p><p>CVEの記録に参考として載るセキュリティ会社ELLIOによると、PoCは公開されていて、ELLIOはそれを写した攻撃の通信を10月26日（協定世界時）に観測しました。当社はPoCを検証していません。今後30日に悪用される見込みの推定（EPSS）は82.6%です（10月31日時点）。<a href="#source-15">[15]</a><a href="#source-16">[16]</a></p><figure><div><div><div><p><span>Googleの修正版の公開から5日でKEVに載り、</span><span>PoCを写した攻撃の通信も観測された</span></p><p>各社の告知、KEV、第三者の調査から、日付のある出来事を並べる。</p></div><p><span></span>Google・Node.jsなど提供元　<span></span>米CISA・第三者</p><div><div><span></span><p>2026年10月21日</p><div><div><b>Node.jsが22.23.4・24.22.1・26.12.1を公開</b><span>Brotliの修正を個別に取り込んだ</span></div></div></div><div><span></span><p>10月22日</p><div><div><b>GoogleがBrotli 1.0.10・1.1.1・1.2.1を公開</b><span>CVE-2026-111497の記録も同じ日に出た。PyPIのbrotli 1.2.1も同じ日</span></div><div><b>9.2</b><span>CVSS 4.0（Googleの評価）</span></div></div></div><div><span></span><p>10月26日</p><div><div><b>ELLIOがPoCを写した攻撃の通信を観測</b><span>協定世界時。公開されたPoCを写したもの</span></div></div></div><div><span></span><p>10月27日</p><div><div><b>米CISAが「Google Brotli」としてKEVに追加</b><span>米国時間</span></div></div></div><div><span></span><p>10月31日</p><div><div><b>EPSSの推定</b><span></span></div><div><b>82.6%</b><span>今後30日に悪用される見込み</span></div></div></div><div><span></span><p>11月10日</p><div><div><b>KEVの対応期限</b><span></span></div></div></div></div><p>出典　CVEの記録「CVE-2026-111497」（2026-10-22）、Node.js公式「October 2026 Security Releases」（2026-10-21）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-27）、ELLIO「Node2Shell（CVE-2026-111497）」（2026-10-26更新）</p></div></div></figure><h2>攻撃を受けていないかの確認</h2><p>悪用が確認された脆弱性は、更新に加えて、更新前に攻撃を受けていないかを確認します。</p><ol><li>公開していた期間のWebサーバー・アプリケーションのログで、異常終了や不審な要求がないか確認します。</li><li>見覚えのないファイル（Webシェルなど）や、設定・アカウントの変更がないか確認します。</li><li>サーバーから見覚えのない宛先への通信がないか確認します。</li><li>痕跡が見つかった場合は、ログや機器の状態を保全し、専門の窓口に相談します。</li></ol><h2>Brotliの対象の版と推奨する版</h2><p>言語ごとに、Brotliがどの形で入っているかと、修正版が次のとおり違います。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-5">[5]</a><a href="#source-8">[8]</a><a href="#source-13">[13]</a></p><div><table><thead><tr><th>言語・環境</th><th>Brotliの入り方</th><th>修正版</th></tr></thead><tbody><tr><td>Python（brotli）</td><td>C言語のBrotliを組み込んだパッケージ</td><td>1.2.1</td></tr><tr><td>Python（brotlicffi）</td><td>同上（CFFI経由）</td><td>1.2.1.0</td></tr><tr><td>Node.js</td><td>実行環境に同梱（<code>node:zlib</code>）</td><td>22.23.4・24.22.1・26.12.1</td></tr><tr><td>.NET</td><td>実行環境に同梱</td><td>8.0.33・9.0.22・10.0.14</td></tr><tr><td>Go（andybalholm/brotli）</td><td>Go言語への移植</td><td>1.2.7（NVDの記載）</td></tr></tbody></table></div><figure><div><div><div><p><span>Brotliの入り方が言語ごとに違い、</span><span>上げるものと修正版も違う</span></p><p>CVEの記録と各言語の告知から、言語・環境ごとに並べる。</p></div><div><div></div><div><b>Brotliの入り方</b></div><div><b>修正版</b></div><div>Python（brotli）</div><div><span>C言語のBrotliを組み込んだパッケージ</span></div><div><span>1.2.1</span></div><div>Python（brotlicffi）</div><div><span>同上（CFFI経由）</span></div><div><span>1.2.1.0</span></div><div>Node.js</div><div><span>実行環境に同梱（node:zlib）</span></div><div><span>22.23.4・24.22.1・26.12.1</span></div><div>.NET</div><div><span>実行環境に同梱</span></div><div><span>8.0.33・9.0.22・10.0.14</span></div><div>Go（andybalholm/brotli）</div><div><span>Go言語への移植</span></div><div><span>1.2.7（NVDの記載）</span></div></div><div><b>だから</b>　Node.jsはprocess.versions.brotliの番号が修正後も変わらないので、本体の版で判断する。</div><p>出典　CVEの記録「CVE-2026-111497」（2026-10-22）、Node.js公式「October 2026 Security Releases」（2026-10-21）、GitHub Advisory Database「GHSA-9v8h-qqgm-4m35」（2026-10-23）、Microsoft「.NET Brotli Decoder Out-of-bounds Write Vulnerability」（2026-10-26）</p></div></div></figure><h2>PythonとNode.jsでBrotliを確認・更新する手順</h2><ol><li><p>Pythonで、brotliとbrotlicffiの版を確かめます。表示の「Required-by」に、そのパッケージを必要としている別のパッケージが出ます。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip show brotli brotlicffi</code></pre></div></li><li><p>ロックファイルに古い版が固定されていないかも確かめます。</p><div><div><span>ターミナル</span></div><pre><code>grep -i -n &quot;brotli&quot; requirements*.txt poetry.lock uv.lock</code></pre></div></li><li><p>brotliは1.2.1以上、brotlicffiは1.2.1.0以上に上げます。ロックファイルを使っている場合は、ロックファイルも更新します。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip install --upgrade &quot;brotli&gt;=1.2.1&quot; &quot;brotlicffi&gt;=1.2.1.0&quot;</code></pre></div></li><li><p>Node.jsは本体の版を確かめます。22系は22.23.4、24系は24.22.1、26系は26.12.1以上なら修正済みです。<code>process.versions.brotli</code>の表示では判断しません。</p><div><div><span>ターミナル</span></div><pre><code>node -v</code></pre></div></li><li><p>OSのパッケージでBrotliを入れている場合（Debian・Ubuntuの例）は、パッケージの版を配布元の告知と照らし合わせます。</p><div><div><span>ターミナル</span></div><pre><code>dpkg -l 'libbrotli*' 'python3-brotli*'</code></pre></div></li><li><p>更新後は、アプリやコンテナのイメージを作り直して再起動し、動いている環境の中でもう一度版を確かめます。</p><div><div><span>ターミナル</span></div><pre><code>docker exec &lt;コンテナ名&gt; node -v
docker exec &lt;コンテナ名&gt; python -m pip show brotli brotlicffi</code></pre></div></li></ol><h2>すぐ上げられないとき</h2><p>回避策を示しているのは、確認した一次情報では.NETだけです。Microsoftは、ASP.NET CoreとHttpClientは初期設定ではBrotliを自動で展開しないと説明し、更新まで信頼できないBrotliデータを展開しないこと、使っている場合は展開の設定から<code>br</code>を外すことを示しています。<a href="#source-13">[13]</a></p><p>Python・Node.js・Googleの告知には回避策がありません。条件から見ると、外部から受け取ったBrotliデータを展開しなければ影響の経路から外れます。body-parserには圧縮された本文を拒否する<code>inflate: false</code>の設定がありますが、これは当社の整理で、提供元がこの脆弱性の回避策として示したものではありません。<a href="#source-12">[12]</a></p><h2>Pythonのbrotli・brotlicffiの確かめ方と修正版</h2><p>GitHub Advisoryは、PyPIの<code>brotli</code>（1.0.3以上1.2.1未満）と<code>brotlicffi</code>（1.0.3以上1.2.1.0未満）を対象としています。<mark>PyPIのbrotliには1.1.1や1.0.10が無く、修正版は1.2.1だけです。</mark>1.2.1は10月22日（日本時間）にPyPIへ公開されました。<a href="#source-8">[8]</a><a href="#source-9">[9]</a></p><p>brotlicffi 1.2.1.0では、圧縮データの後ろに余分なバイトがあると例外を出すように変わりました。これまで通っていた入力が失敗する場合があるので、更新後に動作を確かめます。<a href="#source-10">[10]</a></p><p>OSのパッケージ（Debianのpython3-brotliなど）で入れた場合は、OSのBrotliが更新対象です。DebianはBrotliの修正を元の番号のまま取り込み、bookwormでは1.0.9-2+deb12u1、trixieでは1.1.0-2+deb13u1が修正済みです。番号の頭だけで判断せず、配布元の告知の版と照らし合わせます。<a href="#source-14">[14]</a></p><h2>Node.jsは本体の版で判断する</h2><p>Node.jsは10月21日（日本時間）に22.23.4・24.22.1・26.12.1を公開しました。公式の告知は、<code>node:zlib</code>で外部のBrotliデータを展開するアプリで、異常終了、メモリの漏えい、遠隔からのコード実行につながるおそれがあるとしています。重要度はNode.jsの評価で「High」です。<a href="#source-5">[5]</a></p><p>Node.jsはGoogleの修正だけを取り込んでいて、同梱のBrotliの番号は変えていません。<mark>修正版でも<code>process.versions.brotli</code>は22系で1.1.0、24系・26系で1.2.0と表示されます。</mark>判断にはNode.js本体の版を使います。<a href="#source-6">[6]</a><a href="#source-7">[7]</a></p><p>20系などサポートが終わった系列について、告知は「サポートが終わった版は常に影響を受ける」としていて、修正版はありません。22・24・26のいずれかへ移ります。公式の告知に回避策の記載はありません。<a href="#source-5">[5]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Pythonの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Python</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Ruby向けCSSパーサーCrassに脆弱性、Sanitize・Loofah・rails-html-sanitizerのCSSの無害化を迂回されるおそれ。Loofahを上げても残る理由と確かめ方</title><link>https://humanhacker.ai/media/vuln-radar/crass-css/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/crass-css/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>CrassのCVE-2026-116695は、不正なURLの読み取りの誤りにより、Crassを使うCSSのサニタイザーが削除するはずのCSSを通すおそれがあります。Railsアプリに入る経路、Loofah・rails-html-sanitizerを上げてもCrassが上がらない理由、1.0.8への上げ方を説明します。</description><content:encoded><![CDATA[<p>Ruby向けのCSSパーサーCrassで、不正なURLの読み取りの誤りにより、Crassを使うCSSのサニタイザーが削除するはずの宣言やルールを通すおそれがある脆弱性（CVE-2026-116695）が、2026年10月22日にCrassの作者から公表されました。修正版は1.0.8です。CrassはLoofahを通じてRailsのrails-html-sanitizerの下に入りますが、Loofahの最新版でも古いCrassが残ることがあるため、Crassの版を直接確かめます。</p><h2>Crassの脆弱性で起きることと仕組み</h2><p>CSSの中の不正なURLは、ブラウザが従う仕様（CSS Syntax Level 3）では、次の「)」で終わります。Crassは、エスケープしたバックスラッシュ（<code>\\</code>）の後の「)」を終わりと認めず、その先の「)」か入力の終わりまでを不正なURLの一部として読んでいました。<a href="#source-1">[1]</a></p><p><mark>ブラウザにとっては有効なCSSの部分を、Crassは不正なURLの中身として扱うため、CSSを検査して出力し直すサニタイザーがその部分を素通りさせます。</mark>Crassの作者は、サニタイザーが削除するはずの宣言、スタイルのルール、<code>@import</code>などを通されるおそれがあり、画面に偽の要素を重ねる攻撃（クリックジャッキングやフィッシング）、外部の資源の読み込み、CSSを使った情報の持ち出しに使われうると説明しています。最近のブラウザでスクリプトが実行されることはないとしています。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>Crassが読み違えたCSSを、</span><span>サニタイザーが素通りさせる</span></p></div><div><div><span>攻撃の入口</span><b>外部から受け取ったCSS</b><span>style属性や&lt;style&gt;要素に、エスケープしたバックスラッシュ（\\）の後の「)」を含める</span></div></div><div><span>↓</span><span>CSSを検査して出力し直す</span></div><div><p>Crassを使うサニタイザー</p><div><div><b><b>Crass</b> 1.0.7以下</b><span>\\の後の「)」を不正なURLの終わりと認めず、その先までを不正なURLとして読む</span></div><div><b>Sanitize・Loofah・rails-html-sanitizer</b><span>不正なURLの中身として扱われた部分を、削除せずに出力する</span></div></div></div><div><span>↓</span><span>ブラウザは有効なCSSとして読む</span></div><div><div><b>削除するはずの宣言・ルールが残る</b><span>スタイルのルールや@importなどが通る</span></div></div><div><span>↓</span><span>起きうること</span></div><div><div><b>偽の要素の重ね表示</b><span>クリックジャッキングやフィッシング</span></div><div><b>外部の資源の読み込み</b></div><div><b>CSSを使った情報の持ち出し</b></div></div><p>出典　Crass「GHSA-pq4g-8rxf-4g29」（2026-10-22公表、10-28更新）</p></div></div></figure><h2>Crassの脆弱性の影響を受ける条件</h2><p>Crassの作者は、Crass単体では読み取りを誤るだけで、影響はCrassで判断してCSSを出力し直すサニタイザーに出るとしています。Chromiumで確かめた例として、次の使い方を挙げています。<a href="#source-1">[1]</a></p><ul><li>Sanitize 7.0.0以下：<code>Sanitize::CSS.properties</code>と<code>style</code>属性、<code>Sanitize::CSS.stylesheet</code>と<code>&lt;style&gt;</code>要素</li><li>Loofah：<code>Loofah::HTML5::Scrub.scrub_css</code>（<code>style</code>属性の無害化）</li><li>rails-html-sanitizer：<code>sanitize_css</code>と、<code>style</code>を許可した<code>sanitize</code></li></ul><p>悪用には、サニタイザーが不正なURLを含むCSSを拒否していないことが必要です。Railsの<code>sanitize</code>の初期設定で許可される属性には<code>style</code>が入っていないため、<code>attributes:</code>や<code>allowed_attributes</code>で<code>style</code>を足しているかが、Railsアプリで見る点になります。<a href="#source-1">[1]</a><a href="#source-7">[7]</a></p><h2>Crassの脆弱性の悪用の状況</h2><p>11月1日に確かめた時点で、米CISAの悪用が確認された脆弱性の一覧（KEV、10月30日版）には載っていません。<a href="#source-2">[2]</a></p><p>Crassの作者のアドバイザリは、問題を起こす文字の並び（<code>\\</code>の後の「)」）と、Chromiumで確かめたサニタイザーの例を書いていますが、攻撃のコード（PoC）は載っていません。公開されたPoCも確認できませんでした。今後30日に悪用される見込みの推定（EPSS）は0.35%です（10月31日時点）。深刻度は、Crassの作者とCVEの採番機関のGitHubの評価でCVSS 4.0の5.3（警告）です。NVDは評価を保留（Deferred）にしています。<a href="#source-1">[1]</a><a href="#source-3">[3]</a><a href="#source-4">[4]</a></p><figure><div><div><div><p><span>10月22日に1.0.8で修正、</span><span>11月1日時点でKEVには載っていない</span></p></div><div><div><span></span><p>2026年6月26日</p><div><div><b>Crass 1.0.7を公開</b><span>サービス停止の4件（CVE-2026-61845〜61848）を修正</span></div></div></div><div><span></span><p>10月22日</p><div><div><b>Crassの作者が公表し、1.0.8で修正</b><span>同じ日にSanitize 7.0.1も別の迂回を直した</span></div><div><b>5.3</b><span>CVSS 4.0（Crassの作者）</span></div></div></div><div><span></span><p>10月28日</p><div><div><b>NVDに登録</b><span>NVDは評価を保留（Deferred）にしている</span></div></div></div><div><span></span><p>11月1日</p><div><div><b>KEVには載っていない</b><span>10月30日版の一覧で確認。公開されたPoCも確認できなかった</span></div><div><b>0.35%</b><span>EPSS（10月31日）</span></div></div></div></div><p>出典　Crass「GHSA-pq4g-8rxf-4g29」（2026-10-22公表、10-28更新）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）、FIRST「EPSS（CVE-2026-116695）」（2026-10-31）、NVD「CVE-2026-116695」（2026-10-28登録）</p></div></div></figure><h2>Crassの対象の版と推奨する版</h2><p>Crassは1系だけで、1.0.7以下のすべての版が対象です。1.0.8（10月22日公開）で直っています。Crassでは、6月26日公開の1.0.7で直ったサービス停止の4件（CVE-2026-61845〜61848）も公表されていて、1.0.8に上げれば合わせて直ります。<a href="#source-1">[1]</a><a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><div><table><thead><tr><th>gem</th><th>影響を受ける版</th><th>推奨する版</th><th>補足</th></tr></thead><tbody><tr><td><code>crass</code></td><td>1.0.7以下</td><td><b>1.0.8</b></td><td>最新版。Rubyの要件は1.9.2以上</td></tr><tr><td><code>sanitize</code></td><td>7.0.0以下（別件）</td><td><b>7.0.1</b></td><td>Crass 1.0.8以上を必須にした版</td></tr><tr><td><code>loofah</code></td><td>―</td><td>2.25.2（最新）</td><td>Crassへの指定は1.0.2以上のまま</td></tr></tbody></table></div><p>推奨する版は、Crass・Sanitizeのアドバイザリと、RubyGems.orgで公開済みの版から出しました（11月1日確認）。更新の前に、各gemのリリースノートで変更点を確かめてください。<a href="#source-1">[1]</a><a href="#source-5">[5]</a><a href="#source-8">[8]</a></p><figure><div><div><div><p><span>Loofahを上げてもCrassは上がらず、</span><span>Crassを直接上げる</span></p></div><div><div><b>crass</b><span>今回の脆弱性</span><div><span>影響を受ける版</span><span>1.0.7以下（すべての公開版）</span></div><div><span>推奨する版</span><b>1.0.8</b></div><div><span>Crassの版への影響</span><span>1.0.7で直ったサービス停止の4件も合わせて直る</span></div></div><div><b>sanitize</b><span>別件の迂回</span><div><span>影響を受ける版</span><span>7.0.0以下</span></div><div><span>推奨する版</span><b>7.0.1</b></div><div><span>Crassの版への影響</span><span>Crass 1.0.8以上を必須にしたので、上げればCrassも上がる</span></div></div><div><b>loofah</b><span>Railsに入る経路</span><div><span>影響を受ける版</span><span>―</span></div><div><span>推奨する版</span><b>2.25.2（最新）</b></div><div><span>Crassの版への影響</span><span>Crassへの指定は1.0.2以上のままで、1.0.7以下も許す</span></div></div></div><div><b>だから</b>　bundle update railsやloofahだけで済ませず、bundle update --conservative crassでCrassを上げる。</div><p>出典　Crass「GHSA-pq4g-8rxf-4g29」（2026-10-22公表、10-28更新）、Sanitize「v7.0.1」（2026-10-22）、RubyGems.org「crass・sanitize・loofah・rails-html-sanitizer」（2026-11-01確認）</p></div></div></figure><h2>Crassの版を確かめて上げる手順</h2><ol><li><p>Crassの版と、どのgemを通じて入っているかを確認します。</p><div><div><span>ターミナル</span></div><pre><code>bundle info crass
grep -n 'crass' Gemfile.lock</code></pre></div></li><li><p>CSSを無害化している箇所を探します。<code>style</code>属性を許可した<code>sanitize</code>や、<code>sanitize_css</code>・<code>Sanitize::CSS</code>があるかを見ます。</p><div><div><span>ターミナル</span></div><pre><code>grep -rnE 'sanitize_css|scrub_css|Sanitize::CSS|allowed_attributes|attributes:.*style' app lib config</code></pre></div></li><li><p>Crassだけを上げます。Sanitizeを使っている場合は、Sanitizeも一緒に上げます（使っている行を実行します）。</p><div><div><span>ターミナル</span></div><pre><code>bundle update --conservative crass
bundle update --conservative sanitize crass</code></pre></div></li><li><p>Gemfile.lockと、実際に読み込まれる版を確かめます。</p><div><div><span>ターミナル</span></div><pre><code>bundle info crass
bundle exec ruby -e 'require &quot;crass&quot;; puts Crass::VERSION'</code></pre></div></li><li><p>bundler-auditを使っている場合は、データベースを更新してから検査します。</p><div><div><span>ターミナル</span></div><pre><code>bundle exec bundle-audit check --update</code></pre></div></li></ol><h2>すぐ上げられないときの回避策</h2><p>Crassの作者は、更新以外に実用的な回避策はないとしています。そのうえで、次の方法は既知のきっかけを防げますが、正当なCSSまで拒否するおそれがあると書いています。<a href="#source-1">[1]</a></p><ul><li><code>\\</code>（エスケープしたバックスラッシュ）を含むCSSの入力を拒否する</li></ul><h2>Railsに入る経路と、Loofahを上げても残る理由</h2><p>Railsのビューの<code>sanitize</code>はrails-html-sanitizerを使い、rails-html-sanitizerはLoofahを、LoofahはCrassを使います。そのため、多くのRailsアプリのGemfile.lockにはCrassが入っています。<a href="#source-7">[7]</a><a href="#source-8">[8]</a></p><p><mark>Loofahは11月1日時点の最新版2.25.2でも、Crassに「1.0.2以上・1.1未満」を求めるだけで、1.0.7以下も許します。</mark>rails-html-sanitizerの最新版1.7.1が求めるのもLoofah 2.25.2以上で、Crassの版には触れていません。<code>bundle update rails</code>や<code>bundle update loofah</code>だけでは、Crassが1.0.7以下のまま残ることがあります。Sanitizeを使っている場合は、7.0.1がCrass 1.0.8以上を必須にしているので、Sanitizeを上げればCrassも上がります。<a href="#source-8">[8]</a></p><h2>Sanitizeは7.0.1で別の迂回も直っている</h2><p>Sanitizeの作者は、Crass 1.0.8と同じ10月22日に、Sanitize 7.0.1を公開しました。7.0.1は、CSSの入れ子（CSS nesting）を使って許可していないプロパティやURLを通される別の問題（GHSA-wgw9-qhqg-8hv5、Sanitizeの評価でCVSS 4.0の5.3）を直しています。<mark>この問題はCrassを上げても直らないため、Sanitizeを使っている場合はSanitize自体も7.0.1に上げます。</mark>11月1日時点で、この件はSanitizeのリポジトリでだけ公表され、CVEは付いていません。<a href="#source-5">[5]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Rubyの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Ruby</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Vite 6.4.4の脆弱性の確認方法、開発サーバーから.envを読み取られるおそれと6.4.5への更新（CVE-2026-118662）</title><link>https://humanhacker.ai/media/vuln-radar/vite-file-access/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/vite-file-access/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>Vite 6.4.4の脆弱性CVE-2026-118662は、ネットワークに公開した開発サーバーで、拒否したはずの.envなどを返すおそれがあります。10月6日の更新で6.4.4にした環境が対象になった理由、初期設定で条件がそろう点、Astro 5など間接の依存の確かめ方、6.4.5への上げ方を説明します。</description><content:encoded><![CDATA[<p>フロントエンドの開発ツールViteの6.4.4で、開発サーバーが拒否するはずの.envなどを返してしまう脆弱性CVE-2026-118662が、2026年10月21日（日本時間）にViteから公表され、同じ日に6.4.5で直りました。6.4.4は10月6日に別の脆弱性の修正として出た版で、その告知に応じて上げた環境が対象になりました。急ぐかどうかは、開発サーバーをネットワークに公開しているかで決まります。</p><h2>Vite 6.4.4の脆弱性で起きること</h2><p>Viteの開発サーバーは、<code>server.fs.deny</code>に一致するファイルを返さないようにしています。公式アドバイザリによると、6.4.4では要求に<code>?raw</code>、<code>?import&amp;raw</code>、<code>?import&amp;url&amp;inline</code>などのクエリを付けると、この設定で拒否した.envや<code>*.crt</code>などが正常な応答（HTTP 200）で返ります。<a href="#source-1">[1]</a></p><p><mark>.envには鍵やパスワードを置くことが多く、条件がそろうと認証なしで中身を読まれるおそれがあります。</mark>深刻度は、Viteの評価（CVEの採番機関のGitHubも同じ値）でCVSS 4.0の6.9（警告）です。NVDは独自の評価をまだ付けていません。GitHub Advisory Databaseへの収録は10月30日（日本時間）で、提供元の公表より後です。<a href="#source-1">[1]</a><a href="#source-3">[3]</a><a href="#source-12">[12]</a></p><figure><div><div><div><p><span>クエリを付けた要求で、</span><span>拒否したはずの.envが返る</span></p></div><div><div><span>攻撃の入口</span><b>クエリを付けた要求</b><span>?raw、?import&amp;raw、?import&amp;url&amp;inlineなどを付けて送る</span></div></div><div><span>↓</span><span>ネットワークに公開した開発サーバーへ</span></div><div><p>Viteの開発サーバー</p><div><div><b><b>Vite</b> 6.4.4</b><span>クエリを付けた要求で、server.fs.denyの拒否が効かない</span></div><div><b>server.fs.deny</b><span>初期値で.env、.env.*、*.{crt,pem}、**/.git/**を拒否する</span></div></div></div><div><span>↓</span><span>HTTP 200で返る</span></div><div><div><b>.envや*.crtの中身</b><span>置いてある鍵やパスワードを、認証なしで読まれるおそれ</span></div></div><p>出典　Vite「GHSA-8g5g-mxqh-grgj」（2026-10-21）、Vite「Server Options（v6.4.5）」（2026-11-01確認）</p></div></div></figure><h2>Viteの開発サーバーが対象になる条件</h2><p>公式アドバイザリは、次の3つの条件がすべてそろうアプリだけが影響を受けるとしています。表の初期値は、Vite公式の設定文書の記載です。<a href="#source-1">[1]</a><a href="#source-2">[2]</a></p><div><table><thead><tr><th>公式が示す条件</th><th>初期値</th><th>確かめる所</th></tr></thead><tbody><tr><td>開発サーバーをネットワークに公開している</td><td><code>server.host</code>は<code>'localhost'</code>（公開しない）</td><td>起動スクリプトの<code>--host</code>、設定の<code>server.host</code></td></tr><tr><td>機密のファイルが<code>server.fs.allow</code>の中にある</td><td>ワークスペースのルート（無ければプロジェクトのルート）</td><td>.envや証明書の置き場所</td></tr><tr><td>そのファイルが<code>server.fs.deny</code>のパターンに一致する</td><td><code>.env</code>、<code>.env.*</code>、<code>*.{crt,pem}</code>、<code>**/.git/**</code></td><td>独自に足した拒否のパターン</td></tr></tbody></table></div><p><mark>初期値のままなら、プロジェクトのルートにある.envは2つ目と3つ目の条件に当てはまります。</mark>分かれ目は1つ目の公開の有無です（公式文書の初期値から見た当社の整理）。コンテナの中の開発サーバーに外から接続する構成では、<code>--host</code>を付けて公開していることがあります。アドバイザリの条件は開発サーバーについてのもので、<code>vite preview</code>やビルドした成果物の記載はありません。<a href="#source-1">[1]</a><a href="#source-2">[2]</a></p><h2>Viteのこの脆弱性の悪用の状況</h2><p>米CISAの「悪用が確認された脆弱性の一覧（KEV）」には、11月1日の確認時点（10月30日版）で載っていません。今後30日に悪用される見込みの推定（EPSS）は0.3%です（10月31日時点）。<a href="#source-7">[7]</a><a href="#source-13">[13]</a></p><p>アドバイザリには問題を起こすクエリが書かれていて、再現に必要な情報は公開されています。開発サーバーを公開した場合に<code>?raw?import</code>などで拒否を回避できた、よく似たViteの過去の脆弱性CVE-2025-31125は、2026年1月22日からKEVに載っています。<a href="#source-1">[1]</a><a href="#source-7">[7]</a></p><figure><div><div><div><p><span>10月6日の6.4.4で生じた問題を、</span><span>21日の6.4.5で直した</span></p></div><div><div><span></span><p>2026年1月22日</p><div><div><b>よく似た過去の脆弱性がKEVに載る</b><span>?raw?importなどで拒否を回避できたCVE-2025-31125</span></div></div></div><div><span></span><p>4月6日</p><div><div><b>同じ種類の問題を7系・8系で修正</b><span>GHSA-v2wj-q39q-566r。7.3.2・8.0.5で直り、6系の記載はない</span></div></div></div><div><span></span><p>10月6日</p><div><div><b>別の脆弱性2件の修正として6.4.4を公開</b><span>組み合わせて必要な変更（#22160）を取り込まなかった</span></div></div></div><div><span></span><p>10月21日</p><div><div><b>Viteが公表し、6.4.5で修正</b><span>変更はこの修正1件</span></div><div><b>6.9</b><span>CVSS 4.0（Vite）</span></div></div></div><div><span></span><p>10月30日</p><div><div><b>GitHub Advisory Databaseに収録</b><span>提供元の公表より後の収録</span></div></div></div><div><span></span><p>11月1日</p><div><div><b>KEVには載っていない</b><span>10月30日版の一覧で確認</span></div><div><b>0.3%</b><span>EPSS（10月31日）</span></div></div></div></div><p>出典　Vite「GHSA-8g5g-mxqh-grgj」（2026-10-21）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）、GitHub Advisory Database「GHSA-8g5g-mxqh-grgj」（2026-10-30収録）、npm「vite」（2026-11-01確認）</p></div></div></figure><h2>Viteの系列ごとの対象と推奨する版</h2><p>推奨する版は、Viteの公式アドバイザリと、npmに公開済みの版から出しました（11月1日確認）。上げる前に、Viteの変更履歴で変更点を確かめてください。<a href="#source-1">[1]</a><a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><div><table><thead><tr><th>系列</th><th>この件の対象</th><th>推奨する版</th><th>補足</th></tr></thead><tbody><tr><td>6系</td><td>6.4.4だけ</td><td><b>6.4.5</b></td><td>6系の最新。変更はこの修正1件で、必要なNode.jsの版も6.4.4と同じ</td></tr><tr><td>7系</td><td>記載なし</td><td>7.3.7</td><td>同じ種類の問題は7.3.2で修正済み。10月6日の脆弱性は7.3.7で修正</td></tr><tr><td>8系</td><td>記載なし</td><td>8.3.3以上（8.2系は8.2.4、8.1系は8.1.6）</td><td>同じ種類の問題は8.0.5で修正済み。10月6日の脆弱性はこの版で修正</td></tr></tbody></table></div><p>Viteの方針では、6系は「2つ前のメジャー版」にあたり、最新のマイナー版（6.4）だけがセキュリティの修正を受けます。6.4.5の後に6系の新しい版は出ていません（11月1日確認）。<a href="#source-6">[6]</a><a href="#source-11">[11]</a></p><figure><div><div><div><p><span>この件の対象は6系の6.4.4だけで、</span><span>6.4.5へ上げる</span></p></div><div><div><b>6系</b><div><span>この件の対象</span><span>6.4.4だけ</span></div><div><span>推奨する版</span><b>6.4.5</b></div><div><span>同じ種類の問題</span><span>6.4.5で修正</span></div><div><span>10月6日の脆弱性</span><span>6.4.3以前が対象で、6.4.4で修正</span></div></div><div><b>7系</b><div><span>この件の対象</span><span>記載なし</span></div><div><span>推奨する版</span><b>7.3.7</b></div><div><span>同じ種類の問題</span><span>7.3.2で修正済み</span></div><div><span>10月6日の脆弱性</span><span>7.3.7で修正</span></div></div><div><b>8系</b><div><span>この件の対象</span><span>記載なし</span></div><div><span>推奨する版</span><b>8.3.3以上</b><span>8.2系は8.2.4、8.1系は8.1.6</span></div><div><span>同じ種類の問題</span><span>8.0.5で修正済み</span></div><div><span>10月6日の脆弱性</span><span>8.3.3・8.2.4・8.1.6で修正</span></div></div></div><div><b>だから</b>　6.4.3以前に戻さず、6.4.5へ進む。</div><p>出典　Vite「GHSA-8g5g-mxqh-grgj」（2026-10-21）、Vite「GHSA-rq7h-c2jc-7f22」（2026-10-06）、Vite「GHSA-v2wj-q39q-566r」（2026-04-06）、npm「vite」（2026-11-01確認）</p></div></div></figure><h2>Viteの版と公開の有無を確かめて、6.4.5へ上げる手順</h2><ol><li><p>使っているViteの版を、間接の依存まで含めて確かめます。pnpmは<code>pnpm why vite</code>、Yarnは<code>yarn why vite</code>で同じことを確かめられます。6.4.4が1か所でも出れば対象です。</p><div><div><span>ターミナル</span></div><pre><code>npm ls vite --all</code></pre></div></li><li><p>開発サーバーをネットワークに公開していないかを、起動スクリプトと設定ファイルで確かめます。</p><div><div><span>ターミナル</span></div><pre><code>grep -n -- &quot;--host&quot; package.json
grep -n &quot;host&quot; vite.config.*</code></pre></div></li><li><p>Viteを直接入れている場合は、6.4.5以上に上げます。</p><div><div><span>ターミナル</span></div><pre><code>npm install -D vite@^6.4.5</code></pre></div></li><li><p>Astroなど上位のツールの依存で6.4.4が入っている場合は、package.jsonのoverridesで版を指定し、<code>npm install</code>し直します。Viteを直接の依存にも書いている場合は、値を<code>&quot;$vite&quot;</code>にします。<a href="#source-15">[15]</a>pnpmは<code>pnpm.overrides</code>、Yarnは<code>resolutions</code>に同じ指定を書きます。</p><div><div><span>package.json</span></div><pre><code>&quot;overrides&quot;: {
  &quot;vite&quot;: &quot;^6.4.5&quot;
}</code></pre></div></li><li><p>開発サーバーを起動し直し、動いているViteの版を確かめます。</p><div><div><span>ターミナル</span></div><pre><code>npx vite --version
npm ls vite --all</code></pre></div></li><li><p>自分の開発サーバーで、拒否したファイルが返らないことを確かめます。プロジェクトのルートに.envがある状態で、応答が200以外（拒否）になれば直っています。</p><div><div><span>ターミナル</span></div><pre><code>curl -s -o /dev/null -w &quot;%{http_code}\n&quot; &quot;http://localhost:5173/.env?raw&quot;</code></pre></div></li></ol><h2>すぐに6.4.5へ上げられないとき</h2><p>公式のアドバイザリに回避策の記載はありません。条件から見ると、開発サーバーをネットワークに公開しない（<code>--host</code>や<code>server.host</code>を外し、<code>localhost</code>だけで待ち受ける）環境は影響の条件から外れます。これは当社の整理で、提供元が示した回避策ではありません。<a href="#source-1">[1]</a><a href="#source-2">[2]</a></p><p>公開していた期間に.envへ置いていた鍵は、読まれた可能性を前提に替えるかを判断します（当社の整理）。また、publicディレクトリのファイルは拒否の設定にかかわらずそのまま配信されるので、機密のファイルを置いていないかも確かめます。<a href="#source-4">[4]</a></p><h2>10月6日の更新で6.4.4にした環境が対象になった理由</h2><p>Viteは10月6日、開発サーバーの別の脆弱性（GHSA-rq7h-c2jc-7f22、GHSA-9jrq-w75r-8gcw）を公表し、6系の修正版として6.4.4を出しました。公式の説明では、6.4.4はその修正のために変更（#20410）を取り込みましたが、組み合わせて必要な変更（#22160）を取り込みませんでした。このため、4月に7系・8系で直った同じ種類の問題（GHSA-v2wj-q39q-566r）が、6系で起きるようになりました。<a href="#source-1">[1]</a><a href="#source-8">[8]</a><a href="#source-9">[9]</a><a href="#source-14">[14]</a></p><p><mark>10月6日の告知に応じて6.4.4へ上げた環境ほど対象になり、6.4.3以前に留まった環境はこの件の対象外です。</mark>ただし6.4.3以前は10月6日の2件の対象なので、戻すのではなく6.4.5へ進みます。6.4.4が6系の最新だったのは、npmに出た日本時間の10月6日14時49分から、6.4.5が出た21日14時35分までです。この間に<code>npm install</code>やロックファイルの作り直しで6系の範囲を解決した環境に入りえます。<a href="#source-6">[6]</a></p><h2>Astro 5などが引き込む6系のVite</h2><p>Viteを直接入れていなくても、上位のツールの依存で入ります。たとえばAstro 5系の最終版5.18.2は、Viteを<code>^6.4.1</code>の範囲で求めます。Astroの版は変えていなくても、ロックファイルを作った時期によってViteは6.4.4になります。判断には、上位のツールの版ではなく、<code>npm ls vite</code>に出るViteの版を使います。<a href="#source-10">[10]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、JavaScript / TypeScriptの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>JavaScript / TypeScript</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Apache Tomcatの脆弱性8件（10月20日公表）、応答の取り違えや認証回避のおそれ。使い方ごとの対象と修正版</title><link>https://humanhacker.ai/media/vuln-radar/tomcat-october-2026/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/tomcat-october-2026/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>Apache Tomcatで10月20日に公表された8件の脆弱性（CVE-2026-101356ほか）は、HTTP/2・JNDIRealm・AJPなどの使い方で該当が分かれます。自分の版と設定が対象かの確かめ方、系列ごとの修正版、Spring Bootでの扱い、9.0系のサポート終了（2027年3月31日）を説明します。</description><content:encoded><![CDATA[<p>Javaで書いたWebアプリを動かすApache Tomcatで、8件の脆弱性が2026年10月20日にApache Software Foundation（ASF）から公表されました。HTTP/2で利用者の間の要求・応答が取り違えられるもの、LDAPを使う認証で正しいパスワードなしに認証できるものなどで、HTTP/2・JNDIRealm・AJPを使っているかで該当が分かれます。修正は10月12日に公開された11.0.27・10.1.61・9.0.123に入っています。</p><h2>Tomcatの脆弱性8件で起きることと深刻度</h2><p>ASFのセキュリティ告知は、8件のうち3件を「Important」、5件を「Low」としています。ASFはCVSSを付けていません。CVEの記録では、米CISAが補足としてCVSSを付けていて、Importantの3件はいずれも9.1です（CVE-2026-101296はCVSS 4.0、他の2件はCVSS 3.1）。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-3">[3]</a><a href="#source-4">[4]</a><a href="#source-5">[5]</a></p><p><mark>どの件も、該当するかは使っている機能で決まります。</mark>件ごとの内容と、該当する使い方は次のとおりです。範囲は告知の記載で、系列によって対象外のものがあります。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-3">[3]</a></p><div><table><thead><tr><th>CVE（ASFの重要度）</th><th>起きること</th><th>該当する使い方・系列</th></tr></thead><tbody><tr><td>CVE-2026-101356（Important）</td><td>利用者の間で要求・応答が取り違えられる</td><td>HTTP/2と非同期サーブレット。11.0.22〜、10.1.55〜、9.0.118〜</td></tr><tr><td>CVE-2026-101296（Important）</td><td>正しいパスワードなしで認証できる</td><td>JNDIRealmをGSSAPI以外のSASLで設定。全系列</td></tr><tr><td>CVE-2026-103119（Important）</td><td>応答が次の要求に混ざり、内容が漏れるおそれ</td><td>11系のAJP（11.0.0-M25〜）</td></tr><tr><td>CVE-2026-88041（Low）</td><td>前の要求のトレーラーが次の要求に混ざる</td><td>HTTP/2</td></tr><tr><td>CVE-2026-93446（Low）</td><td>TLS 1.3の接続がときどき失敗する</td><td>TLS 1.3</td></tr><tr><td>CVE-2026-74048（Low）</td><td>FIPSモードの有効化に失敗しても起動する</td><td>OpenSSLLifecycleListenerでFIPSモードを指定</td></tr><tr><td>CVE-2026-74049（Low）</td><td>リダイレクト後もページの処理が続く</td><td>JSPでJSTLの<code>&lt;c:redirect&gt;</code></td></tr><tr><td>CVE-2026-80353（Low）</td><td>ローカルの利用者がUnixドメインソケットに接続できる</td><td>9.0系のAPR/Nativeコネクタ</td></tr></tbody></table></div><figure><div><div><div><p><span>HTTP/2・JNDIRealm・AJPのどれを使うかで、</span><span>起きることが分かれる</span></p><p>ASFがImportantとした3件を並べる。</p></div><div><div><span>入口</span><b>HTTP/2の要求</b><span>非同期サーブレットと組み合わせた構成</span></div><div><span>入口</span><b>LDAPを使うログイン</b><span>JNDIRealmをGSSAPI以外のSASLで設定</span></div><div><span>入口</span><b>AJPの要求</b><span>11系のAJPコネクタ</span></div></div><div><span>↓</span><span>Tomcatが受け取る</span></div><div><p><b>Apache Tomcat</b> 11.0.26・10.1.60・9.0.122以前</p><div><div><b>CVE-2026-101356</b><span>11.0.22〜、10.1.55〜、9.0.118〜</span></div><div><b>CVE-2026-101296</b><span>全系列</span></div><div><b>CVE-2026-103119</b><span>11.0.0-M25〜</span></div></div></div><div><span>↓</span><span>起きること</span></div><div><div><b>要求・応答の取り違え</b><span>利用者の間で入れ替わる</span></div><div><b>パスワードなしの認証</b><span>正しいパスワードなしで認証できる</span></div><div><b>内容の漏えい</b><span>応答が次の要求に混ざる</span></div></div><p>出典　Apache Tomcat「Apache Tomcat 11.x・10.x・9.x vulnerabilities」（2026-10-20）</p></div></div></figure><h2>TomcatでHTTP/2・JNDIRealm・AJPを使っているかの確かめ方</h2><p>単体のTomcatでは、HTTP/2はコネクタの中に<code>Http2Protocol</code>を書いたときに有効になります。配布物の<code>server.xml</code>では、HTTP/2を使う例とAJPのコネクタはどちらもコメントになっています。<a href="#source-6">[6]</a><a href="#source-7">[7]</a></p><p>Spring Bootの組み込みTomcatでは、HTTP/2は<code>server.http2.enabled</code>で有効にし、初期値は無効です。<a href="#source-8">[8]</a></p><p>CVE-2026-101356は版の範囲が新しく、たとえば9.0系では9.0.118〜9.0.122だけが対象です。<mark>古い版はこの件の対象外でも、JNDIRealmの件（CVE-2026-101296）は全系列が対象です。</mark>この件は<code>authentication</code>属性にGSSAPI以外のSASLの方式を指定している場合が該当します。<a href="#source-1">[1]</a><a href="#source-9">[9]</a></p><h2>悪用の状況</h2><p>2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧（KEV）」には載っていません。</p><p>PoCの公開は、ASFの告知とCVEの記録では確認できていません。CVEの記録のCISAの評価（SSVC）では、8件とも悪用は「none」です。</p><figure><div><div><div><p><span>修正版は公表より前の10月12日に出ていて、</span><span>KEVには載っていない</span></p></div><div><div><span></span><p>2026年10月12日</p><div><div><b>ASFが修正版を公開</b><span>11.0.27・10.1.61・9.0.123。Maven Centralにも置かれた</span></div></div></div><div><span></span><p>10月20日</p><div><div><b>ASFが8件の脆弱性を公表</b><span>3件をImportant、5件をLowとした</span></div><div><b>9.1</b><span>CISAのCVSS（Importantの3件）</span></div></div></div><div><span></span><p>10月22日</p><div><div><b>Spring Boot 4.0.9・4.1.2を公開</b><span>組み込みのTomcatに11.0.27を使う</span></div></div></div><div><span></span><p>11月1日</p><div><div><b>KEVには載っていない</b><span>CVEの記録のCISAの評価（SSVC）でも、8件とも悪用は「none」</span></div></div></div><div><span></span><p>2027年3月31日</p><div><div><b>9.0系のサポート終了</b><span>同じ時期に9.1系の公開が始まる</span></div></div></div></div><p>出典　Apache Tomcat「Apache Tomcat 11.x・10.x・9.x vulnerabilities」（2026-10-20）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）、Apache Tomcat「End of support for Apache Tomcat 9.0.x」（2026-02-11）</p></div></div></figure><h2>Tomcatの系列ごとの修正版とサポート終了の版</h2><p>修正版は10月12日にASFから公開され、Maven Centralにも置かれています。脆弱性の公表（10月20日）より前に出ているので、すでに11.0.27・10.1.61・9.0.123以降に上げていれば、8件の修正は入っています。必要なJavaの版は系列ごとに決まっていて、同じ系列の中の更新では変わりません。<a href="#source-10">[10]</a><a href="#source-11">[11]</a></p><div><table><thead><tr><th>系列</th><th>修正版</th><th>必要なJava</th></tr></thead><tbody><tr><td>11.0</td><td>11.0.27</td><td>17以上</td></tr><tr><td>10.1</td><td>10.1.61</td><td>11以上</td></tr><tr><td>9.0</td><td>9.0.123</td><td>8以上</td></tr><tr><td>8.5・7.0</td><td>なし（サポート終了）</td><td>―</td></tr></tbody></table></div><p>CVEの記録は、サポートが終わった8.5系・7.0系も、JNDIRealmの件とJSTLの件の対象だとしています。修正版は出ないので、サポート中の系列へ移ります。<a href="#source-4">[4]</a></p><figure><div><div><div><p><span>修正版は11.0.27・10.1.61・9.0.123で、</span><span>8.5系・7.0系には出ない</span></p></div><div><div><b>11.0系</b><div><span>修正版</span><b>11.0.27</b></div><div><span>必要なJava</span><span>17以上</span></div><div><span>HTTP/2の件の範囲</span><span>11.0.22〜11.0.26</span></div><div><span>補足</span><span>Spring Boot 4.0.9・4.1.2が使う版</span></div></div><div><b>10.1系</b><div><span>修正版</span><b>10.1.61</b></div><div><span>必要なJava</span><span>11以上</span></div><div><span>HTTP/2の件の範囲</span><span>10.1.55〜10.1.60</span></div><div><span>補足</span><span>Spring Boot 3.5.16は10.1.55のまま</span></div></div><div><b>9.0系</b><div><span>修正版</span><b>9.0.123</b></div><div><span>必要なJava</span><span>8以上</span></div><div><span>HTTP/2の件の範囲</span><span>9.0.118〜9.0.122</span></div><div><span>補足</span><span>2027年3月31日でサポート終了</span></div></div></div><div><b>だから</b>　サポートが終わった8.5系・7.0系は、サポート中の系列へ移る。</div><p>出典　Apache Tomcat「Which Version Do I Want?」（2026-11-01確認）、Apache Tomcat「Apache Tomcat 11.x・10.x・9.x vulnerabilities」（2026-10-20）、Maven Central「spring-boot-dependencies 4.0.9・4.1.2・3.5.16」（2026-10-22）</p></div></div></figure><h2>Tomcatの版と設定を確認・更新する手順</h2><ol><li><p>単体のTomcatは、版を表示して系列と番号を確かめます（Windowsでは<code>version.bat</code>）。</p><div><div><span>ターミナル</span></div><pre><code>$CATALINA_HOME/bin/version.sh</code></pre></div></li><li><p>アプリに組み込んだTomcat（Spring Bootなど）は、依存関係から版を確かめます。Gradleでは<code>./gradlew dependencyInsight --dependency tomcat-embed-core</code>です。</p><div><div><span>ターミナル</span></div><pre><code>mvn dependency:tree -Dincludes=org.apache.tomcat.embed</code></pre></div></li><li><p>server.xmlで、HTTP/2・AJP・JNDIRealm・Unixドメインソケット・FIPSモードの設定があるかを確かめます。コメントの中の行も表示されるので、有効な設定かを見分けます。</p><div><div><span>ターミナル</span></div><pre><code>grep -n -E &quot;Http2Protocol|AJP/1.3|JNDIRealm|unixDomainSocketPath|FIPSMode&quot; $CATALINA_BASE/conf/server.xml</code></pre></div></li><li><p>Spring Bootでは、HTTP/2を有効にしているかを設定ファイルで確かめます。</p><div><div><span>ターミナル</span></div><pre><code>grep -rn &quot;server.http2.enabled&quot; src/main/resources/</code></pre></div></li><li><p>Spring Bootの3.5系で、すぐに4系へ上げられない場合は、組み込みTomcatの版を指定します。指定後はテストで動作を確かめます。</p><div><div><span>pom.xml</span></div><pre><code>&lt;properties&gt;
  &lt;tomcat.version&gt;10.1.61&lt;/tomcat.version&gt;
&lt;/properties&gt;</code></pre></div></li><li><p>更新して再起動したあと、もう一度版を確かめます。</p><div><div><span>ターミナル</span></div><pre><code>$CATALINA_HOME/bin/version.sh</code></pre></div></li></ol><h2>すぐ上げられないとき</h2><p>ASFの告知に、更新以外の回避策はありません。表の使い方に当てはまらなければその件の経路から外れますが、これは当社の整理で、ASFが示した回避策ではありません。JNDIRealmの件は認証に関わるので、該当する設定がある場合は更新を先にします。<a href="#source-5">[5]</a></p><h2>Spring Bootの組み込みTomcatの版</h2><p>Spring Bootは、使うTomcatの版を依存関係の一覧（spring-boot-dependencies）の<code>tomcat.version</code>で決めています。Maven Centralの記載では、10月22日に公開された4.0.9と4.1.2が11.0.27を使います。<a href="#source-12">[12]</a></p><p><mark>3.5系の最後の公開版3.5.16は10.1.55を使っていて、CVE-2026-101356とCVE-2026-101296の範囲に入ります。</mark>3.5系の無償サポートは2026年6月30日に終わっています。4系へ上げられない間は、<code>tomcat.version</code>で10.1.61を指定できますが、Spring Bootの文書は、版を上書きすると互換性の問題が起きることがあると注意しています。<a href="#source-12">[12]</a><a href="#source-13">[13]</a><a href="#source-14">[14]</a></p><h2>9.0系のサポート終了と9.1系への移行</h2><p>ASFは、9.0系のサポートを2027年3月31日で終えると告知しています。その後は脆弱性の報告が9.0系に照らして確かめられなくなります。最後の9.0系の公開は3月31日の少し前の予定です。<a href="#source-15">[15]</a></p><p>同じ時期に9.1系の公開が始まり、2030年12月31日まで続きます。9.0系との違いは小さく、HTTP・HTTPS・AJPのAPR/Nativeコネクタが無くなる点です。APR/Nativeコネクタを使っている場合は、NIOのコネクタへの移行が勧められています。CVE-2026-80353はこのAPR/Nativeコネクタの件です。<a href="#source-3">[3]</a><a href="#source-15">[15]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Java / JVMの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Java / JVM</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>LaravelのTokenGuardに認証回避の脆弱性、MySQL・MariaDBの一部の構成で他人として認証されるおそれ。Sanctumとの見分け方と11系以前の扱い</title><link>https://humanhacker.ai/media/vuln-radar/laravel-tokenguard/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/laravel-tokenguard/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>Laravelの脆弱性CVE-2026-114509は、TokenGuardで守るAPIに文字列でない値を送ると、MySQL・MariaDBの一部の構成で既存の利用者として認証されるおそれがあります。自社がTokenGuardかSanctumかの見分け方、12.69.0・13.30.0以上への上げ方、サポートが終わった11系以前の扱いを説明します。</description><content:encoded><![CDATA[<p>PHPのWebフレームワークLaravelの標準のトークン認証（TokenGuard）で、文字列でない形に細工した値を送ると、MySQL・MariaDBの一部の構成で、APIトークンを知らないまま既存の利用者として認証されるおそれがある脆弱性（CVE-2026-114509）が、2026年10月19日にLaravelから公表されました。修正版は13.29.0と12.68.0です。対象はTokenGuardを使うアプリで、Sanctumで認証しているアプリとは見分けて確かめます。</p><h2>LaravelのTokenGuardで起きることと仕組み</h2><p>TokenGuardは、要求に含まれるAPIトークンを取り出し、そのトークンを持つ利用者をデータベースから探す仕組みです。トークンは、URLのクエリや送信された値の<code>api_token</code>、<code>Authorization: Bearer</code>ヘッダーなどから読み取ります。<a href="#source-1">[1]</a><a href="#source-6">[6]</a></p><p>Laravelのアドバイザリによると、MySQL・MariaDBの一部の構成で、文字列でない形に細工した値を送ると、認証の検索の処理で正しく扱われず、本来は失敗するはずの問い合わせが別の利用者の行に一致します。<mark>攻撃者は、相手のAPIトークンを知らないまま、既存の利用者として認証されるおそれがあります。</mark>そのガードで守ったルートでは、認証の回避とアカウントの乗っ取りにつながります。どの構成が対象かは、アドバイザリに記載がありません。<a href="#source-1">[1]</a></p><p>修正は、TokenGuardが受け取ったトークンが文字列かを確かめ、文字列でなければ検索しないようにしたものです。修正のコミットのテストでは、配列の値を送る例が使われています。<a href="#source-5">[5]</a></p><figure><div><div><div><p><span>細工した値で、</span><span>トークンを知らないまま他人として認証される</span></p></div><div><div><span>攻撃の入口</span><b>文字列でない形に細工した値</b><span>api_tokenのクエリや送信値、Bearerヘッダーで送る</span></div></div><div><span>↓</span><span>TokenGuardが受け取る</span></div><div><p>Laravelのトークン認証</p><div><div><b><b>TokenGuard</b></b><span>13.29.0未満・12.68.0未満は、値が文字列かを確かめずに検索する</span></div><div><b>MySQL・MariaDB</b><span>一部の構成で、失敗するはずの問い合わせが別の利用者の行に一致する</span></div></div></div><div><span>↓</span><span>起きること</span></div><div><div><b>既存の利用者として認証</b><span>相手のAPIトークンを知らないまま</span></div><div><b>アカウントの乗っ取り</b><span>そのガードで守ったルートで認証を回避</span></div></div><p>出典　Laravel「GHSA-f9x3-7vq9-cph6」（2026-10-19公表、10-22更新）、Laravel「TokenGuard.php（13.x）」（2026-11-01確認）</p></div></div></figure><h2>Laravelの脆弱性の影響を受ける条件</h2><p>次の条件がそろう環境が対象です。<a href="#source-1">[1]</a></p><ul><li>標準のトークン方式のAPIガード（TokenGuard）でルートを守っている。<code>config/auth.php</code>の<code>guards</code>に<code>'driver' =&gt; 'token'</code>がある</li><li>データベースがMySQLまたはMariaDBで、影響を受ける構成になっている（具体的な構成はアドバイザリに記載なし）</li><li><code>laravel/framework</code>が13.29.0未満、または12.68.0未満</li></ul><h2>Laravelの脆弱性の悪用の状況</h2><p>11月1日に確かめた時点で、米CISAの悪用が確認された脆弱性の一覧（KEV、10月30日版）には載っていません。CVEの記録に米CISAが付けた評価（SSVC、10月28日）も、悪用は「なし」です。<a href="#source-2">[2]</a><a href="#source-3">[3]</a></p><p>攻撃のコード（PoC）として公開されたものは確認できませんでした。ただし、修正のコミットのテストに、問題を起こす入力の形が載っています。今後30日に悪用される見込みの推定（EPSS）は0.78%です（10月31日時点）。深刻度は、LaravelとCVEの採番機関のGitHubの評価でCVSS 4.0の9.2（緊急）です。NVDは11月1日時点で分析待ちで、独自の値を付けていません。<a href="#source-4">[4]</a><a href="#source-5">[5]</a><a href="#source-7">[7]</a></p><figure><div><div><div><p><span>修正版の公開から約2か月後の10月19日に公表</span></p></div><div><div><span></span><p>2026年8月25日・26日</p><div><div><b>12.68.0と13.29.0をPackagistで公開</b><span>TokenGuardが値を文字列か確かめるようにした</span></div></div></div><div><span></span><p>9月1日</p><div><div><b>13.30.0と12.69.0を公開</b><span>エラー画面のXSS（CVE-2026-102279）も直った</span></div></div></div><div><span></span><p>10月19日</p><div><div><b>Laravelが脆弱性を公表</b><span>CVE-2026-114509</span></div><div><b>9.2</b><span>CVSS 4.0（Laravel）</span></div></div></div><div><span></span><p>10月27日</p><div><div><b>10系の10.50.4を公開</b><span>TokenGuardに同じ文字列の確認が入った</span></div></div></div><div><span></span><p>10月28日</p><div><div><b>CISAのSSVCで悪用は「なし」</b><span>CVEの記録に付いた評価</span></div></div></div><div><span></span><p>11月1日</p><div><div><b>KEVには載っていない</b><span>10月30日版の一覧で確認。公開されたPoCも確認できなかった</span></div><div><b>0.78%</b><span>EPSS（10月31日）</span></div></div></div></div><p>出典　Laravel「GHSA-f9x3-7vq9-cph6」（2026-10-19公表、10-22更新）、Packagist「laravel/framework」（2026-11-01確認）、CVE Program「CVE-2026-114509」（2026-10-22公開）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）、FIRST「EPSS（CVE-2026-114509）」（2026-10-31）</p></div></div></figure><h2>Laravelの対象の版と推奨する版</h2><p>今回の修正版は13.29.0と12.68.0で、12.68.0は8月25日、13.29.0は8月26日（いずれも日本時間）にPackagistで公開されています。公表が修正版の公開から約2か月後だったため、すでに上げている環境もあります。<mark>同じ時期のLaravelのアドバイザリも直る版は、13系が13.30.0、12系が12.69.0です。</mark>13.30.0・12.69.0では、<code>APP_DEBUG=true</code>のときのエラー画面のXSS（CVE-2026-102279、低）が直っています。<a href="#source-1">[1]</a><a href="#source-8">[8]</a><a href="#source-9">[9]</a></p><div><table><thead><tr><th>系列</th><th>影響を受ける版</th><th>今回の修正版</th><th>推奨する版</th><th>最新版（11月1日）</th></tr></thead><tbody><tr><td>13系</td><td>13.29.0未満</td><td>13.29.0</td><td><b>13.30.0以上</b></td><td>13.39.0</td></tr><tr><td>12系</td><td>12.68.0未満</td><td>12.68.0</td><td><b>12.69.0以上</b></td><td>12.70.2</td></tr><tr><td>11系以前</td><td>12.68.0未満に含まれる</td><td>記載なし（出典で確認）</td><td>12系以上へ移る</td><td>―</td></tr></tbody></table></div><p>推奨する版は、Laravelのリポジトリで公表されたアドバイザリと、Packagistで公開済みの版から出しました（11月1日確認）。13系はPHP 8.3以上、12系はPHP 8.2以上が必要です。更新の前に、Laravelのリリースノートで変更点を確かめてください。<a href="#source-1">[1]</a><a href="#source-8">[8]</a><a href="#source-10">[10]</a></p><figure><div><div><div><p><span>13系は13.30.0以上、</span><span>12系は12.69.0以上へ上げ、</span><span>11系以前は12系以上へ移る</span></p></div><div><div><b>13系</b><div><span>影響を受ける版</span><span>13.29.0未満</span></div><div><span>今回の修正版</span><span>13.29.0</span></div><div><span>推奨する版</span><b>13.30.0以上</b></div><div><span>補足</span><span>PHP 8.3以上。13.30.0でエラー画面のXSSも直る</span></div></div><div><b>12系</b><div><span>影響を受ける版</span><span>12.68.0未満</span></div><div><span>今回の修正版</span><span>12.68.0</span></div><div><span>推奨する版</span><b>12.69.0以上</b></div><div><span>補足</span><span>PHP 8.2以上。12.69.0でエラー画面のXSSも直る</span></div></div><div><b>11系以前</b><div><span>影響を受ける版</span><span>12.68.0未満に含まれる</span></div><div><span>今回の修正版</span><span>記載なし</span></div><div><span>推奨する版</span><b>12系以上へ移る</b></div><div><span>補足</span><span>セキュリティの修正は11系が2026年3月12日に終了</span></div></div></div><div><b>だから</b>　8月に13.29.0へ上げた環境も、13.30.0未満なら上げ直す。</div><p>出典　Laravel「GHSA-f9x3-7vq9-cph6」（2026-10-19公表、10-22更新）、Packagist「laravel/framework」（2026-11-01確認）、Laravel「Release Notes（Support Policy）」（2026-11-01確認）</p></div></div></figure><h2>Laravelの版とガードを確かめて上げる手順</h2><ol><li><p>composer.lockに記録された<code>laravel/framework</code>の版を確認します。</p><div><div><span>ターミナル</span></div><pre><code>composer show --locked laravel/framework</code></pre></div></li><li><p>TokenGuard（ドライバー<code>token</code>）のガードがあるか、どのルートがそのガードを使っているかを確認します。</p><div><div><span>ターミナル</span></div><pre><code>grep -n &quot;'driver'&quot; config/auth.php
grep -rn &quot;auth:api\|guard('api')&quot; routes app</code></pre></div></li><li><p>推奨する版へ上げます。13系なら13.30.0以上、12系なら12.69.0以上になるよう、composer.jsonの指定を確かめてから実行します。</p><div><div><span>ターミナル</span></div><pre><code>composer update laravel/framework --with-dependencies
composer show --locked laravel/framework</code></pre></div></li><li><p>Packagistに登録された脆弱性の情報で、他に残っているものがないかを確かめます。</p><div><div><span>ターミナル</span></div><pre><code>composer audit --locked</code></pre></div></li><li><p>本番に反映したあと、実際に動いているLaravelの版を確かめます。コンテナイメージやデプロイ先でも同じ確認をします。</p><div><div><span>ターミナル</span></div><pre><code>php artisan --version</code></pre></div></li></ol><h2>すぐ上げられないとき</h2><p>Laravelのアドバイザリには、回避策の記載がありません。対応は修正版への更新です。<a href="#source-1">[1]</a></p><p>TokenGuardを使っていないアプリ（<code>'driver' =&gt; 'token'</code>のガードが無いアプリ）は、この脆弱性の条件に当てはまりません。その場合も、同じ版で直る他の脆弱性のために、上の表の版へ上げることを勧めます。</p><h2>TokenGuardかSanctumかの見分け方</h2><p>LaravelのAPI認証には、標準のTokenGuard（ドライバー<code>token</code>）のほかに、Sanctum（ドライバー<code>sanctum</code>）やPassportがあります。アドバイザリが対象として挙げるのはTokenGuardだけです。Sanctumは<code>Laravel\Sanctum\Guard</code>という別のクラスで、<code>personal_access_tokens</code>の表からトークンを探します。<a href="#source-1">[1]</a><a href="#source-6">[6]</a><a href="#source-11">[11]</a></p><p><mark>Sanctumを使っていても、古いガードの設定が<code>config/auth.php</code>に残っていて、一部のルートだけがそちらで守られていることがあります。</mark><code>auth:api</code>などのミドルウェアの指定が、どのガードを指しているかを手順で確かめます。</p><h2>11系以前を使っている場合</h2><p>アドバイザリは影響範囲を「12.68.0未満」としており、11系以前も対象に含まれますが、11系以前の修正版は記載していません。Laravelのサポートの方針では、セキュリティの修正の提供は11系が2026年3月12日、10系が2025年2月4日に終わっています。<a href="#source-1">[1]</a><a href="#source-12">[12]</a></p><p>なお、Laravelのリポジトリでは、11系の11.56.1（8月25日公開）と10系の10.50.4（10月27日公開）のTokenGuardに、同じ文字列の確認が入っています。<mark>これはアドバイザリが示す修正版ではなく、他の脆弱性の修正も保証されないため、12系以上へ移るまでのつなぎとして扱います。</mark><a href="#source-8">[8]</a><a href="#source-13">[13]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、PHPの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>PHP</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Rustのzipクレートの脆弱性CVE-2026-115905、検査をすり抜けて別のファイルを上書きされるおそれ。9.0.5以降も既定で無効の検査を有効にする方法</title><link>https://humanhacker.ai/media/vuln-radar/rust-zip/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/rust-zip/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>Rustのzipクレートの脆弱性CVE-2026-115905（GHSA-m665-v7pm-7grj）は、ZIPの2か所の名前の食い違いで検査をすり抜け、別のファイルを上書きされるおそれがあります。修正の検査は既定で無効です。対象の構成の見分け方、上げる先の9.1.0、検査を有効にする書き方を説明します。</description><content:encoded><![CDATA[<p>RustのZIPのクレートzipで、検査では無害なファイルに見えるZIPから、展開のときに別のファイルを上書きされるおそれがある脆弱性CVE-2026-115905が、2026年10月18日にzip-rsから公表されました。修正の9.0.5で入った食い違いの検査は、互換性のため既定で無効です。版を上げるだけでは展開の動きが変わらないため、この記事では、対象の構成の見分け方、検査を有効にする書き方、上げる先の版を説明します。</p><h2>zipクレートのCVE-2026-115905で起きること</h2><p>ZIPファイルでは、各ファイルの名前が、本体の直前（ローカルファイルヘッダー）と末尾の目録（セントラルディレクトリ）の2か所に書かれます。提供元のアドバイザリによると、9.0.4以下の<code>ZipArchive</code>は目録の名前だけを使い、逐次読み込みの<code>ZipStreamReader</code>は本体の直前の名前だけを使って展開します。2か所の名前を食い違わせたZIPは、読む部品によって別のファイルに見えます。<a href="#source-1">[1]</a></p><p>アドバイザリの例では、目録に<code>doc_report.pdf</code>、本体の直前に<code>cron_worker.sh</code>と書いたZIPが、目録で確かめる検査を通り、<code>ZipStreamReader</code>での展開で既存のスクリプトを上書きします。既存のファイルを書き換えられると、サービスの停止や、仕込まれたスクリプトによるコード実行につながるおそれがあります。<a href="#source-1">[1]</a></p><p>深刻度は、提供元の評価でCVSS 4.0の10.0（緊急）です。NVDは11月1日時点で独自の評価をしておらず、提供元と同じ値を載せています。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><figure><div><div><div><p><span>名前を2か所で食い違わせたZIPが、</span><span>目録で確かめる検査を通り、</span><span>展開で別のファイルを上書きする</span></p><p>提供元のアドバイザリの例を、受け取ったZIP・読む部品・起きることの順に並べる。</p></div><div><div><b>細工したZIP</b><span>目録にdoc_report.pdf、本体の直前にcron_worker.shと書く</span></div></div><div><span>↓</span><span>アップロードや自動展開の処理が受け取る</span></div><div><p><b>zip</b>クレートの9.0.4以下</p><div><div><b>ZipArchive</b><span>末尾の目録（セントラルディレクトリ）の名前だけを使う</span></div><div><b>ZipStreamReader</b><span>本体の直前（ローカルファイルヘッダー）の名前だけを使って展開する</span></div></div></div><div><span>↓</span><span>読む部品によって別のファイルに見える</span></div><div><div><b>検査</b><span>目録のdoc_report.pdfを見て通す</span></div><div><b>展開</b><span>本体の直前のcron_worker.shとして書き出す</span></div></div><div><span>↓</span><span>起きること</span></div><div><div><b>既存のファイルの上書き</b><span>アドバイザリの例では既存のスクリプトを書き換える</span></div><div><b>サービスの停止</b><span>書き換えたファイルによって動かなくなる</span></div><div><b>コード実行</b><span>仕込まれたスクリプトが実行される</span></div></div><p>出典　zip-rs「GHSA-m665-v7pm-7grj」（2026-10-18）</p></div></div></figure><h2>zipクレートの脆弱性の対象になる構成</h2><p>提供元が影響を受けるとしているのは、目録を基準にする読み方を信じた処理と、本体の直前のヘッダーを基準にする読み方の処理が組み合わさる場合です。逆の組み合わせも含みます。<a href="#source-1">[1]</a></p><div><table><thead><tr><th>構成の例</th><th>見方</th></tr></thead><tbody><tr><td>受け取ったZIPを<code>ZipArchive</code>で名前や拡張子を確かめ、<code>ZipStreamReader</code>で展開する</td><td>提供元が示す典型の例</td></tr><tr><td>ウイルス検査やアップロードの検査（目録で判定する別の道具）を通したZIPを、<code>ZipStreamReader</code>で展開する</td><td>対象。検査の道具がRustでなくても同じ</td></tr><tr><td><code>ZipStreamReader</code>で確かめ、別の道具や<code>ZipArchive</code>で展開する</td><td>逆の組み合わせとして対象</td></tr><tr><td>確認と展開を同じ<code>ZipArchive</code>だけで行い、他の道具に渡さない</td><td>アドバイザリが説明する組み合わせに当たらない（対象外とは書かれていない）</td></tr></tbody></table></div><p>提供元は、利用者が送ったZIPを自動で展開するサービスや、検査と展開を別の部品で行う構成を、影響を受ける例に挙げています。<code>ZipStreamReader</code>は<code>zip::unstable::stream</code>にあるので、コードの中でこの名前を探すと見分けの手がかりになります。<a href="#source-1">[1]</a></p><h2>悪用の状況</h2><p>2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧（KEV）」には載っていません。</p><p>今後30日以内に悪用される確率の推定値（EPSS）は0.3%です（2026-11-01時点）。見込みは高くない部類ですが、推定値で、悪用されないことを保証するものではありません。</p><p>提供元のアドバイザリには、検査をすり抜けて既存のスクリプトを上書きするまでを再現するテストのコード（PoC）と、その実行結果が載っています。当社はPoCを検証していません。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>公表と同じ日に9.0.5が出て、</span><span>11月1日時点でKEVには載っていない</span></p><p>提供元の公表、データベースへの登録、悪用の状況の確認を日付の順に並べる（日本時間）。</p></div><p><span></span>提供元（zip-rs）　<span></span>データベース・公的機関</p><div><div><span></span><p>2026年10月18日</p><div><div><b>提供元がアドバイザリを公表し、9.0.5を公開</b><span>検査をすり抜けて既存のスクリプトを上書きするまでを再現するPoCも載せた</span></div><div><b>10.0</b><span>CVSS 4.0（提供元の評価）</span></div></div></div><div><span></span><p>2026年10月27日</p><div><div><b>9.0.5に残る別の2件を公表</b><span>GHSA-wjr6-mhvj-cjvmとGHSA-gmfj-vffv-32pw。どちらも9.1.0で直った</span></div></div></div><div><span></span><p>2026年10月27日</p><div><div><b>NVDにCVE-2026-115905を登録</b><span>独自の評価はせず、提供元と同じ値を載せている</span></div></div></div><div><span></span><p>2026年10月29日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>2026年11月1日</p><div><div><b>KEVに載っていない</b><span>cargo auditが参照するRustSecのデータベースにも記録が無い</span></div><div><b>0.3%</b><span>EPSS（30日以内の悪用の推定）</span></div></div></div></div><p>出典　zip-rs「GHSA-m665-v7pm-7grj」（2026-10-18）、NVD「CVE-2026-115905」（2026-10-27）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-11-01確認）</p></div></div></figure><h2>zipクレートの対象の版と推奨する版</h2><p>GitHub Advisoryの記載は「9.0.4以下が対象、修正版は9.0.5」です。9.0.5は日本時間の10月18日に公開されました。8系以前に向けた修正版は、アドバイザリに記載がありません。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-9">[9]</a></p><div><table><thead><tr><th>系列</th><th>対象</th><th>今回の件が直る版</th><th>推奨する版</th></tr></thead><tbody><tr><td>9系</td><td>9.0.4以下</td><td>9.0.5</td><td>9.1.0以上（最新は9.2.1）</td></tr><tr><td>8系以前</td><td>対象（9.0.4以下に含まれる）</td><td>記載なし（出典で確認）</td><td>9系の9.1.0以上へ移る</td></tr></tbody></table></div><p>9.0.5で止めないのは、提供元が10月27日（日本時間）に公表した別の2件が残るためです。<code>ZipArchive::new</code>が前の目録に戻って読み、他の道具と違う中身に見える問題（GHSA-wjr6-mhvj-cjvm、2.1.4〜9.0.5）と、厳密な検査が末尾の欠けたZIPを通してしまう問題（GHSA-gmfj-vffv-32pw、9.1.0未満）で、どちらも9.1.0で直りました。9系に必要なRustは1.88以上で、8系と同じです。<a href="#source-7">[7]</a><a href="#source-8">[8]</a><a href="#source-9">[9]</a></p><figure><div><div><div><p><span>9.0.5で今回の件は直るが別の2件が残り、</span><span>どの版でも食い違いの検査は既定で無効</span></p><p>版ごとに、今回の件、9.0.5に残る2件、食い違いの検査の扱いを並べる。</p></div><div><div><b>9.0.4以下</b><span>8系以前を含む</span><div><span>今回の件（CVE-2026-115905）</span><span>対象</span></div><div><span>GHSA-wjr6-mhvj-cjvm・GHSA-gmfj-vffv-32pw</span><span>対象（GHSA-wjr6-mhvj-cjvmは2.1.4以上）</span></div><div><span>食い違いの検査</span><span>無い</span></div></div><div><b>9.0.5</b><span>今回の件の修正版</span><div><span>今回の件（CVE-2026-115905）</span><span>直っている</span></div><div><span>GHSA-wjr6-mhvj-cjvm・GHSA-gmfj-vffv-32pw</span><span>2件とも残る</span></div><div><span>食い違いの検査</span><span>既定で無効。enforce_header_consistency(true)などで有効にする</span></div></div><div><b>9.1.0以上</b><span>最新は9.2.1</span><div><span>今回の件（CVE-2026-115905）</span><span>直っている</span></div><div><span>GHSA-wjr6-mhvj-cjvm・GHSA-gmfj-vffv-32pw</span><span>9.1.0で直った</span></div><div><span>食い違いの検査</span><span>既定で無効。ExtractOptionsでまとめて展開するときも有効にできる</span></div></div></div><div><b>だから</b>　9.1.0以上に上げ、展開の処理で検査を有効にする。8系以前に修正版はないため、9系へ移る。</div><p>出典　zip-rs「GHSA-m665-v7pm-7grj」（2026-10-18）、同「GHSA-wjr6-mhvj-cjvm」「GHSA-gmfj-vffv-32pw」（2026-10-27）、同「v9.1.0」（2026-10-24）</p></div></div></figure><h2>zipクレートを確かめて上げ、検査を有効にする手順</h2><ol><li><p>使っているzipの版と、どのクレートが使っているかを確かめます。複数の版が入っていると表示されたら、<code>cargo tree -i zip@8.6.0</code>のように版を付けます。</p><div><div><span>ターミナル</span></div><pre><code>cargo tree -i zip</code></pre></div></li><li><p><code>Cargo.lock</code>に記録された版も確かめます。</p><div><div><span>ターミナル</span></div><pre><code>grep -n -A1 'name = &quot;zip&quot;' Cargo.lock</code></pre></div></li><li><p>コードの中で、逐次読み込みの部品を使っている箇所を探します。</p><div><div><span>ターミナル</span></div><pre><code>grep -rn -E 'ZipStreamReader|unstable::stream' --include='*.rs' .</code></pre></div></li><li><p><code>Cargo.toml</code>の指定を9.1.0以上が入る範囲にしてから更新します。8系以前からは大きな版の更新です。他のクレートが古い版を求めている場合は、そのクレートも更新します。</p><div><div><span>ターミナル</span></div><pre><code># Cargo.toml の [dependencies] を zip = &quot;9.1&quot; にしてから
cargo update -p zip</code></pre></div></li><li><p>展開の処理で、食い違いの検査を有効にします（使っている部品の行だけを入れます）。</p><div><div><span>Rust</span></div><pre><code>use zip::read::ExtractOptions;
use zip::unstable::stream::ZipStreamReader;

// 逐次読み込みで展開する場合
ZipStreamReader::new(reader).enforce_header_consistency(true).extract(&amp;dir)?;

// ZipArchiveで確かめて展開する場合（extract_with_optionsは9.1.0以降）
archive.validate_header_consistency()?;
archive.extract_with_options(&amp;dir, ExtractOptions::default().enforce_header_consistency(true))?;</code></pre></div></li><li><p>テストを通したあと、もう一度版を確かめます。本番で動いている成果物（コンテナのイメージなど）も作り直します。</p><div><div><span>ターミナル</span></div><pre><code>cargo test
cargo tree -i zip</code></pre></div></li></ol><h2>すぐに上げられないとき</h2><p>提供元のアドバイザリに回避策の節はありません。示されている対応は、更新と、9.0.5で追加された検査を有効にすることです。<a href="#source-1">[1]</a><a href="#source-4">[4]</a></p><p>当社の整理では、更新までの間は、確認と展開に同じ読み方を使うこと（<code>ZipArchive</code>で確かめた一覧を<code>ZipArchive</code>から展開する）と、展開後のファイル名が確認したときの一覧と一致するかを確かめることが考えられます。これは提供元が示した回避策ではありません。</p><h2>上げても既定では検査されない。有効にする書き方</h2><p>9.0.5で入った修正は、本体の直前のヘッダーと目録の食い違いを見つける検査です。修正のコミットとソースには「互換性のため、<code>ZipStreamReader::new</code>はヘッダーの一致を確かめない」と書かれていて、11月1日時点の最新の9.2.1でも既定は無効のままです。<mark>版を上げただけでは、展開の動きは変わりません。</mark><a href="#source-4">[4]</a><a href="#source-5">[5]</a></p><p>検査を有効にする書き方は、使っている部品で次のように違います。<a href="#source-4">[4]</a><a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><div><table><thead><tr><th>使い方</th><th>有効にする書き方</th><th>使える版</th></tr></thead><tbody><tr><td><code>ZipStreamReader</code>で展開する</td><td><code>ZipStreamReader::new(r).enforce_header_consistency(true)</code></td><td>9.0.5以降</td></tr><tr><td><code>ZipArchive</code>の全体を確かめる</td><td><code>archive.validate_header_consistency()</code></td><td>9.0.5以降</td></tr><tr><td><code>ZipArchive</code>から1件ずつ読む</td><td><code>ZipReadOptions</code>の<code>enforce_header_consistency(true)</code>を<code>by_name_with_options</code>に渡す</td><td>9.0.5以降</td></tr><tr><td><code>ZipArchive</code>でまとめて展開する</td><td><code>ExtractOptions::default().enforce_header_consistency(true)</code>を<code>extract_with_options</code>に渡す</td><td>9.1.0以降</td></tr></tbody></table></div><p>食い違いが見つかると、展開は<code>ZipError::InvalidArchive</code>で止まります。9.2.1の<code>validate_header_consistency()</code>は、目録に同じ名前が重複している場合も誤りを返します。<a href="#source-5">[5]</a></p><h2>cargo auditやDependabotで見つからないことがある</h2><p><code>cargo audit</code>は、RustSecのデータベースで<code>Cargo.lock</code>を調べます。11月1日時点で、RustSecにあるzipの記録は4件で、CVE-2026-115905は含まれていません。<code>cargo audit</code>で何も出なくても、対象外とは判断できません。<a href="#source-10">[10]</a></p><p>この件はGitHub Advisory DatabaseとOSVに載っていますが、9.0.5に残る2件は提供元のリポジトリにだけ公表されていて、11月1日時点でGitHub Advisory Databaseに収録されていません。OSVで9.0.5を調べても何も出ないため、これらを使う道具では9.0.5で解決と表示されることがあります。<code>Cargo.lock</code>の版を、提供元のアドバイザリの一覧と照らし合わせます。<a href="#source-2">[2]</a><a href="#source-7">[7]</a><a href="#source-8">[8]</a><a href="#source-11">[11]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Rustの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Rust</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Pillowの脆弱性、olefile入りの環境で細工したFlashPix画像を開くとコード実行のおそれ（CVE-2026-112398、修正は13.0.0）</title><link>https://humanhacker.ai/media/vuln-radar/pillow-fpx/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/pillow-fpx/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>PythonのPillowの脆弱性CVE-2026-112398は、olefileを入れた環境で細工したFlashPix画像をImage.openで開くと、ヒープの範囲外書き込みで任意のコード実行に至るおそれがあります。対象かの見分け方、13.0.0への更新、すぐ上げられないときの対処を説明します。</description><content:encoded><![CDATA[<p>PythonのPillowに、細工したFlashPix（FPX）形式の画像を<code>Image.open()</code>で開くと、ヒープ領域の範囲外にデータを書き込まれ、条件がそろえば任意のコードを実行されるおそれのある脆弱性（CVE-2026-112398、GHSA-5x8w-8jj5-q52h）が、2026年10月18日にPillowから公表されました（GitHub Advisory Databaseへの収録は10月24日、日本時間）。影響するかは、任意依存のolefileが入っているかで大きく変わります。</p><h2>Pillowの脆弱性で起きることと仕組み</h2><p>Pillowは、FPXファイルに含まれるJPEGのタイルを展開するとき、書き込み先のバッファを1画素あたり2バイト分で確保します。ところが、FPXが指すJPEGの色の形式をPillowが判別できないと、libjpegは1画素あたり4バイト（4成分）で書き出します。この結果、確保した2バイト分のバッファに4バイト分が書き込まれ、ヒープの範囲外への書き込みが起きます。書き込む長さ（画像の幅）と中身（画素のデータ）は、ファイルを作る側が決められます。<a href="#source-1">[1]</a></p><p>深刻度は、CVEの採番機関であるGitHubの評価でCVSS 4.0の9.2（緊急）です。NVDも同じ値を二次評価として載せています。弱点の分類はCWE-122（ヒープベースのバッファオーバーフロー）とCWE-787（範囲外への書き込み）です。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><figure><div><div><div><p><span>olefileがあると、</span><span>細工したFPXを開いたときに2バイト分の領域へ4バイト分が書き込まれる</span></p><p>受け取ったファイル、Pillowの中で展開する部品、起きることの順に並べる。</p></div><div><div><b>細工したFPXファイル</b><span>先頭の印（OLE2）でFPXと判定される。拡張子を.pngにしても同じ</span></div></div><div><span>↓</span><span>受け取ったファイルをImage.open()で開く</span></div><div><p><b>Pillow</b> 12.3.0以前とolefile</p><div><div><b>olefile</b><span>任意依存。入っているとFPXの読み込み機能が登録される</span></div><div><b>JPEGのタイルの展開</b><span>書き込み先のバッファを1画素2バイトで確保する</span></div><div><b>libjpeg</b><span>色の形式を判別できないJPEGを1画素4バイトで書き出す</span></div></div></div><div><span>↓</span><span>確保した2バイト分に4バイト分を書き込む</span></div><div><div><b>ヒープの範囲外への書き込み</b><span>書き込む長さと中身は、ファイルを作る側が決められる</span></div></div><div><span>↓</span><span>起きること（画像処理のプロセスの権限で）</span></div><div><div><b>クラッシュ・サービス停止</b><span>より起こりやすい結果</span></div><div><b>任意のコード実行</b><span>メモリ配置の前提がそろった場合</span></div></div><p>出典　Pillow「GHSA-5x8w-8jj5-q52h」（2026-10-18）</p></div></div></figure><h2>影響を受ける条件</h2><p>次の条件がすべてそろう環境が対象です。</p><ul><li>Pillowが12.3.0以前である（修正版は13.0.0）。<a href="#source-1">[1]</a></li><li>任意依存のolefileが入っている。PillowはFPXを読むのにolefileを使い、olefileが無い環境ではFPXの読み込み機能自体が登録されません。<a href="#source-1">[1]</a><a href="#source-7">[7]</a></li><li>外部から受け取ったファイルを<code>Image.open()</code>で開く（アップロード画像のサムネイル作成、アバターや文書の変換など）。形式はファイルの先頭の印（OLE2）で判定され、拡張子は見ません。<a href="#source-1">[1]</a></li></ul><p>対象の場合、受け取ったファイルを自動で開く処理で、利用者の操作なしに、画像処理を行うプロセスの権限でメモリを壊されます。条件がそろえば任意のコマンドの実行に至りますが、より起こりやすいのはクラッシュやサービス停止です。<a href="#source-1">[1]</a></p><h2>悪用の状況</h2><p>2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧（KEV）」には載っていません。</p><p>今後30日以内に悪用される確率の推定値（EPSS）は0.7%です（2026-11-01時点）。見込みは高くない部類ですが、推定値で、悪用されないことを保証するものではありません。</p><p>アドバイザリには、細工したFPXファイルを作るプログラム（PoC）と再現の手順が公開されています。ただし、報告者がコマンドの実行まで示したのは、ASLR（メモリ配置の乱数化）を無効にし、インタープリターが固定アドレスで動く検証用のDocker環境です。実環境で任意のコード実行まで持ち込むには、これらの前提をそろえる必要があり、CVSS 4.0で攻撃の難しさが「高」とされているのはこのためです。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>修正版の公開の翌日に公表され、</span><span>11月1日時点でKEVには載っていない</span></p><p>修正版の公開、Pillowの公表、データベースへの登録、悪用の状況の確認を並べる（日本時間）。</p></div><p><span></span>提供元（Pillow）　<span></span>データベース・公的機関</p><div><div><span></span><p>2026年10月17日</p><div><div><b>PyPIで13.0.0を公開</b><span>Python 3.11以上が必要</span></div></div></div><div><span></span><p>2026年10月18日</p><div><div><b>Pillowがアドバイザリを公表</b><span>細工したFPXを作るPoCと再現の手順も載せた。コマンドの実行まで示したのはASLRを無効にした検証用の環境</span></div><div><b>9.2</b><span>CVSS 4.0（GitHubの評価）</span></div></div></div><div><span></span><p>2026年10月20日</p><div><div><b>NVDにCVE-2026-112398を登録</b><span>二次評価として同じ9.2を載せている</span></div></div></div><div><span></span><p>2026年10月24日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>2026年11月1日</p><div><div><b>KEVに載っていない</b><span></span></div><div><b>0.7%</b><span>EPSS（30日以内の悪用の推定）</span></div></div></div></div><p>出典　Pillow「GHSA-5x8w-8jj5-q52h」（2026-10-18）、PyPI「Pillow 13.0.0」（2026-10-17）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-11-01確認）</p></div></div></figure><h2>対象のバージョンと推奨する版</h2><p>修正版は13.0.0です。Pillowは12.3.0以前が影響を受け、12系に修正版はありません。13.0.0（13系）へのメジャーバージョンの更新が必要です。配布元（PyPI）で公開済みの版で、確認日は2026年11月1日です。更新の前に、提供元のリリースノートで変更点を確かめてください。<a href="#source-6">[6]</a><a href="#source-7">[7]</a></p><div><table><thead><tr><th>系列</th><th>推奨する版</th><th>今回の脆弱性が直る版</th><th>最新版</th></tr></thead><tbody><tr><td>13系</td><td>13.0.0</td><td>13.0.0</td><td>13.0.0</td></tr></tbody></table></div><p>13.0.0はPython 3.10に対応しません。Python 3.10は2026年10月に提供が終わったためで、3.10で動かしている場合は、先にPython 3.11以上へ上げる必要があります。<a href="#source-6">[6]</a><a href="#source-7">[7]</a></p><p>13.0.0は、今回のFPXの問題と同時に、JPEG・TIFF・PDFなどの読み書きで見つかった約40件（緊急2件・高13件を含む）をまとめて直した版です。すぐに上げられない事情があるときは、次の節のolefileを外す対処も検討します。<a href="#source-7">[7]</a></p><figure><div><div><div><p><span>12系に修正版はなく、</span><span>13.0.0へ上げるまではolefileを外すとこの経路を断てる</span></p><p>13.0.0への更新と、すぐに上げられないときにolefileを外す対処を並べる。</p></div><div><div></div><div><b>olefileを外す</b><span>すぐに上げられないとき</span></div><div><b>13.0.0に上げる</b><span>修正版（最新も13.0.0）</span></div><div>今回の経路</div><div><span>FPXの読み込み機能が登録されず、届かない</span></div><div><span>直っている</span></div><div>同時に直る件</div><div><span>なし。FPXの経路だけを断つ</span></div><div><span>JPEG・TIFF・PDFなどの約40件（緊急2件・高13件を含む）</span></div><div>先に確かめること</div><div><span>FPXやMICを使っていない</span></div><div><span>Python 3.11以上で動かしている（3.10には対応しない）</span></div></div><div><b>だから</b>　Python 3.10や13系の互換性の確認で上げられない間は、FPXを使っていなければolefileを外し、13.0.0へ上げる。</div><p>出典　Pillow「GHSA-5x8w-8jj5-q52h」（2026-10-18）、同「13.0.0 release notes」（2026-11-01確認）</p></div></div></figure><h2>Pillowがどこから入っているか確かめて上げる手順</h2><ol><li><p>使っている版と、どのパッケージが連れてきているか（Required-byの行）を確認します。依存はrequirements.txt・poetry.lock・uv.lockにも記録されています。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip show pillow</code></pre></div></li><li><p>任意依存のolefileが入っているかを確認します。「見つからない（Package(s) not found）」なら、FPXの経路には届きません。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip show olefile</code></pre></div></li><li><p>olefileが入っている場合、Pillowが実際にFPXを開ける状態かを確認します。Trueなら、受け取ったファイルをImage.open()に渡す箇所が対象になりえます。</p><div><div><span>ターミナル</span></div><pre><code>python -c &quot;from PIL import Image; Image.init(); print('FPX' in Image.OPEN)&quot;</code></pre></div></li><li><p>13.0.0はPython 3.11以上が必要です。実行中のPythonの版を確認します。</p><div><div><span>ターミナル</span></div><pre><code>python -V</code></pre></div></li><li><p>13.0.0以上へ更新します。間接依存で入っている場合は制約ファイルで下限を指定し、uvやPoetryでは各ツールの行でlockを更新します。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip install --upgrade &quot;pillow&gt;=13.0.0&quot;
# 間接依存のとき
echo &quot;pillow&gt;=13.0.0&quot; &gt;&gt; constraints.txt &amp;&amp; python -m pip install -r requirements.txt -c constraints.txt
uv lock --upgrade-package pillow
poetry update pillow</code></pre></div></li><li><p>読み込まれる版を確かめます。本番の成果物（コンテナイメージなど）でも更新後の版か確認し、受け取ったファイルをそのまま開いている箇所も探します。</p><div><div><span>ターミナル</span></div><pre><code>python -c &quot;import PIL; print(PIL.__version__)&quot;
grep -rn &quot;Image.open&quot; --include=&quot;*.py&quot; .</code></pre></div></li></ol><h2>すぐに更新できないときの対処</h2><p>GitHub Advisoryに回避策の節はありません。次は、公表された成立条件から導ける緩和策です。<a href="#source-1">[1]</a></p><ul><li>olefileを外せるか確認する。olefileが無ければFPXの読み込み機能は登録されず、この経路には届きません。FPXやMIC形式を扱っていなければ、依存から外すことを検討します。<a href="#source-1">[1]</a><a href="#source-7">[7]</a></li><li><code>Image.open()</code>の<code>formats</code>引数で、受け付ける形式を実際に使うものだけに絞る（一般的な緩和策）。<a href="#source-1">[1]</a></li></ul><h2>拡張子では防げない理由と、経路の断ち方</h2><p>Pillowは、ファイルの拡張子ではなく先頭の数バイト（OLE2の印）でFPXと判定します。そのため、<code>.jpg</code>や<code>.png</code>に見せかけたファイルでも、olefileが入っていればFPXとして展開されます。アップロードの受け口で拡張子やContent-Typeだけを確認していても、この経路は塞げません。<a href="#source-1">[1]</a></p><p>すぐに13.0.0へ上げられない事情（Python 3.10を使っている、13系の互換性の確認が終わっていない、など）があるときは、olefileを外してFPXの読み込み自体を無効にする対処が、影響の範囲を狭めたうえで経路を断てます。FPXやMICを使っていないことを確かめてから外します。<a href="#source-1">[1]</a><a href="#source-7">[7]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Pythonの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Python</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>snappy-javaの脆弱性CVE-2026-93451、型付き配列への展開でヒープ破壊のおそれ。Kafka・Sparkの下で古い版が残る場合の確かめ方</title><link>https://humanhacker.ai/media/vuln-radar/snappy-java/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/snappy-java/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>Java向けの圧縮ライブラリsnappy-javaの脆弱性CVE-2026-93451（GHSA-gwq9-9ffj-mvrv）は、uncompressIntArrayなどで配列の末尾を越えて書き込みます。上げる先は1.1.10.10以上です。Kafka・Spark・Hadoopが古い版を指定している場合の確かめ方と、版の指定の仕方を説明します。</description><content:encoded><![CDATA[<p>Java向けの圧縮ライブラリsnappy-javaで、型付き配列に展開するメソッドがJavaの配列の末尾を越えて書き込む脆弱性CVE-2026-93451が、2026年10月4日に提供元から公表されました。修正版は1.1.10.9ですが、同じ版に別の2件が残るため、上げる先は1.1.10.10以上です。snappy-javaはKafkaやSpark、Hadoopの依存として入っていることがあり、それらの最新版も古いsnappy-javaを指定しています。</p><h2>snappy-javaのCVE-2026-93451で起きること</h2><p>提供元のアドバイザリによると、<code>Snappy.uncompressCharArray</code>・<code>uncompressShortArray</code>・<code>uncompressIntArray</code>・<code>uncompressLongArray</code>・<code>uncompressFloatArray</code>・<code>uncompressDoubleArray</code>は、圧縮データに書かれた展開後の大きさ（バイト数）を要素の大きさで割って配列を用意していました。一方、ネイティブのコードはバイト数をそのまま書き込みます。展開後の大きさが要素の大きさの倍数でないと、配列の末尾を最大7バイト越えて書き込み、Javaのヒープを壊します。<a href="#source-1">[1]</a></p><p>深刻度は、提供元の評価でCVSS 3.1の7.5（可用性への影響が高）です。CVEを採番したVulnCheckは、CVSS 4.0で6.9、CVSS 3.1で6.5と評価し、書き込む内容を攻撃者が制御できるとしています。NVDは11月1日時点で独自の評価をしていません。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><p>報告のissue（#729）は日本時間の9月14日に公開され、VulnCheckのCVEの記録は9月18日に公開されました。提供元のアドバイザリの公表は10月4日、GitHub Advisory Databaseへの収録は10月28日です。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-3">[3]</a><a href="#source-4">[4]</a></p><figure><div><div><div><p><span>型付き配列のメソッドは要素の数で配列を用意し、</span><span>ネイティブのコードはバイト数のまま書き込む</span></p><p>提供元のアドバイザリが示す仕組みを、受け取るデータ・展開の部品・起きることの順に並べる。</p></div><div><div><b>外部から受け取った圧縮データ</b><span>展開後の大きさを、要素の大きさの倍数からずらす</span></div></div><div><span>↓</span><span>uncompressIntArrayなど6つのメソッドで展開</span></div><div><p><b>snappy-java</b> 1.1.10.8以下</p><div><div><b>配列の用意</b><span>展開後のバイト数を要素の大きさで割って配列を作る</span></div><div><b>ネイティブのコード</b><span>展開後のバイト数をそのまま書き込む</span></div></div></div><div><span>↓</span><span>倍数でないと</span></div><div><div><b>配列の末尾を最大7バイト越えて書き込む</b></div></div><div><span>↓</span><span>起きること</span></div><div><div><b>Javaのヒープの破壊</b><span>VulnCheckは、書き込む内容を攻撃者が制御できるとしている</span></div><div><b>可用性への影響が高</b><span>提供元の評価はCVSS 3.1の7.5</span></div></div><p>出典　xerial「GHSA-gwq9-9ffj-mvrv」（2026-10-04）、NVD「CVE-2026-93451」（2026-09-18）</p></div></div></figure><h2>snappy-javaの脆弱性の対象になる使い方</h2><p>この件の対象は、外部から受け取ったデータ、または外部の影響を受けるデータを、上の6つのメソッドで展開している場合です。<code>Snappy.uncompress(byte[])</code>や<code>SnappyInputStream</code>など、他の展開の方法はこの件の対象として書かれていません。<a href="#source-1">[1]</a></p><p>ただし、同じ1.1.10.9では、<code>Snappy.uncompress(ByteBuffer, ByteBuffer)</code>の範囲外の書き込み（CVE-2026-90559）や、圧縮データで宣言された大きさのまま最大2GBのメモリを確保してしまう問題（GHSA-q233-g92q-qxp6、<code>SnappyInputStream</code>なども対象）も直っています。型付き配列のメソッドを使っていなくても、上げる理由は残ります。<a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><h2>悪用の状況</h2><p>2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧（KEV）」には載っていません。</p><p>今後30日以内に悪用される確率の推定値（EPSS）は0.3%です（2026-11-01時点）。見込みは高くない部類ですが、推定値で、悪用されないことを保証するものではありません。</p><p>報告のissue（#729）には、展開後の大きさをずらした圧縮データで書き込みを再現するコード（PoC）が公開されています。当社はPoCを検証していません。CISAのコーディネーターがCVEの記録に付けた評価（SSVC）は、9月21日時点で悪用「なし」です。<a href="#source-3">[3]</a><a href="#source-4">[4]</a></p><figure><div><div><div><p><span>報告とCVEの記録が9月に先に公開され、</span><span>修正版とアドバイザリは10月に出た</span></p><p>報告の公開から、修正版、データベースへの収録、悪用の状況の確認までを並べる（日本時間）。</p></div><p><span></span>提供元（xerial）　<span></span>報告者・データベース・公的機関</p><div><div><span></span><p>2026年9月14日</p><div><div><b>報告のissue #729を公開</b><span>展開後の大きさをずらした圧縮データで書き込みを再現するPoCを含む</span></div></div></div><div><span></span><p>2026年9月18日</p><div><div><b>VulnCheckがCVEの記録を公開</b><span>9月21日時点のCISAのSSVCの評価は悪用「なし」</span></div><div><b>6.9</b><span>CVSS 4.0（VulnCheckの評価）</span></div></div></div><div><span></span><p>2026年10月3日</p><div><div><b>Maven Centralで1.1.10.9を公開</b><span></span></div></div></div><div><span></span><p>2026年10月4日</p><div><div><b>提供元がアドバイザリを公表し、1.1.10.10を公開</b><span>1.1.10.9に残る2件も同じ日に公表</span></div><div><b>7.5</b><span>CVSS 3.1（提供元の評価）</span></div></div></div><div><span></span><p>2026年10月28日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>2026年11月1日</p><div><div><b>KEVに載っていない</b><span></span></div><div><b>0.3%</b><span>EPSS（30日以内の悪用の推定）</span></div></div></div></div><p>出典　xerial「GHSA-gwq9-9ffj-mvrv」（2026-10-04）、同「issue #729」（2026-09-14）、NVD「CVE-2026-93451」（2026-09-18）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-11-01確認）</p></div></div></figure><h2>snappy-javaの対象の版と推奨する版</h2><p>版ごとの状態は次のとおりです（11月1日時点、Maven Centralの最新は1.1.10.12）。<a href="#source-1">[1]</a><a href="#source-7">[7]</a><a href="#source-8">[8]</a><a href="#source-9">[9]</a><a href="#source-13">[13]</a><a href="#source-14">[14]</a></p><div><table><thead><tr><th>版</th><th>今回の件</th><th>他の公表済みの件</th><th>Hadoop互換の圧縮</th></tr></thead><tbody><tr><td>1.1.10.8以下</td><td>対象</td><td>対象</td><td>—</td></tr><tr><td>1.1.10.9</td><td>直っている</td><td>「高」の2件が残る</td><td>失敗する場合がある</td></tr><tr><td>1.1.10.10</td><td>直っている</td><td>直っている</td><td>失敗する場合がある</td></tr><tr><td>1.1.10.11</td><td>直っている</td><td>直っている</td><td>一部が直った</td></tr><tr><td>1.1.10.12</td><td>直っている</td><td>直っている</td><td>直っている</td></tr></tbody></table></div><p>1.1.10.9に残る2件は、<code>SnappyFramedInputStream</code>が確保に失敗したときにバッファを二重に返し、別のストリームと同じ配列を共有してしまうおそれ（GHSA-c73m-r934-8qvg）と、<code>SnappyInputStream</code>の再帰による異常終了と大きなメモリの確保（GHSA-6gp7-6wmv-gxqw）で、いずれも1.1.10.10で直りました。1.1.10.9は日本時間の10月3日、1.1.10.10は10月4日にMaven Centralへ公開されています。Hadoop互換の圧縮の不具合は、よくある質問で説明します。<a href="#source-7">[7]</a><a href="#source-8">[8]</a><a href="#source-9">[9]</a></p><figure><div><div><div><p><span>1.1.10.9には「高」の2件が残り、</span><span>Hadoopの圧縮まで直ったのは1.1.10.12</span></p><p>版ごとに、今回の件、他の公表済みの件、Hadoop互換の圧縮の状態を並べる（11月1日時点）。</p></div><div><div><b>1.1.10.8以下</b><span>kafka-clients 4.4.0・Spark 4.3.0の指定もここ</span><div><span>今回の件（CVE-2026-93451）</span><span>対象</span></div><div><span>他の公表済みの件</span><span>対象</span></div><div><span>Hadoop互換の圧縮</span><span>失敗の原因になった範囲の確認が入る前</span></div></div><div><b>1.1.10.9</b><span>今回の件の修正版</span><div><span>今回の件（CVE-2026-93451）</span><span>直っている</span></div><div><span>他の公表済みの件</span><span>GHSA-c73m-r934-8qvgとGHSA-6gp7-6wmv-gxqwが残る</span></div><div><span>Hadoop互換の圧縮</span><span>失敗する場合がある</span></div></div><div><b>1.1.10.10以上</b><span>最新は1.1.10.12</span><div><span>今回の件（CVE-2026-93451）</span><span>直っている</span></div><div><span>他の公表済みの件</span><span>1.1.10.10で直った</span></div><div><span>Hadoop互換の圧縮</span><span>1.1.10.11で一部、1.1.10.12で直った</span></div></div></div><div><b>だから</b>　1.1.10.10以上、Hadoopの圧縮を使うなら1.1.10.12を、pom.xmlやGradleで直接指定する。</div><p>出典　xerial「GHSA-gwq9-9ffj-mvrv」「GHSA-c73m-r934-8qvg」「GHSA-6gp7-6wmv-gxqw」（2026-10-04）、同「PR #768」（2026-10-10）、Maven Central（2026-11-01確認）</p></div></div></figure><h2>snappy-javaの版を確かめて指定する手順</h2><ol><li><p>Mavenでは、snappy-javaの版と、どのライブラリを通じて入っているかを確かめます。</p><div><div><span>ターミナル</span></div><pre><code>mvn dependency:tree -Dincludes=org.xerial.snappy:snappy-java</code></pre></div></li><li><p>Gradleでは、実行時に使われる版と、そう決まった理由を確かめます。</p><div><div><span>ターミナル</span></div><pre><code>./gradlew dependencyInsight --dependency org.xerial.snappy:snappy-java --configuration runtimeClasspath</code></pre></div></li><li><p>自分のコードで、型付き配列のメソッドを使っている箇所を探します。</p><div><div><span>ターミナル</span></div><pre><code>grep -rn -E 'uncompress(Char|Short|Int|Long|Float|Double)Array' --include='*.java' --include='*.kt' --include='*.scala' .</code></pre></div></li><li><p>Mavenでは、<code>dependencyManagement</code>で版を指定すると、間接的に入るsnappy-javaもその版になります。</p><div><div><span>pom.xml</span></div><pre><code>&lt;dependencyManagement&gt;
  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.xerial.snappy&lt;/groupId&gt;
      &lt;artifactId&gt;snappy-java&lt;/artifactId&gt;
      &lt;version&gt;1.1.10.12&lt;/version&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/dependencyManagement&gt;</code></pre></div></li><li><p>Gradleでは、依存の制約（constraints）で版を指定します。Gradleは、制約と他のライブラリの指定のうち高い版を選びます。</p><div><div><span>build.gradle.kts</span></div><pre><code>dependencies {
    constraints {
        implementation(&quot;org.xerial.snappy:snappy-java:1.1.10.12&quot;)
    }
}</code></pre></div></li><li><p>もう一度版を確かめ、アプリやコンテナのイメージを作り直します。Kafka・Spark・Hadoopを使う場合は、圧縮と展開の動作もテストで確かめます。</p><div><div><span>ターミナル</span></div><pre><code>mvn dependency:tree -Dincludes=org.xerial.snappy:snappy-java</code></pre></div></li></ol><h2>すぐに上げられないとき</h2><p>提供元のアドバイザリは回避策として、これらのメソッドを呼ぶ前に、<code>Snappy.uncompressedLength(input)</code>が要素の大きさの倍数かを確かめることを示しています。要素の大きさは、<code>char</code>・<code>short</code>が2、<code>int</code>・<code>float</code>が4、<code>long</code>・<code>double</code>が8バイトです。<a href="#source-1">[1]</a></p><p>この回避策で防げるのは今回の件だけで、同じ版で直った他の件は防げません（当社の整理）。上のライブラリの都合で上げられない場合も、次の節の方法でsnappy-javaの版だけを指定できることがあります。</p><h2>Kafka・Spark・Hadoopを上げても、snappy-javaは古いまま残る</h2><p>snappy-javaは、圧縮を扱うJavaのライブラリの依存として入ります。Maven Centralに登録された主なライブラリの指定は、11月1日時点で次のとおりで、いずれも対象の版です。<a href="#source-10">[10]</a><a href="#source-11">[11]</a><a href="#source-12">[12]</a></p><div><table><thead><tr><th>ライブラリと版</th><th>指定しているsnappy-java</th></tr></thead><tbody><tr><td>Apache Kafkaのクライアント（kafka-clients）4.4.0</td><td>1.1.10.7</td></tr><tr><td>Apache Spark（spark-core_2.13）4.3.0</td><td>1.1.10.8</td></tr><tr><td>Apache Parquet（parquet-hadoop）1.18.1</td><td>1.1.10.8</td></tr><tr><td>Apache Hadoop 3.5.0</td><td>1.1.10.4</td></tr></tbody></table></div><p>Kafkaは開発中のリポジトリで1.1.10.11に上げていますが、公開済みの4.4.0には入っていません。Mavenは、依存の木で近い指定を優先して版を決めます。自分の<code>pom.xml</code>でsnappy-javaの版を指定しない限り、これらのライブラリの指定が使われます。<a href="#source-10">[10]</a><a href="#source-15">[15]</a><a href="#source-16">[16]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Java / JVMの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Java / JVM</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>better-authの脆弱性、OAuthのstateをMagic Linkとして使われ他人としてサインインされるおそれ（CVE-2026-114607、修正は1.7.7）</title><link>https://humanhacker.ai/media/vuln-radar/better-auth-magic-link/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/better-auth-magic-link/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>認証ライブラリbetter-authの脆弱性CVE-2026-114607は、Magic LinkとOAuthを併用する構成で、OAuthのstateをMagic Linkのトークンに流用され、他人としてサインインされるおそれがあります。対象かを設定で見分ける方法、1.7.7への更新と段取りを説明します。</description><content:encoded><![CDATA[<p>認証ライブラリのbetter-authに、OAuthのサインインで発行されるstate（途中の状態を表す値）を、Magic Linkのトークンとしても受け付けてしまう脆弱性（CVE-2026-114607、GHSA-965c-763c-88jm）が、2026年10月1日にbetter-authから公表されました（GitHub Advisory Databaseへの収録は10月28日、日本時間）。対象になるかは、Magic LinkとOAuthの設定の組み合わせで決まります。</p><h2>better-authの脆弱性で起きることと仕組み</h2><p>攻撃者は、ねらった相手のメールアドレスで社外のOAuthサインインを始め、返ってきたstateの値を、そのアドレスのMagic Linkサインインの確認に送ります。better-authは、OAuthのstateとMagic Linkのトークンを同じ保存先に同じ識別子で記録していたため、Magic Linkの処理が両者を区別できませんでした。結果として、攻撃者はメールを受け取れることを証明しないまま、その利用者としてサインインできます。<a href="#source-1">[1]</a></p><p>深刻度は、CVEの採番機関であるGitHub（GitHub_M）の評価でCVSS 3.1の9.1（緊急）です。この問題には、VulnCheckが別にCVE-2026-110862を採番し、CVSS 4.0で9.3（緊急）と評価しています。弱点の分類はCWE-287（不適切な認証）です。<a href="#source-1">[1]</a><a href="#source-3">[3]</a><a href="#source-4">[4]</a></p><figure><div><div><div><p><span>OAuthのstateとMagic Linkのトークンが同じ保存先に並び、</span><span>stateでサインインできてしまう</span></p><p>アドバイザリが示す手順を、攻撃者の操作・better-authの中の保存先・起きることの順に並べる。</p></div><div><div><b>攻撃者</b><span>ねらった相手のメールアドレスで、社外のOAuthサインインを始める</span></div></div><div><span>↓</span><span>返ってきたstateを、そのアドレスのMagic Linkの確認に送る</span></div><div><p><b>better-auth</b> 1.4.0-beta.18以上1.7.7未満</p><div><div><b>OAuthのstate</b><span>データベースに保存する（storeStateStrategy: &quot;database&quot;）</span></div><div><b>Magic Linkのトークン</b><span>stateと同じ保存先に、同じ識別子で記録する</span></div><div><b>Magic Linkの確認</b><span>stateとトークンを区別できない</span></div></div></div><div><span>↓</span><span>メールを受け取れる証明なしに</span></div><div><div><b>その利用者のセッションを得る</b><span>アカウントの権限をすべて使える</span></div></div><div><span>↓</span><span>起きること</span></div><div><div><b>既存のアカウントの乗っ取り</b><span>メールボックスやOAuth提供元へのアクセスは要らない</span></div><div><b>確認済みのアカウントの作成</b><span>Magic Linkでの新規登録が有効で、そのアドレスの利用者がまだいない場合</span></div><div><b>権限の広がり</b><span>確認済みのメールアドレスやドメインを信頼して権限を与えるアプリ</span></div></div><p>出典　better-auth「GHSA-965c-763c-88jm」（2026-10-01）</p></div></div></figure><h2>影響を受ける条件</h2><p>アドバイザリは、次がすべて当てはまる構成を対象としています。独自のハッシュ関数を使っている場合は、Magic LinkとOAuthのstateが同じ保存値にならないかを確かめます。</p><ul><li>better-authが1.4.0-beta.18以上、1.7.7未満である。<a href="#source-1">[1]</a></li><li>Magic Linkプラグインが有効で、トークンの保存が既定の<code>storeToken: &quot;plain&quot;</code>、または<code>&quot;hashed&quot;</code>かつ全体の<code>verification.storeIdentifier</code>も<code>&quot;hashed&quot;</code>になっている。<a href="#source-1">[1]</a></li><li>組み込みのソーシャルログイン、またはGeneric OAuthが有効である。<a href="#source-1">[1]</a></li><li>OAuthのstateをデータベースに保存している（<code>account.storeStateStrategy: &quot;database&quot;</code>。データベースまたはセカンダリストレージを設定したときの既定）。stateをCookieに保存している場合、この経路は塞がれます（ただし後述のOAuth Proxyの条件に注意）。<a href="#source-1">[1]</a></li></ul><p>対象の場合、認証していない攻撃者が、相手のメールアドレスを知っているだけでその利用者のセッションを得て、アカウントの権限をすべて使えます。メールボックスやOAuth提供元へのアクセスは要りません。Magic Linkでの新規登録が有効で、そのアドレスの利用者がまだいなければ、「メール確認済み」と誤って記録されたアカウントを作られます。確認済みのメールアドレスやドメインを信頼して権限を与えるアプリでは、影響が広がります。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>4つの条件がすべてそろうと対象になり、</span><span>どれか1つを外せばこの経路は塞がれる</span></p><p>アドバイザリが挙げる対象の条件と、1.7.7に上げるまでの回避策を、項目ごとに並べる。</p></div><div><div></div><div><b>対象になる構成</b></div><div><b>この経路が塞がれる構成</b></div><div>版</div><div><span>1.4.0-beta.18以上1.7.7未満</span></div><div><span>1.7.7以上</span></div><div>Magic Linkのトークンの保存</div><div><span>既定のstoreToken: &quot;plain&quot;、またはhashedで全体のverification.storeIdentifierもhashed</span></div><div><span>storeTokenがhashedで、全体のstoreIdentifierは未設定かplain</span></div><div>サインインの方法</div><div><span>Magic Linkと、組み込みのソーシャルログインかGeneric OAuthの両方が有効</span></div><div><span>Magic Link、またはソーシャル・Generic OAuthのサインインを止める</span></div><div>OAuthのstateの保存先</div><div><span>database（データベースかセカンダリストレージを設定したときの既定）</span></div><div><span>cookie。OAuth Proxyを使うなら先に専用のsecretを分ける</span></div></div><div><b>だから</b>　1.7.7以上に上げる。Magic LinkのdisableSignUp: trueだけでは、既存のアカウントの乗っ取りを防げない。</div><p>出典　better-auth「GHSA-965c-763c-88jm」（2026-10-01）</p></div></div></figure><h2>悪用の状況</h2><p>2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧（KEV）」には載っていません。</p><p>今後30日以内に悪用される確率の推定値（EPSS）は0.4%です（2026-11-01時点）。見込みは高くない部類ですが、推定値で、悪用されないことを保証するものではありません。</p><p>アドバイザリに再現用のコード（PoC）の公開はありません。KEVには載っておらず、実際の悪用の報告もありません。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>公表と同じ日に1.7.7がnpmで公開され、</span><span>11月1日時点でKEVには載っていない</span></p><p>better-authの公表から、データベースへの登録、悪用の状況の確認までを並べる（日本時間）。</p></div><p><span></span>提供元（better-auth）　<span></span>データベース・公的機関</p><div><div><span></span><p>2026年10月1日</p><div><div><b>better-authがアドバイザリを公表し、npmで1.7.7を公開</b><span>OAuth Proxyで別人としてサインインできる問題も同じ版で直した。PoCの公開は無い</span></div><div><b>9.1</b><span>CVSS 3.1（GitHubの評価）</span></div></div></div><div><span></span><p>2026年10月23日</p><div><div><b>NVDにCVE-2026-114607を登録</b><span>同じ日にアドバイザリも更新された</span></div></div></div><div><span></span><p>2026年10月28日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>2026年11月1日</p><div><div><b>KEVに載っていない</b><span>実際の悪用の報告も無い。npmの最新は1.7.15</span></div><div><b>0.4%</b><span>EPSS（30日以内の悪用の推定）</span></div></div></div></div><p>出典　better-auth「GHSA-965c-763c-88jm」（2026-10-01）、NVD「CVE-2026-114607」（2026-10-23）、米CISA「Known Exploited Vulnerabilities Catalog」（2026-11-01確認）</p></div></div></figure><h2>対象のバージョンと推奨する版</h2><p>修正版は1.7.7です。1.4.0-beta.18以上1.7.7未満が影響を受けます。配布元（npm）で公開済みの版で、確認日は2026年11月1日です。1.7.7はアドバイザリと同じ2026年10月1日（日本時間）にnpmで公開されています（アドバイザリ本文には公表時点で未公開とありますが、収録までに公開されました）。更新の前に、提供元のリリースノートで変更点を確かめてください。<a href="#source-1">[1]</a><a href="#source-7">[7]</a><a href="#source-8">[8]</a></p><div><table><thead><tr><th>系列</th><th>推奨する版</th><th>今回の脆弱性が直る版</th><th>最新版</th></tr></thead><tbody><tr><td>1.7系</td><td>1.7.7</td><td>1.7.7</td><td>1.7.15（2026年11月1日）</td></tr></tbody></table></div><p>1.7.7は、今回のMagic Linkの問題と同時に、OAuth Proxyで別人としてサインインできる問題（高）も直しています。<a href="#source-1">[1]</a><a href="#source-8">[8]</a><a href="#source-10">[10]</a></p><h2>better-authがどこから入っているか確かめて上げる手順</h2><ol><li><p>使っている版と、どのパッケージが連れてきているかを確認します。依存はpackage-lock.json・yarn.lock・pnpm-lock.yamlにも記録されています。</p><div><div><span>ターミナル</span></div><pre><code>npm ls better-auth</code></pre></div></li><li><p>対象の構成かを設定で確かめます。Magic Linkの指定、storeToken、verification.storeIdentifier、account.storeStateStrategyの指定を探します（指定が無ければ既定値で判断します）。</p><div><div><span>ターミナル</span></div><pre><code>grep -rn -E &quot;magicLink|storeToken|storeStateStrategy|storeIdentifier&quot; --include=&quot;*.ts&quot; --include=&quot;*.js&quot; .</code></pre></div></li><li><p>1.7.7以上へ更新します。別に入れている@better-auth/のアダプター・プラグインも同じ版にそろえます。</p><div><div><span>ターミナル</span></div><pre><code>npm install better-auth@1.7.7</code></pre></div></li><li><p>間接依存で入っている場合は、package.jsonのoverridesで版を固定して入れ直します（yarnはresolutions、pnpmはpnpm.overrides）。</p><div><div><span>package.json</span></div><pre><code>&quot;overrides&quot;: {
  &quot;better-auth&quot;: &quot;1.7.7&quot;
}</code></pre></div></li><li><p>更新後の版を確かめます。更新すると既存のMagic Linkと途中のサインインは無効になるため、利用者への案内も用意します。</p><div><div><span>ターミナル</span></div><pre><code>npm ls better-auth</code></pre></div></li></ol><h2>すぐに更新できないときの対処</h2><p>更新できるまでの間は、アドバイザリが挙げる次のいずれかで緩和します。<a href="#source-1">[1]</a></p><ul><li><code>account.storeStateStrategy</code>を<code>&quot;cookie&quot;</code>にする。OAuth Proxyを使う場合は、先に各環境の全体用の秘密鍵とは別の専用<code>secret</code>を、関係するすべての環境に設定します（共有したままだと別の乗っ取り経路が開きます）。<a href="#source-1">[1]</a></li><li>Magic Linkの<code>storeToken</code>を<code>&quot;hashed&quot;</code>にし、全体の<code>verification.storeIdentifier</code>は未設定か<code>&quot;plain&quot;</code>にする。<a href="#source-1">[1]</a></li><li>Magic Link、またはソーシャル・Generic OAuthのサインインを止める。<a href="#source-1">[1]</a></li></ul><p>Magic Linkの<code>disableSignUp: true</code>だけでは足りません。新しい確認済みアカウントの作成は止まりますが、既存アカウントの乗っ取りは防げません。<a href="#source-1">[1]</a></p><h2>1.7.7へ上げるときの段取り</h2><p>更新すると、それまでに発行したMagic Linkと、処理の途中だったOAuthサインインのstate・SAMLの途中状態は使えなくなります。利用者はサインインやアカウント連携をやり直すことになります。データベースのスキーマ移行は要りません。<a href="#source-1">[1]</a><a href="#source-8">[8]</a></p><p>別に入れている<code>@better-auth/</code>のアダプター・プラグイン（例：<code>@better-auth/drizzle-adapter</code>）は、本体と同じ版にそろえて更新します。検証用の保存先を共有する複数のサーバーや、OAuth Proxyに参加するすべての環境（本番・プレビュー・開発）は、同じタイミングで切り替えます。混在すると途中状態をやり取りできません。<a href="#source-1">[1]</a><a href="#source-8">[8]</a></p><p>1.6系から上げる場合は、1.7系で入った設定・スキーマの変更（アカウントのissuer必須化、Generic OAuthの書き換え、OIDC/MCPプラグインの分離など）があります。1.7系に修正版が出ているため、1.6系に留まったままの対処はありません。提供元の1.7アップグレード手順に沿って進めます。<a href="#source-9">[9]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、JavaScript / TypeScriptの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>JavaScript / TypeScript</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>LiteLLMの脆弱性、内部ユーザーが管理者に昇格するおそれ。KEVの認証不備と不正な1.107.0もバージョンで確かめる</title><link>https://humanhacker.ai/media/vuln-radar/litellm/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/litellm/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>LiteLLMのプロキシに、internal_userの権限から管理者に昇格してコマンドを実行できる脆弱性CVE-2026-114612。KEVに載った認証不備CVE-2026-59822と、10月21日に配布された不正な1.107.0を、使っている版で切り分ける手順と、上げる先の版を説明します。</description><content:encoded><![CDATA[<p>複数のAIサービスのAPIを1つの窓口にまとめるLiteLLMのプロキシで、内部ユーザーの権限から管理者に昇格し、ホスト上でコマンドを実行できる脆弱性（CVE-2026-114612）が、2026年9月30日にLiteLLMから公表されました。LiteLLMでは、MCPの認証不備（CVE-2026-59822）が9月2日に米CISAの悪用確認の一覧（KEV）に載り、10月21日には中身を差し替えた不正な1.107.0が約2時間配布されました。どれに当たるかは、使っている版で切り分けます。</p><h2>LiteLLMの脆弱性2件で起きることと仕組み</h2><p>今回の2件の脆弱性は、どちらもLiteLLMのプロキシの認証の問題です。<a href="#source-1">[1]</a><a href="#source-2">[2]</a></p><p><mark>CVE-2026-114612は、internal_userの権限を持つ利用者がproxy_adminに昇格できる問題です。</mark>公式の説明では、プロキシは保存する秘密情報の暗号化と、セッションのトークンの発行に同じ鍵を使っていました。偽の管理者情報を入れたAPIキーを作らせ、暗号化されて返った値をトークンとして示すと、管理者として扱われます。管理者になると、MCPのstdioのエンドポイントからホスト上でコマンドを実行できます。深刻度はLiteLLMの評価でCVSS 3.1の9.9（緊急）で、GitHub Advisory DatabaseはCVSS 4.0の7.7も付けています。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><p>CVE-2026-59822は、MCPのStreamable HTTPのエンドポイントで、LiteLLMのキーの確認に失敗しても、空の認証情報で処理が続いた問題です。任意のBearerトークンを付けた認証なしの要求で、設定済みのMCPのツールを一覧・呼び出しできるおそれがあります。深刻度はLiteLLMの評価でCVSS 4.0の8.8、NVDの評価でCVSS 3.1の8.2（重要）です。<a href="#source-2">[2]</a><a href="#source-4">[4]</a></p><figure><div><div><div><p><span>2件とも、</span><span>プロキシの認証の不備から管理者の操作やMCPのツールに届く</span></p><p>LiteLLMのアドバイザリにある2件の仕組みを、入口・認証の不備・起きることの順に並べる。</p></div><div><div><span>CVE-2026-114612</span><b>internal_userの利用者</b><span>偽の管理者情報を入れたAPIキーを作らせ、返った値をトークンとして示す</span></div><div><span>CVE-2026-59822</span><b>認証なしの要求</b><span>任意のBearerトークンを付けて、MCPのStreamable HTTPのエンドポイントへ送る</span></div></div><div><span>↓</span><span>プロキシへ要求</span></div><div><p><b>LiteLLM</b>のプロキシの認証</p><div><div><b>同じ鍵の使い回し</b><span>保存する秘密情報の暗号化と、セッションのトークンの発行に同じ鍵を使っていた</span></div><div><b>確認の失敗を通す</b><span>キーの確認に失敗しても、空の認証情報で処理が続いた</span></div></div></div><div><span>↓</span><span>認証を通過</span></div><div><div><b>proxy_adminとして扱われる</b><span>MCPのstdioのエンドポイントから、ホスト上でコマンドを実行できる</span></div><div><b>MCPのツールを使われる</b><span>設定済みのMCPのツールを一覧・呼び出しできる</span></div></div><div><span>↓</span><span>深刻度</span></div><div><div><span>CVE-2026-114612</span><b>CVSS 3.1の9.9</b><span>LiteLLMの評価。GitHub Advisory DatabaseはCVSS 4.0の7.7</span></div><div><span>CVE-2026-59822</span><b>CVSS 4.0の8.8</b><span>LiteLLMの評価。NVDの評価はCVSS 3.1の8.2</span></div></div><p>出典　LiteLLM「GHSA-7hp6-4w63-5g45」（2026-09-30）、同「GHSA-7488-6r32-c95q」（2026-07-01）</p></div></div></figure><h2>LiteLLMの脆弱性の影響を受ける条件</h2><p>LiteLLMは、プロキシとして起動すると、利用者ごとのAPIキーを発行・管理する窓口になります。SDKとしてだけ使う場合の扱いは、アドバイザリに書かれていません。<a href="#source-1">[1]</a><a href="#source-2">[2]</a></p><h2>10月21日の不正な1.107.0は、脆弱性とは別に確かめる</h2><p>10月21日の件は、コードの不具合ではなく、配布物の差し替えです。LiteLLMの告知によると、PyPIの1.107.0は日本時間の20時39分から22時23分まで公開されていました。Docker HubとGHCRのイメージ（タグはv1.107.0、latest、main-latest、main-stable）も、20時46分から最長で23時20分まで不正なものを指していました。GitHubのv1.107.0のソースに不正なファイルは無く、プライベートのエンタープライズ版も影響を受けていないと説明しています。侵入の経路は、10月23日の続報で一部が訂正されています。<a href="#source-5">[5]</a><a href="#source-7">[7]</a></p><p><mark>不正なファイルはPythonの起動時に読み込まれるため、LiteLLMを読み込まないプログラムでも動きます。</mark>提供元は、外部に通信できる環境で1.107.0を入れた場合は持ち出しが成功したと考えるよう求めています。その環境から届く認証情報（クラウドの権限、プロキシのデータベースに保存した各社のAPIキー、マスターキーと発行したキー、<code>DATABASE_URL</code>のパスワードなど）はすべて交換します。ファイルが見つからないことは、安全の証明にならないとも書いています。不正なイメージは古い鍵の有効な署名を持つため、署名だけでは判断できません。<a href="#source-5">[5]</a></p><p>11月1日時点のPyPIでは1.107.0は取得できず、1.107系は開発版と候補版（1.107.0rc1・rc2）だけです。提供元は、それより前の版は安全だと説明しています。3月24日にも1.82.7と1.82.8が不正に公開され、削除されました。<a href="#source-5">[5]</a><a href="#source-6">[6]</a><a href="#source-8">[8]</a></p><h2>LiteLLMの脆弱性の悪用の状況</h2><p>今回の権限昇格（CVE-2026-114612）は、2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧（KEV）」に載っていません。一方、同じLiteLLMのプロキシでは、ほかの脆弱性がKEVに載っています。<a href="#source-9">[9]</a></p><p>同じLiteLLMでKEVに載っているのは、SQLインジェクション（CVE-2026-42208、5月8日）、コマンド実行（CVE-2026-42271、6月8日）、MCPの認証不備（CVE-2026-59822、9月2日）の3件で、いずれも1.84.0以降で直っています。CVE-2026-114612の今後30日に悪用される見込みの推定（EPSS）は0.3%です（10月31日時点）。アドバイザリは手口を文章で説明していますが、再現用のコード（PoC）の公開は確認できていません。<a href="#source-9">[9]</a><a href="#source-13">[13]</a></p><figure><div><div><div><p><span>KEVに載ったのは9月2日の認証不備で、</span><span>9月30日公表の権限昇格は11月1日時点で載っていない</span></p><p>LiteLLMの公表、不正な配布、データベースへの登録の日付を並べる（日本時間）。</p></div><div><div><span></span><p>2026年9月2日</p><div><div><b>MCPの認証不備がKEVに追加</b><span>CVE-2026-59822。1.84.0より前が対象</span></div><div><b>3件目</b><span>LiteLLMでKEVに載った脆弱性</span></div></div></div><div><span></span><p>9月30日</p><div><div><b><b>LiteLLM</b>が権限昇格を公表</b><span>CVE-2026-114612。修正版も同じ日にPyPIに出た</span></div><div><b>9.9</b><span>LiteLLMの評価（CVSS 3.1）</span></div></div></div><div><span></span><p>10月21日</p><div><div><b>不正な1.107.0が配布</b><span>PyPIでは20時39分から22時23分まで公開</span></div><div><b>1.107.0</b><span>中身を差し替えた版</span></div></div></div><div><span></span><p>10月23日</p><div><div><b>NVDに登録、不正な版の続報</b><span>続報で侵入の経路の一部を訂正</span></div></div></div><div><span></span><p>10月28日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>11月1日</p><div><div><b>CVE-2026-114612はKEVに未掲載</b><span>PoCの公開は確認できていない</span></div><div><b>0.3%</b><span>EPSS（10月31日時点）</span></div></div></div></div><p>出典　米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）、LiteLLM「GHSA-7hp6-4w63-5g45」（2026-09-30）</p></div></div></figure><h2>攻撃を受けていないかの確認</h2><p>KEVに載っている3件は1.84.0より前の版が対象です。1.84.0より前の版をインターネットから届く状態で動かしていた場合は、更新に加えて、更新前に攻撃を受けていないかを確認します。</p><ol><li>公開していた期間のWebサーバー・アプリケーションのログで、異常終了や不審な要求がないか確認します。</li><li>見覚えのないファイル（Webシェルなど）や、設定・アカウントの変更がないか確認します。</li><li>サーバーから見覚えのない宛先への通信がないか確認します。</li><li>痕跡が見つかった場合は、ログや機器の状態を保全し、専門の窓口に相談します。</li></ol><h2>LiteLLMの対象の版と推奨する版</h2><p>問題ごとの対象のバージョンと、直った版・扱いは次のとおりです。</p><p>2件の脆弱性は、1.104.0以降の正式版ならどちらも直っています。KEVに載っているLiteLLMの3件も、1.84.0以降で直っています。そのうえで不正な配布物を避けるため、提供元が示した1.106.2か、それ以降に公開された版を<code>==</code>で固定し、1.107.0は使いません。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-5">[5]</a><a href="#source-9">[9]</a></p><p>プロキシとして使う場合は、下で動くStarletteの版も確かめます。1.84.0〜1.87系はFastAPIを0.124.4に固定しているため、Starletteが、脆弱性BadHost（CVE-2026-48710）の直った1.0.1に上がりません。1.88.0以降はStarlette 1.0.1以上を求めます。Starletteの確かめ方は<a href="https://humanhacker.ai/media/vuln-radar/starlette-badhost/">StarletteのBadHostの記事</a>で説明しています。<a href="#source-10">[10]</a><a href="#source-11">[11]</a></p><div><table><thead><tr><th>問題</th><th>対象のバージョン</th><th>直った版・扱い</th></tr></thead><tbody><tr><td>権限昇格（CVE-2026-114612）</td><td>1.91.0以降の各系列の修正前（初期設定のまま）</td><td>1.100.4、1.101.3、1.102.2、1.103.1、1.104.0rc2。1.104.0以降は対象外</td></tr><tr><td>同（設定したときだけ）</td><td>1.87〜1.90系で<code>EXPERIMENTAL_UI_LOGIN=true</code></td><td>この系列の修正版は記載なし（出典で確認）</td></tr><tr><td>MCPの認証不備（CVE-2026-59822、KEV）</td><td>1.84.0より前</td><td>1.84.0</td></tr><tr><td>不正な配布物（10月21日）</td><td>1.107.0（PyPIとDockerイメージ）</td><td>削除済み。提供元は1.106.2への固定を案内</td></tr><tr><td>不正な配布物（3月24日）</td><td>1.82.7、1.82.8</td><td>削除済み</td></tr></tbody></table></div><figure><div><div><div><p><span>脆弱性2件は1.104.0以降で直り、</span><span>不正な配布物は1.106.2以降の固定で避ける</span></p><p>問題ごとの対象の版と、直った版・扱いを並べる。</p></div><div><div></div><div><b>対象の版</b></div><div><b>直った版・扱い</b></div><div>権限昇格（CVE-2026-114612）</div><div><span>1.91.0以降の各系列の修正前</span></div><div><span>1.100.4・1.101.3・1.102.2・1.103.1。1.104.0以降は対象外</span></div><div>同（設定したときだけ）</div><div><span>1.87〜1.90系でEXPERIMENTAL_UI_LOGIN=true</span></div><div><span>この系列の修正版は記載なし</span></div><div>MCPの認証不備（CVE-2026-59822、KEV）</div><div><span>1.84.0より前</span></div><div><span>1.84.0</span></div><div>不正な配布物（10月21日）</div><div><span>1.107.0（PyPIとDockerイメージ）</span></div><div><span>削除済み。提供元は1.106.2への固定を案内</span></div><div>不正な配布物（3月24日）</div><div><span>1.82.7・1.82.8</span></div><div><span>削除済み</span></div></div><div><b>だから</b>　1.106.2か、それ以降に公開された版を==で固定し、1.107.0は使わない。</div><p>出典　LiteLLM「GHSA-7hp6-4w63-5g45」（2026-09-30）、同「Oct 21, 2026 LiteLLM release v1.107.0 Compromised」（2026-10-21）</p></div></div></figure><h2>LiteLLMのバージョンを確かめて上げる手順</h2><ol><li><p>稼働中の環境で、LiteLLMの版を確認します。1.107.0、1.82.7、1.82.8なら、更新の前に手順3へ進みます。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip show litellm</code></pre></div></li><li><p>Dockerで使っている場合は、イメージの識別値（digest）を確認します。提供元は、<code>sha256:1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339e</code>のイメージを動かしたコンテナを、侵害されたものとして扱うよう求めています。<a href="#source-5">[5]</a></p><div><div><span>ターミナル</span></div><pre><code>docker images --digests | grep -i litellm</code></pre></div></li><li><p>1.107.0を入れた環境では、先に<code>pip install</code>を実行しません。site-packagesの<code>cook.pth</code>、<code>cook.py</code>、<code>sitecustomize.py</code>とそれぞれの.pycを消し、<code>/tmp/remote_code_loader.lock</code>を持つPythonのプロセスを止めます。提供元は、環境を作り直すほうがよいとしています。<a href="#source-5">[5]</a></p><div><div><span>ターミナル</span></div><pre><code>find / -path '*site-packages/*' \( -name 'cook.pth' -o -name 'cook.py' -o -name 'sitecustomize.py' -o -name 'litellm-1.107.0.dist-info' \) 2&gt;/dev/null
ls -l /tmp/remote_code_loader.lock</code></pre></div></li><li><p>版を固定して入れ直します。提供元が名指しで案内している1.106.2に固定します。11月1日時点のPyPIには、告知の後に公開された1.106.6もありますが、提供元はこの版を名指ししていません。<a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><div><div><span>ターミナル</span></div><pre><code>python -m pip install &quot;litellm[proxy]==1.106.2&quot;</code></pre></div></li><li><p>requirements.txt・poetry.lock・uv.lockに古い版や1.107.0が残っていないかを確かめ、もう一度版を確認します。</p><div><div><span>ターミナル</span></div><pre><code>grep -n -i 'litellm' requirements*.txt poetry.lock uv.lock
python -m pip show litellm</code></pre></div></li></ol><h2>すぐ上げられないときの回避策</h2><p>提供元のアドバイザリが示す回避策は次の2つです。CVE-2026-114612では、<code>EXPERIMENTAL_UI_LOGIN=false</code>にすると問題の認証の経路が無効になります。ただし、CLIのSSOとClaude Codeのゲートウェイのログインが使えなくなります。CVE-2026-59822では、MCPの経路を無効にするか、リバースプロキシやAPIゲートウェイで<code>/mcp/</code>などへの接続を止めます。<a href="#source-1">[1]</a><a href="#source-2">[2]</a></p><p>管理画面とAPIを社内のネットワークからだけ使えるようにすることも、届く経路を減らします。これは当社の整理で、提供元が示した回避策ではありません。</p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Pythonの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>Python</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>ImageSharpの脆弱性CVE-2026-106113、細工したTIFFでプロセスが終了するおそれ。3.2.0で要るライセンスキーと、2系・.NET Frameworkの扱い</title><link>https://humanhacker.ai/media/vuln-radar/imagesharp/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/imagesharp/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>.NETの画像処理ライブラリImageSharpの脆弱性CVE-2026-106113（GHSA-j3p4-wp97-rph4）は、浮動小数点のTIFFにHistogramEqualizationをかけるとプロセスが終了するおそれがあります。対象の処理の見分け方、修正版4.1.2・3.2.0、3.2.0からビルドに要るライセンスキー、修正版の無い2系の扱いを説明します。</description><content:encoded><![CDATA[<p>.NETの画像処理ライブラリImageSharpで、細工した32ビット浮動小数点のTIFFにヒストグラム平坦化（<code>HistogramEqualization()</code>）をかけると、範囲外のメモリに触れてプロセスが終了するおそれがある脆弱性CVE-2026-106113が、2026年9月15日にSix Laborsから公表されました。修正版は4系が4.1.2、3系が3.2.0です。3.2.0からはビルドにライセンスキーが必要になり、2系と.NET Framework向けには修正版がありません。</p><h2>ImageSharpのCVE-2026-106113で起きること</h2><p>提供元のアドバイザリによると、<code>HistogramEqualization()</code>は、画素の明るさ（輝度）からヒストグラムの位置を計算し、その値を確かめずにメモリ上の位置として使っていました。32ビット浮動小数点のTIFFに「正の無限大」の値を入れると、計算した位置が範囲を外れ、安全でないメモリへのアクセスが起きます。<a href="#source-1">[1]</a></p><p>報告者の再現では、2.0.0・3.1.12・4.0.0・4.1.1で<code>AccessViolationException</code>が起き、プロセスが終了しました。画像を処理するサービスが止まるおそれがあります。深刻度は提供元の評価でCVSS 3.1の7.5（可用性への影響が高）で、NVDも同じ値を載せています。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><figure><div><div><div><p><span>無限大の画素を持つTIFFで、</span><span>ヒストグラムの位置が範囲を外れ、</span><span>プロセスが終了する</span></p><p>提供元のアドバイザリにある仕組みを、入口・処理・起きることの順に並べる。</p></div><div><div><b>攻撃者が用意したTIFF</b><span>32ビット浮動小数点の画素に「正の無限大」の値を入れる</span></div></div><div><span>↓</span><span>Image&lt;HalfVector4&gt;として読み込む</span></div><div><p><b>ImageSharp</b>のHistogramEqualization()</p><div><div><b>輝度から位置を計算</b><span>画素の明るさから、ヒストグラムの位置を求める</span></div><div><b>値を確かめずに使う</b><span>計算した値を、そのままメモリ上の位置として使う</span></div></div></div><div><span>↓</span><span>範囲外のメモリにアクセス</span></div><div><div><b>AccessViolationException</b><span>プロセスが終了し、画像を処理するサービスが止まるおそれ</span></div></div><div><span>↓</span><span>報告者の再現と深刻度</span></div><div><div><b>2.0.0・3.1.12・4.0.0・4.1.1</b><span>報告者の再現で、いずれもプロセスが終了した</span></div><div><b>CVSS 3.1の7.5</b><span>可用性への影響が高。提供元の評価で、NVDも同じ値</span></div></div><p>出典　Six Labors「GHSA-j3p4-wp97-rph4」（2026-09-15）</p></div></div></figure><h2>ImageSharpの脆弱性の対象になる処理</h2><p>次の3つがそろう場合が対象です。報告の対象は<code>HistogramEqualization</code>だけで、適応型のヒストグラム平坦化と<code>AutoLevel</code>は含まれていません。<a href="#source-1">[1]</a></p><ul><li>SixLabors.ImageSharpが2.0.0以上3.2.0未満、または4.0.0以上4.1.2未満（TIFFの読み込みは2.0.0から）</li><li>攻撃者が用意した32ビット浮動小数点のTIFFを、<code>Image&lt;HalfVector4&gt;</code>として読み込む</li><li>読み込んだ画像に<code>HistogramEqualization()</code>をかける</li></ul><p>Webの画像の変換に使われるImageSharp.Webの標準の処理（リサイズ、形式、画質、背景色、向きの補正）には、ヒストグラム平坦化は含まれていません（当社がソースで確認）。自分のコードで<code>HistogramEqualization</code>と<code>HalfVector4</code>を使っているかを探すと、見分けがつきます。<a href="#source-5">[5]</a></p><h2>悪用の状況</h2><p>2026年11月1日時点で、米国のCISAが公開している「悪用が確認された脆弱性の一覧（KEV）」には載っていません。</p><p>今後30日以内に悪用される確率の推定値（EPSS）は0.4%です（2026-11-01時点）。見込みは高くない部類ですが、推定値で、悪用されないことを保証するものではありません。</p><p>提供元のアドバイザリには、無限大の画素を持つTIFFを作ってプロセスを終了させるまでの再現用のコード（PoC）とDockerfileが載っています。アドバイザリには「悪用の事例は知られていない」と書かれていて、CISAのコーディネーターがCVEの記録に付けた評価（SSVC）も10月7日時点で悪用「なし」です。当社はPoCを検証していません。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><figure><div><div><div><p><span>4.1.2の翌日に公表、</span><span>3系の修正版は約4週間後で、</span><span>悪用は11月1日時点で確認されていない</span></p><p>提供元の公表、修正版の公開、データベースへの登録の日付を並べる（日本時間）。</p></div><div><div><span></span><p>2026年9月14日</p><div><div><b>4系の修正版を公開</b><span></span></div><div><b>4.1.2</b><span>4系の修正版</span></div></div></div><div><span></span><p>9月15日</p><div><div><b><b>Six Labors</b>がアドバイザリを公表</b><span>PoCとDockerfileも載せた</span></div><div><b>7.5</b><span>提供元の評価（CVSS 3.1）</span></div></div></div><div><span></span><p>10月7日</p><div><div><b>NVDに登録</b><span>CISAのコーディネーターの評価（SSVC）は悪用「なし」</span></div></div></div><div><span></span><p>10月8日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>10月9日</p><div><div><b>3系の修正版を公開、アドバイザリを更新</b><span></span></div><div><b>3.2.0</b><span>3系の修正版</span></div></div></div><div><span></span><p>11月1日</p><div><div><b>KEVに未掲載</b><span>アドバイザリは悪用の事例は知られていないと記載</span></div><div><b>0.4%</b><span>EPSS（11月1日時点）</span></div></div></div></div><p>出典　Six Labors「GHSA-j3p4-wp97-rph4」（2026-09-15）、NVD「CVE-2026-106113」（2026-10-07）</p></div></div></figure><h2>ImageSharpの対象の版と推奨する版</h2><p>系列ごとの対象と修正版は次のとおりです。必要な.NETの版は、NuGetに登録された対応の環境です。<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-4">[4]</a></p><div><table><thead><tr><th>系列</th><th>対象</th><th>推奨する版</th><th>必要な.NET</th></tr></thead><tbody><tr><td>4系</td><td>4.0.0〜4.1.1</td><td>4.1.2以上（9月14日公開、最新は4.1.3）</td><td>.NET 8以上</td></tr><tr><td>3系</td><td>3.0.0〜3.1.12</td><td>3.2.0（10月9日公開）</td><td>.NET 6以上</td></tr><tr><td>2系</td><td>2.0.0以上</td><td>記載なし（出典で確認）</td><td>.NET Framework 4.7.2・.NET Standard 2.0など</td></tr></tbody></table></div><p>3系の修正版3.2.0は、4系の4.1.2から約4週間後の10月9日に公開され、アドバイザリも同じ日に更新されました。NVDの説明文は11月1日時点でも「4.1.2未満が対象、4.1.2で修正」のままで、これを写した脆弱性データベースでは3.2.0も対象と表示されることがあります。提供元のアドバイザリとNVDの対象の定義（CPE）は、どちらも3.2.0を修正版としています。<a href="#source-1">[1]</a><a href="#source-3">[3]</a></p><figure><div><div><div><p><span>4系は4.1.2以上、</span><span>3系は3.2.0に上げ、</span><span>2系には修正版が無い</span></p><p>系列ごとの対象と推奨する版、必要な.NET、ライセンスを並べる。</p></div><div><div><b>4系</b><div><span>対象</span><span>4.0.0〜4.1.1</span></div><div><span>推奨する版</span><b>4.1.2以上</b><span>9月14日公開、最新は4.1.3</span></div><div><span>必要な.NET</span><span>.NET 8以上</span></div><div><span>ライセンス</span><span>Six Labors Split License。4.0.0からビルドにキーが要る</span></div></div><div><b>3系</b><div><span>対象</span><span>3.0.0〜3.1.12</span></div><div><span>推奨する版</span><b>3.2.0</b><span>10月9日公開</span></div><div><span>必要な.NET</span><span>.NET 6以上</span></div><div><span>ライセンス</span><span>Six Labors Split License。3.2.0からビルドにキーが要る</span></div></div><div><b>2系</b><div><span>対象</span><span>2.0.0以上</span></div><div><span>推奨する版</span><span>記載なし</span></div><div><span>必要な.NET</span><span>.NET Framework 4.7.2・.NET Standard 2.0など</span></div><div><span>ライセンス</span><span>Apache License 2.0</span></div></div></div><div><b>だから</b>　2系と.NET Frameworkのアプリは、.NET 6以降へ移って3.2.0か4系を入れる。</div><p>出典　Six Labors「GHSA-j3p4-wp97-rph4」（2026-09-15）、NuGet「SixLabors.ImageSharp」（2026-11-01確認）</p></div></div></figure><h2>ImageSharpの版を確かめて上げる手順</h2><ol><li><p>プロジェクトが参照しているImageSharpの版を、間接的な依存も含めて確かめます。</p><div><div><span>ターミナル</span></div><pre><code>dotnet list package --include-transitive | grep -i imagesharp</code></pre></div></li><li><p>NuGetの脆弱性の情報で、対象の版が入っていないかも確かめます。</p><div><div><span>ターミナル</span></div><pre><code>dotnet list package --vulnerable --include-transitive</code></pre></div></li><li><p>コードの中で、該当の処理を使っているかを探します。</p><div><div><span>ターミナル</span></div><pre><code>grep -rn -E 'HistogramEqualization|HalfVector4' --include='*.cs' .</code></pre></div></li><li><p>使っている系列の修正版へ上げます（4系か3系の、どちらかの行を実行します）。</p><div><div><span>ターミナル</span></div><pre><code>dotnet add package SixLabors.ImageSharp --version 4.1.3
dotnet add package SixLabors.ImageSharp --version 3.2.0</code></pre></div></li><li><p>ライセンスキーを環境変数から渡す場合は、プロジェクトファイルに次を足し、<code>SIXLABORS_LICENSE_KEY</code>に発行されたライセンスの全文を入れます（Six Laborsの文書の例）。</p><div><div><span>csproj</span></div><pre><code>&lt;PropertyGroup&gt;
  &lt;SixLaborsLicenseKey&gt;$(SIXLABORS_LICENSE_KEY)&lt;/SixLaborsLicenseKey&gt;
&lt;/PropertyGroup&gt;</code></pre></div></li><li><p>Releaseでビルドできることを確かめ、もう一度版を確かめます。コンテナのイメージなども作り直します。</p><div><div><span>ターミナル</span></div><pre><code>dotnet build -c Release
dotnet list package --include-transitive | grep -i imagesharp</code></pre></div></li></ol><h2>すぐに上げられないとき</h2><p>提供元のアドバイザリに回避策の節はありません。次は、公表された成立条件から当社が整理した緩和策で、提供元の推奨ではありません。</p><ul><li>外部から受け取った浮動小数点のTIFFに、<code>HistogramEqualization()</code>をかけない</li><li>処理の前に、画素に無限大などの有限でない値が含まれていないかを確かめる</li><li>TIFFを受け付ける必要がなければ、読み込む前に形式を確かめて拒否する</li></ul><h2>3.2.0と4系は、ビルドにライセンスキーが要る</h2><p>Six Laborsの文書は、ImageSharpを直接参照するプロジェクトには、3系では3.2.0から、4系では4.0.0から、ビルドの際に有効なライセンスキーが必要だと説明しています。間接的な依存として入る場合は対象外で、提供元は「既存のライセンス条件の適用で、条件の変更ではない」としています。<a href="#source-6">[6]</a></p><p><mark>3.2.0のパッケージにはビルドのときにライセンスを確かめる処理が入っていて、キーが見つからないと、Debugのビルドは続けられますが、Releaseのビルドは失敗します。</mark>キーは、<code>sixlabors.lic</code>をプロジェクトのフォルダに置くか、<code>SixLaborsLicenseKey</code>・<code>SixLaborsLicenseFile</code>のプロパティで渡します。<a href="#source-6">[6]</a><a href="#source-7">[7]</a></p><p>3系以降のライセンスはSix Labors Split Licenseで、オープンソースのソフトウェアでの利用、非営利の団体、年間の総収入が100万米ドル未満の企業などはApache License 2.0で使え、それ以外は商用ライセンスが必要です。2系はApache License 2.0でした。前者に当たる場合も、キーの申し込みが要ります。<a href="#source-4">[4]</a><a href="#source-7">[7]</a><a href="#source-8">[8]</a></p><h2>2系・.NET Frameworkで使っている場合</h2><p>2系向けの修正版は、アドバイザリに記載がありません。2系の最新は2025年11月の2.1.13で、NuGetはこの版にもこの件を表示しています。2系は.NET Framework 4.7.2や.NET Standard 2.0に対応していますが、3.2.0は.NET 6、4系は.NET 8向けで、.NET Frameworkのアプリには入れられません。<a href="#source-1">[1]</a><a href="#source-4">[4]</a></p><p>その場合は、.NET 6以降へ移って3.2.0か4系を入れるか、移るまでの間、前の節の緩和策で該当の処理を止めます。2系から上げるときは、ライセンスの条件とキーの用意も確かめます。</p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、.NETの関連情報を調べる</a>こともできます。</p>]]></content:encoded><category>.NET</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item><item><title>Starletteの脆弱性BadHost、Hostヘッダーでパスによる認証の確認を回避されるおそれ。FastAPIを上げても古い版が残る場合の確かめ方</title><link>https://humanhacker.ai/media/vuln-radar/starlette-badhost/</link><guid isPermaLink="true">https://humanhacker.ai/media/vuln-radar/starlette-badhost/</guid><pubDate>Sun, 01 Nov 2026 12:00:00 GMT</pubDate><description>Starletteの脆弱性CVE-2026-48710（BadHost）は、細工したHostヘッダーでrequest.url.pathを偽り、パスで判定するアクセスの確認を回避されるおそれがあります。9月2日にKEVに追加されました。FastAPI・vLLM・LiteLLMの下で古いStarletteが残る例と、間接依存の確かめ方を説明します。</description><content:encoded><![CDATA[<p>PythonのWebフレームワークの土台であるStarletteで、細工したHostヘッダーにより、パスで判定するアクセスの確認を回避されるおそれがある脆弱性（通称BadHost、CVE-2026-48710）が、2026年5月22日にStarletteから公表されました。9月2日には、米CISAの悪用確認の一覧（KEV）に追加されています。StarletteはFastAPIやvLLM、LiteLLMの下で動くため、上のパッケージを上げてもStarletteが古いまま残ることがあります。</p><h2>StarletteのBadHostで起きることと仕組み</h2><p>Starletteは、受け取った要求のURL（<code>request.url</code>）を、Hostヘッダーとパスをつないで組み立て直します。公式アドバイザリによると、1.0.0以前はこのときHostヘッダーを検証していませんでした。Hostに<code>/</code>、<code>?</code>、<code>#</code>などを含めると、組み立て直したURLのパスが、実際に要求されたパスとずれます。<a href="#source-1">[1]</a></p><p><mark>振り分け（ルーティング）は実際のパスで行われるため、本来のエンドポイントは動いたまま、<code>request.url.path</code>だけが別のパスに見えます。</mark>特定のパスの下だけを守るミドルウェアが<code>request.url.path</code>で判定していると、その確認を回避されるおそれがあります。<a href="#source-1">[1]</a></p><figure><div><div><div><p><span>細工したHostヘッダーで、</span><span>request.url.pathだけが実際のパスとずれる</span></p><p>公式アドバイザリにある仕組みを、入口・組み立て直し・起きることの順に並べる。</p></div><div><div><b>攻撃者の要求</b><span>Hostヘッダーに/、?、#などを含める</span></div></div><div><span>↓</span><span>要求を送る</span></div><div><p><b>Starlette</b> 1.0.0以前</p><div><div><b>URLの組み立て直し</b><span>Hostヘッダーを検証せず、パスとつないでrequest.urlを作る</span></div><div><b>振り分け</b><span>実際のパスで行うため、本来のエンドポイントは動く</span></div></div></div><div><span>↓</span><span>request.url.pathが別のパスに見える</span></div><div><div><b>パスで判定するミドルウェア</b><span>特定のパスの下だけを守る確認を回避されるおそれ</span></div></div><div><span>↓</span><span>Starletteが下で動くパッケージ</span></div><div><div><b>FastAPI・vLLM・LiteLLM</b><span>上のパッケージを上げても、Starletteが古いまま残ることがある</span></div></div><p>出典　Starlette「GHSA-86qp-5c8j-p5mr」（2026-05-22）</p></div></div></figure><h2>StarletteのBadHostの影響を受ける条件</h2><p>公式は、前段のプロキシやロードバランサーが不正なHostを拒否または正規化し、かつアプリが<code>X-Forwarded-Host</code>など攻撃者が操作できるヘッダーを他の箇所で信頼していない場合に限り、影響が抑えられると説明しています。<a href="#source-1">[1]</a></p><p>対象の版と影響する使い方は次のとおりです。</p><div><table><thead><tr><th>項目</th><th>内容</th></tr></thead><tbody><tr><td>対象</td><td>starlette 1.0.0以前（発見者のX41 D-Secは0.8.3以上と記載）<a href="#source-1">[1]</a><a href="#source-2">[2]</a></td></tr><tr><td>修正版</td><td>1.0.1（5月22日公開）</td></tr><tr><td>影響する使い方</td><td><code>request.url</code>や<code>request.url.path</code>でアクセスを判定するコード</td></tr><tr><td>深刻度</td><td>CVSS 3.1で6.5（警告）。StarletteとNVDが同じ値。発見者の評価はCVSS 4.0で7（High）<a href="#source-1">[1]</a><a href="#source-2">[2]</a><a href="#source-3">[3]</a></td></tr><tr><td>悪用</td><td>9月2日にKEVへ追加<a href="#source-4">[4]</a></td></tr></tbody></table></div><h2>悪用の状況</h2><p>米国のCISAは2026年9月2日、CVE-2026-48710を「悪用が確認された脆弱性の一覧（KEV）」に追加しました。実際の攻撃で使われていることを示すため、優先して対応します。</p><p>発見者のX41 D-Secは、再現用のアプリと攻撃のコード（PoC）、検出用のスクリプトを公開しています。今後30日に悪用される見込みの推定（EPSS）は70.3%です（10月31日時点）。KEVの説明には、LiteLLMのコマンド実行の脆弱性（CVE-2026-42271、6月8日からKEV）と組み合わせられるおそれがあると書かれています。<a href="#source-4">[4]</a><a href="#source-5">[5]</a><a href="#source-6">[6]</a></p><figure><div><div><div><p><span>5月22日に公表、</span><span>9月2日にKEVへ追加され、</span><span>悪用の見込みの推定は70.3%</span></p><p>公表、データベースへの登録、KEVへの追加の日付を並べる（日本時間）。</p></div><div><div><span></span><p>2026年5月22日</p><div><div><b><b>Starlette</b>が公表、修正版1.0.1を公開</b><span>発見者のX41 D-SecもアドバイザリとPoCを公開</span></div><div><b>6.5</b><span>Starletteの評価（CVSS 3.1）</span></div></div></div><div><span></span><p>5月27日</p><div><div><b>NVDに登録</b><span>NVDの評価もCVSS 3.1の6.5</span></div></div></div><div><span></span><p>6月4日</p><div><div><b>GitHub Advisory Databaseに収録</b><span></span></div></div></div><div><span></span><p>9月2日</p><div><div><b>CISAがKEVに追加</b><span>LiteLLMのCVE-2026-42271（6月8日からKEV）と組み合わせられるおそれ</span></div><div><b>KEV</b><span>悪用が確認された脆弱性の一覧</span></div></div></div><div><span></span><p>10月31日</p><div><div><b>EPSSの推定</b><span></span></div><div><b>70.3%</b><span>今後30日に悪用される見込み</span></div></div></div></div><p>出典　米CISA「Known Exploited Vulnerabilities Catalog」（2026-10-30版）、Starlette「GHSA-86qp-5c8j-p5mr」（2026-05-22）</p></div></div></figure><h2>攻撃を受けていないかの確認</h2><p>悪用が確認された脆弱性は、更新に加えて、更新前に攻撃を受けていないかを確認します。</p><ol><li>公開していた期間のWebサーバー・アプリケーションのログで、異常終了や不審な要求がないか確認します。</li><li>見覚えのないファイル（Webシェルなど）や、設定・アカウントの変更がないか確認します。</li><li>サーバーから見覚えのない宛先への通信がないか確認します。</li><li>痕跡が見つかった場合は、ログや機器の状態を保全し、専門の窓口に相談します。</li></ol><h2>Starletteの対象の版と推奨する版</h2><p>1.0.1は、Hostヘッダーを規格（RFC 9112・RFC 3986）の文法で確かめ、不正な値のときは接続の情報（<code>scope[&quot;server&quot;]</code>）を使うように直した版です。その後、パスの側からホスト名を偽れる低い深刻度の問題（GHSA-jp82-jpqv-5vv3）が1.3.0で、別の高い深刻度の問題（CVE-2026-54283など）が1.1.0と1.3.1で直っています。上げるなら1.3.1以上にします。<a href="#source-1">[1]</a><a href="#source-13">[13]</a><a href="#source-14">[14]</a></p><p><mark>0系には修正版が無いため、0.52.1以前からは1系への更新になります。</mark>1.0.0では、<code>on_startup</code>・<code>on_shutdown</code>、<code>on_event()</code>、<code>@app.route()</code>などの古い書き方が削除されました。Starletteを直接使っているアプリは、検証環境で起動と動作を確かめます。最新の1.10.0はPython 3.11以上が必要で、Python 3.10の環境には1.7.0までが入ります。<a href="#source-13">[13]</a></p><h2>Starletteの版を確かめて上げる手順</h2><ol><li><p>稼働中の環境で、Starletteの版と、どのパッケージが使っているか（Required-byの行）を確認します。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip show starlette</code></pre></div></li><li><p>FastAPIの版も確認します。FastAPI 0.132系以前はStarletteを1.0.0未満に制限しているので、Starletteを1.0.1以上にするには、FastAPIを0.133.0以上にします。<a href="#source-7">[7]</a></p><div><div><span>ターミナル</span></div><pre><code>python -m pip show fastapi</code></pre></div></li><li><p>lockファイルに記録された版を確認します。上のパッケージを更新しても、lockファイルのStarletteが古いままのことがあります。</p><div><div><span>ターミナル</span></div><pre><code>grep -n -i -A1 'name = &quot;starlette&quot;' poetry.lock uv.lock
grep -n -i 'starlette' requirements*.txt</code></pre></div></li><li><p>Starletteを直接指定して上げます。FastAPIを使っている場合は一緒に指定します。uvやPoetryでは、lockファイルのStarletteだけを更新できます（使っているツールの行を実行します）。</p><div><div><span>ターミナル</span></div><pre><code>python -m pip install --upgrade &quot;starlette&gt;=1.3.1&quot; &quot;fastapi&gt;=0.133.0&quot;
uv lock --upgrade-package starlette
poetry update starlette</code></pre></div></li><li><p>実際に読み込まれる版を確かめます。コードの中で<code>request.url.path</code>で判定している箇所も探します。</p><div><div><span>ターミナル</span></div><pre><code>python -c &quot;import starlette; print(starlette.__version__)&quot;
grep -rn 'request.url.path' --include='*.py' .</code></pre></div></li></ol><h2>すぐ上げられないとき</h2><p>Starletteのアドバイザリが示す対応は更新で、更新できないときの回避策は書かれていません（前段のプロキシで抑えられる条件は、影響を受ける条件の節のとおりです）。発見者のX41 D-Secは、パスではなくエンドポイントで認証すること、<code>request.url.path</code>の代わりに<code>request.scope[&quot;path&quot;]</code>を使うこと、不正なHostを拒否するリバースプロキシやASGIサーバーを置くことを挙げています。これは発見者の推奨で、Starletteが示した回避策ではありません。<a href="#source-1">[1]</a><a href="#source-2">[2]</a></p><h2>FastAPI・vLLM・LiteLLMを上げても、古いStarletteが残る理由</h2><p>pipの<code>--upgrade</code>は、指定したパッケージを上げ、その依存は条件を満たしていればそのまま残します（初期設定のonly-if-needed）。FastAPIは、11月1日時点の最新版0.162.0でも、Starletteに0.46.0以上しか求めていません。<mark>そのため、古いStarletteが入った環境でFastAPIだけを上げても、Starletteは対象の版のまま残ります。</mark><a href="#source-7">[7]</a><a href="#source-8">[8]</a></p><p>逆に、上のパッケージが古いStarletteしか許さない場合もあります。PyPIに登録された依存の指定は次のとおりです。<a href="#source-7">[7]</a><a href="#source-9">[9]</a><a href="#source-10">[10]</a><a href="#source-11">[11]</a></p><div><table><thead><tr><th>パッケージと版</th><th>Starletteへの指定</th><th>1.0.1以上にできるか</th></tr></thead><tbody><tr><td>FastAPI 0.132系以前</td><td>1.0.0未満（0.128系以前は0.51.0未満）</td><td>できない。0.133.0以上が要る</td></tr><tr><td>FastAPI 0.133.0以降</td><td>下限だけ（0.135.0以降は0.46.0以上）</td><td>できるが、自動では上がらない</td></tr><tr><td>LiteLLMのプロキシの1.84.0〜1.87系</td><td>FastAPIを0.124.4に固定（Starletteは0.51.0未満）</td><td>できない</td></tr><tr><td>LiteLLMのプロキシの1.88.0以降</td><td>1.0.1以上</td><td>できる</td></tr><tr><td>vLLM 0.22.0・0.23.0</td><td>指定なし（FastAPI 0.115.0以上）</td><td>自動では上がらない</td></tr><tr><td>vLLM 0.24.0以降</td><td>1.0.1以上</td><td>できる</td></tr></tbody></table></div><p>LiteLLMは1.84.0で、自分の認証の判定がStarletteの組み立て直したパスに頼っていた問題（CVE-2026-49468）を直しました。これはLiteLLM側の修正で、同じ環境のStarletteの版は変わりません。LiteLLMそのものの脆弱性と版の切り分けは、<a href="https://humanhacker.ai/media/vuln-radar/litellm/">LiteLLMの脆弱性とバージョンの記事</a>で説明しています。<a href="#source-12">[12]</a></p><p><a href="https://humanhacker.ai/research/vulnerabilities/">脆弱性の公表・更新一覧で、Pythonの関連情報を調べる</a>こともできます。</p><figure><div><div><div><p><span>FastAPI・LiteLLM・vLLMの版によって、</span><span>Starletteを1.0.1以上にできるかが分かれる</span></p><p>PyPIに登録された依存の指定を、1.0.1以上にできるかで並べる。</p></div><div><div><b>1.0.1以上にできない</b><div><span>FastAPI</span><b>0.132系以前</b><span>1.0.0未満に制限</span></div><div><span>LiteLLMのプロキシ</span><b>1.84.0〜1.87系</b><span>FastAPIを0.124.4に固定</span></div><div><span>vLLM</span><span>なし</span></div></div><div><b>できるが自動では上がらない</b><div><span>FastAPI</span><b>0.133.0以降</b><span>下限だけ。最新の0.162.0も0.46.0以上</span></div><div><span>LiteLLMのプロキシ</span><span>なし</span></div><div><span>vLLM</span><b>0.22.0・0.23.0</b><span>Starletteの指定なし</span></div></div><div><b>1.0.1以上を求める</b><div><span>FastAPI</span><span>なし</span></div><div><span>LiteLLMのプロキシ</span><b>1.88.0以降</b><span>1.0.1以上を指定</span></div><div><span>vLLM</span><b>0.24.0以降</b><span>1.0.1以上を指定</span></div></div></div><div><b>だから</b>　上のパッケージだけを上げず、Starletteの版を直接確かめて指定する。</div><p>出典　PyPI「fastapi 0.162.0」（2026-10-24）、PyPI「litellm 1.88.0」（2026-06-06）、PyPI「vllm 0.24.0」（2026-06-30）</p></div></div></figure>]]></content:encoded><category>Python</category><enclosure url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" length="95242" type="image/jpeg"/><media:thumbnail url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" width="1200" height="630"/><media:content url="https://humanhacker.ai/assets/images/og/vuln-radar-ogp-1200.0e544f2b50.jpg" type="image/jpeg" medium="image" width="1200" height="630"/></item></channel></rss>
