本文へ移動
情シスのミカタ
ニュース約6分で読めます

Python 3.15.2など5版を前倒し公開 sslでeMudhraの鍵を遮断

Pythonの開発チームは、3.15.2・3.14.10・3.13.18・3.12.16・3.11.18を前倒しのセキュリティリリースとして公開しました。sslモジュールが、破られたeMudhraの中間CAの鍵を含む証明書をはじくようになり、pipが古いままでもこの鍵を使った攻撃から守られます。tarfileとhttp.cookiejarの修正も入っています。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
Python 3.15.2など5版を前倒し公開 sslでeMudhraの鍵を遮断

この記事のまとめ

  • Pythonは、3.15.2・3.14.10・3.13.18・3.12.16・3.11.18を前倒しで公開しました。10月21日の更新に続く2回目で、python.orgのリリースのページの日付は10月25日です。
  • sslモジュールが、破られたeMudhraの中間CAの鍵を含む証明書の連なりをはじきます(CVE-2026-115557)。pipが古いままでも、pip自身の更新を含めてこの鍵を使った攻撃から守られます。
  • インストーラーが出るのは3.15.2と3.14.10だけで、3.13・3.12・3.11はソースだけです。証明書の検証を切っているコードは、この対策の外になります。
こんな方に#30代#40代#50代実務

10月21日に続いて、Pythonがもう一度、前倒しのセキュリティリリースを出しました。21日の更新は、同梱のpipとルート証明書の一覧を入れ替えるものでした。今回は、Python本体のsslモジュールが、インドの認証局eMudhraの破られた中間CAの鍵を含む証明書を、じかにはじくようになります。

公開されたのは、3.15.2・3.14.10・3.13.18・3.12.16・3.11.18の5つです。python.orgのリリースのページの日付は10月25日で、開発チームのブログ「Python Insider」は26日付で告知しました。

python.orgのPython 3.15.2のリリースのページ。前倒しのセキュリティリリースで、破られたeMudhraの中間CAの鍵をsslモジュールで遮断し、pipが未更新でもpipの通常の使い方は安全になると説明。セキュリティの中身として、CVE-2026-115557(eMudhraの中間CAの鍵を信頼しない)、CVE-2026-114583(tarfile.tar_filterで展開先を置き換えるリンクを拒む)、gh-160300(http.cookiejarで負のバージョンのクッキーを拒む)が並ぶ
Python 3.15.2のリリースのページ。sslで鍵を遮断し、tarfileなども修正出典: Python Software Foundation「Python 3.15.2」(引用)

pipを更新していなくても守られるのか

Pythonの説明では、守られます。pipのふつうの使い方は、pip自身の更新も含めて、pipが古いままでも、破られた鍵を使った攻撃から守られるとしています。

仕組みは、sslモジュールの中の小さな「使ってはいけない鍵」の一覧です。証明書を検証するときに、連なりの中の証明書の公開鍵(SubjectPublicKeyInfo)を一覧と照らし、一致すれば接続を拒みます。証明書ではなく鍵で照らすので、同じ鍵を使い回したクロス証明書もはじけます。

修正を提案した開発者は、その理由を次のように書いています。信頼を外すのは本来ルートストアの仕事だが、更新は実際には遅れる。中間CAの失効を、アプリまで確実に届ける方法もない。ルートが外れるまでのあいだ、Pythonは破られた鍵を使った接続を成り立たせてしまう。

同じ考え方の対策は、Goが10月20日に出しています(CVE-2026-111943)。eMudhraの件の経緯と、各社のルートストアの更新は、eMudhra、中間CAの鍵が破られSSL/TLS事業から撤退 証明書の差し替えとルートストアの更新をにまとめています。

ただし、この一覧が働くのは、証明書の検証を有効にした接続(CERT_OPTIONAL・CERT_REQUIRED)だけです。検証を切ったCERT_NONEの接続は対象外です。requestsでverify=Falseにしているスクリプトや、検証しないコンテキストを作っているコードは、今回の対策では守られません。

今回の5版で直ったもの

Python Insiderの告知。Python 3.15、3.14、3.13、3.12、3.11の前倒しのセキュリティリリースとして3.15.2、3.14.10、3.13.18、3.12.16、3.11.18が並ぶ。破られたeMudhraの中間CAの鍵をsslモジュールで遮断すると説明し、3.15.2と3.14.10はインストーラーつき、3.13.18、3.12.16、3.11.18はソースだけと書く。5版すべてのセキュリティの中身として、CVE-2026-115557、CVE-2026-114583、gh-160300が並ぶ
Python Insiderの告知。インストーラーは3.15.2と3.14.10だけ出典: Python Software Foundation(Python Insider)「Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 and 3.11.18 are out」(引用)
修正 内容 入っている版
CVE-2026-115557(gh-160040) sslモジュールが、破られたeMudhraの中間CAの鍵を信頼しない 5版すべて
CVE-2026-114583(gh-160097) tarfileの「tar」フィルター(tar_filter)が、名前の空のシンボリックリンクを正しく扱えず、展開先そのものをリンクで置き換えられる。こうしたリンクを拒む 5版すべて
gh-160300 http.cookiejarが、Versionが負の値のクッキーで、ドメインの確認を飛ばしていた。CookieJarを共有していると、接続先のサーバーが、関係のないドメインのクッキーを設定したり上書きしたりできる(ほかのドメインのクッキーが漏れるわけではない) 5版すべて
CVE-2026-77214・CVE-2026-102633(gh-158876) 同梱のExpatを2.9.0に更新 3.13.18・3.12.16・3.11.18(3.15.1・3.14.9では済み)
CVE-2024-3220(gh-159428) Windowsで、既定ではmimetypes.knownfilesを読まない 3.13.18・3.12.16・3.11.18(同上)
gh-157579 tempfile.TemporaryDirectoryの後片付けでの競合 3.13.18・3.12.16(3.15.0・3.14.9では済み)

tarfileの修正は、外から受け取ったアーカイブを展開するプログラムで効いてきます。とくに、展開のフィルターに「tar」を指定しているコードです。信頼できないアーカイブには、Pythonのドキュメントは「data」フィルターをすすめています。

うちの会社は対象か Pythonの入れ方で分かれる

同じ「Python 3.13」でも、入れ方によって今回の修正の届き方が違います。

入れ方 今回の修正の受け取り方
python.orgのインストーラーで入れた3.15・3.14(Windows・macOS) 3.15.2・3.14.10のインストーラーで更新する。WindowsはPython install managerからも更新できる
python.orgのインストーラーで入れた3.13 3.13.18はソースだけで、インストーラーは出ない。21日の3.13.17(インストーラーつき)で、同梱のpipとcertifiは入れ替え済み。sslの一覧まで入れるなら、3.14以降へ移るか、ソースから作る
3.12・3.11 ソースだけ。多くはLinuxのディストリビューションやコンテナのイメージで使われている
Linuxのディストリビューションのpython3 ディストリビューションの更新で届く。それまでは、eMudhraのルートを外すca-certificatesの更新を先に当てる(Debian・Ubuntu・Alpineなどが出している)
コンテナのイメージ ベースのイメージが新しい版になってから、イメージを作り直す
3.10以前 サポートが終わっていて、修正は出ない。3.10は10月1日に終わった(Pythonの脆弱性5件、修正は3.14.8など。3.10系は10月1日にサポート終了)

Pythonを使っていない会社や、Pythonで外とHTTPSの通信をしない使い方なら、sslの修正は関係ありません。tarfileとhttp.cookiejarは、それぞれの機能を使うプログラムだけが対象です。

社内のPythonを更新する手順

  1. 社内のどこでPythonが動いているかを、入れ方ごとに洗い出します。開発者のPC、定期実行のサーバー、コンテナ、業務の自動化ツールが入れているPythonは、それぞれ別に更新が要ります。版はpython -V(Linuxではpython3 -V)で確かめられます。
  2. 3.15・3.14をpython.orgから入れている端末は、3.15.2・3.14.10へ更新します。仮想環境の中のpipとuvは、21日の告知のとおり、別に最新にします。
  3. 3.13を使い続ける端末は、少なくとも3.13.17になっているかを見ます。sslの一覧も入れたい場合は、3.14.10への移行を開発担当と相談します。
  4. 証明書の検証を切っているコードを探します。verify=False、ssl._create_unverified_context、CERT_NONEなどの書き方です。今回の対策が効かないうえ、ふだんから危ない書き方なので、検証を有効に戻します。
  5. 外から受け取ったtarを展開するプログラムがあれば、更新を先にします。あわせて、展開のフィルターに「data」を使っているかを確かめます。

21日の更新とは、守る場所が違う

21日と今回の更新は、置き換えではなく、重ねて効く対策です。

10月21日の更新 今回の更新
版 3.15.1・3.14.9・3.13.17 3.15.2・3.14.10・3.13.18・3.12.16・3.11.18
中身 同梱のpipを26.2.2に、その中のcertifiを2026.10.19にして、eMudhraのルートを外す sslモジュールが、破られた鍵を含む証明書の連なりを拒む
届く範囲 certifiを使う通信(pipなど) 検証を有効にしたすべての接続
インストーラー 3つとも 3.15.2・3.14.10だけ

ルートストアやcertifiが古いままの環境でも、Python本体を更新すれば、破られた鍵を通る接続は止まります。逆に、Python本体をすぐに更新できない環境では、21日に案内されたpipとcertifiの更新と、OSのca-certificatesの更新が対策になります。どちらか一方で済ませず、更新できるところから順に入れていくのが現実的です。

よくある質問

Q10月21日の更新(3.15.1など)を入れていれば十分ですか。

A21日の更新は、同梱のpipとルート証明書の一覧(certifi)を入れ替えて、eMudhraのルートを外すものでした。今回はPython本体のsslモジュールが鍵そのものをはじくので、certifiを使わない通信や、古いpipにも効きます。Pythonは、対象のすべての版の利用者に更新を強くすすめています。

Qrequestsで verify=False にしているスクリプトも守られますか。

A守られません。今回の対策は、証明書の検証を有効にしたとき(CERT_OPTIONAL・CERT_REQUIRED)に働きます。検証を切ったCERT_NONEの通信は対象外だと、修正を提案した開発者が書いています。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月26日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします