速報

JAL・JTAの予約情報約9万2千人分に外部参照の形跡|対象項目と利用者対応

CATEGORY

Pythonが漏えいしたCA鍵を遮断|pip更新と仮想環境の点検手順

※本ページのリンクにはプロモーションが含まれています。

開発者が問題の証明書を除き複数のPython実行環境の信頼情報を更新する概念イラスト

この記事のポイント

脆弱性
CVE-2026-115557
深刻度

CRITICAL9.4

対象
CPython:3.11.18・3.12.16・3.13.18・3.14.10・3.15.2で対応する各系列
悪用状況
不明
推奨対応
配布元の修正済みPythonへ更新し、仮想環境ごとのpipとcertifi、実行パス、TLS設定を点検する。

目次

Python開発チームは2026年10月26日、漏えいしたeMudhraの中間鍵を拒否する緊急セキュリティリリースを5系列向けに案内しました。PythonでWebアプリを動かす担当者だけでなく、pipでを取得する・環境の管理者も対象です。Python本体、仮想環境ごとのpip、証明書バンドルを分けて更新し、実際の実行経路に対策が届いたか確認してください。

新しい点は、証明書バンドル側の信頼削除に加え、Pythonのsslモジュールが問題の鍵を遮断する防御が提供されたことです。Python開発チーム:5系列の緊急セキュリティリリースは、通常のpip利用ではpip自身が未更新でも、この鍵を利用する攻撃から保護されると説明しています。ただし、pipやOSの更新を不要とする案内ではありません。

本稿は10月28日に一次資料を確認した更新情報と実践手順です。Python 3.15.2の個別配布ページのリリース日は10月25日、5系列をまとめた告知は26日であり、確認日とは区別します。以下の点検・更新手順は本サイトの提案で、実環境で攻撃や動作を再現した結果ではありません。

スポンサーリンク

なりすましが問題になるのは外向きのTLS接続

Python公式:eMudhra/emSign問題に関する利用者向け案内は、影響する信頼情報が残るクライアントでは、python.orgやpypi.orgへの接続もの対象になり得ると注意しています。攻撃者が偽のを利用し、通信経路へ介入できる条件が問題です。Pythonを使うだけで侵害が成立する、という意味ではありません。

Web運用では、利用者から自社サイトへのと、サーバーやビルド環境から外部へ出るHTTPSを分けます。自社サイトの証明書が別のCA発行だから安全、と判断すると、パッケージ取得や外部接続を見落とします。逆に、今回の発表だけで自社サイトのが漏れたと結論付けることもできません。

優先して確認したいのは、外部から依存パッケージを取得するCI、コンテナのビルダー、開発端末、定期バッチです。外部接続のある本番アプリも対象に加えます。公開資料は対策の必要性を説明するもので、本稿が読者環境の盗聴やパッケージ改変を観測したわけではありません。

利用系列を維持して修正版へ進む

公式告知が案内する更新先は下表です。3.15.2と3.14.10にはバイナリーインストーラーがあり、3.13.18、3.12.16、3.11.18はソースのみのセキュリティリリースです。Python公式:Python 3.15.2の配布と修正内容も、-2026-115557を修正内容として掲載しています。

利用系列今回案内された上流の提供形態
3.153.15.2バイナリーとソース
3.143.14.10バイナリーとソース
3.133.13.18ソースのみ
3.123.12.16ソースのみ
3.113.11.18ソースのみ

CVE Program:CVE-2026-115557では、Python Software Foundationが 4.0を9.4(Critical)と評価しています。これは本稿の主題であるCPythonのCVEの値で、certifiやCA侵害全体へ流用する評価ではありません。レコードの初回公開日は10月24日、更新日は27日で、修正リリースや事案の発生日とは区別します。

OSやホスティングの配布物は、提供元の修正取り込み状況を確認して更新します。上流の版番号と一致しなくても修正が取り込まれる場合があるため、版だけで判定せず配布元の変更履歴も残します。システムが使うPythonを独断で別系列へ置き換える作業と、今回のセキュリティ更新は分けてください。

公式利用者向け案内は、Python 3.10以前をサポート終了として、セキュリティ修正の対象外としています。古い環境を使う場合は、更新可能な系列への移行を計画します。新しいpipだけを入れれば古いの保守問題も解消する、という扱いにはしません。

スポンサーリンク

Python本体とcertifiの二つの防御を区別する

CPython:CVE-2026-115557の修正PRは、証明書チェーンに含まれるの情報であるSPKIを照合し、問題の鍵を使うチェーンを拒否すると説明しています。同じ鍵を再利用するクロス署名証明書も対象にする設計です。証明書ファイルの名前だけを見て拒否対象を探す対策とは異なります。

これは信頼ストア更新の遅れを補うです。OSのCAストア、アプリに同梱されたcertifi、Pythonのssl実装は別々の管理対象です。ランタイム側の遮断が入っても、別のTLS実装を使うツールへ自動的に同じ対策が届くとは限りません。uvなどを併用する環境は、その提供元の案内に沿って別に確認します。

certifi:emSignルート証明書の信頼削除は、鍵の侵害を受けてemSignルート証明書の信頼を削除する修正を案内しています。一方、Pythonの利用者向け案内は、影響のないemSignルートとの互換性を考慮してcertifi 2026.10.19以降を推奨しています。古い勧告の最初の修正版だけを固定せず、現在の推奨を確認します。

pipの同梱バンドルを見落とさない

pip公式:26.2.2の変更履歴には、10月20日の26.2.2で同梱certifiを2026.10.19へ更新したと記されています。アプリが通常の依存関係として持つcertifiと、pipに同梱されたcertifiは同じ更新単位とは限りません。環境でcertifiを更新した記録だけで、pipの対応まで完了したと判断しないでください。

pip公式:HTTPS証明書の検証と信頼ストアは、既定ではシステムの証明書をcertifiに追加して利用すると説明しています。OSの信頼ストアだけを直す作業が、古いpipの同梱バンドルの更新を必ず代替するわけではありません。配布元による変更もあるため、対象のpipの配布形態と実行中の版を対応させて確認します。

まず、更新対象のアプリやCIが実際に呼ぶPythonを指定して点検します。次は対象環境のPythonで実行する読み取り例です。シェルで最初に見つかるpythonと、サービスの起動コマンドが使う実行ファイルが一致するとは限りません。

python -c "import sys, ssl; print(sys.executable); print(sys.version); print(ssl.OPENSSL_VERSION); print(ssl.get_default_verify_paths())"
python -m pip --version
python -m pip show certifi

sys.executableで実行ファイル、pipの出力でインストール先と版を記録します。certifiが見つからなくても、pipに同梱物がない証拠にはなりません。また、sslの既定パスは独自SSLContextやライブラリーが選ぶバンドルをすべて示すものではありません。アプリの接続設定と照合する入口として使います。

スポンサーリンク

既存の仮想環境も更新対象に含める

Python公式:venvによる仮想環境によると、仮想環境は基になるPythonの上に作られ、独立したパッケージ群を持ちます。そのため、端末全体でpipを一回更新しただけでは、各プロジェクトの仮想環境を確認したことになりません。CI、常駐バッチ、開発用ツールが持つ環境も一覧にします。

本サイトの推奨は、基になるPythonを修正済みに更新し、依存関係を記録したうえで新しい仮想環境を作り、業務試験後に切り替える方法です。既存環境を無条件に削除せず、アプリのソースや設定を仮想環境の中に置いていないことも確認します。次は修正済みPython 3.15を選択できる環境での作成例です。

python3.15 -m venv .venv-ca-refresh
.venv-ca-refresh/bin/python -m pip install --upgrade "pip>=26.2.2"
.venv-ca-refresh/bin/python -m pip install --upgrade "certifi>=2026.10.19"
.venv-ca-refresh/bin/python -m pip --version

この例はアプリ依存関係の復元までを含むものではありません。以後の依存関係の導入で古いcertifiを固定し直さないよう、requirementsやを確認します。Windowsでは仮想環境の実行ファイルがScripts配下になるため、同じパスをそのまま使わず、選択した環境を明示します。

未更新の環境から更新する場合の信頼を確保する

上の更新コマンドは、修正済みPythonの通常の証明書検証を使うことが前提です。未更新のPythonと古いpipを使ったまま、外部から更新物を取得する場合は、その取得経路自体の信頼を確認する必要があります。証明書のエラーを消す目的で検証を無効にしてはいけません。

Python公式の利用者向け案内には、pipのwheelの配布URLとSHA-256を指定して導入する手順があります。Python本体を先に更新できない場合は、その原文にあるURLとハッシュを照合して利用してください。別経路から取得した任意のwheelを同じものとして扱ったり、ハッシュを省いたコマンドへ書き換えたりしないことが重要です。

社内ミラーやオフライン配布を使う場合も、更新物の出所、ハッシュ、配布先を記録します。ミラーへ登録しただけで終わらず、各環境が修正済み成果物を取得したか確認します。OS管理のPythonには、その配布元が許す更新方法を選び、管理外のpipで一律に上書きする手順にしません。

接続成功だけでは遮断を確認したことにならない

Python公式:sslモジュールが説明する証明書検証を維持したうえで、通常使うパッケージ取得と外部API接続の回帰試験を行います。正常なHTTPS接続が成功しても、問題の鍵を拒否できることを直接証明する試験ではありません。修正取り込みの記録と、実行中のPython・pipの確認を組み合わせて完了判定します。

証明書エラーが出た場合は、接続先名、、時刻、実際に使うCAバンドルを切り分けます。企業プロキシ用のCAが必要な構成でも、問題の信頼を戻すことと混同しないでください。独自の検証無効化が残っていないかも調べ、成功させるための例外を恒久設定へ持ち込まないようにします。

コンテナやCIイメージは、修正済みのPythonと依存関係を含む成果物を作成し、実際のジョブへ切り替えます。ノードの更新やレジストリーへの登録だけで完了にせず、ジョブ内で実行パスと版を確認します。詳細なコンテナ更新の考え方は関連記事へ譲り、今回はPython環境ごとの確認を完了条件にします。

変更記録には、環境名、Pythonの配布元と修正根拠、実行ファイルのパス、pipの版、アプリ用certifiの版、業務試験の結果を一組で残します。取得済みの依存関係に不審な差分がある場合は、更新作業とは別にビルド記録と成果物を調べます。今回の更新だけから過去の侵害の有無を判断することはできません。

関連記事

GKEのCA失効対応とコンテナ・Webhookの確認は、ノードとアプリ用イメージを分けた更新を説明しています。Pythonの対策とは管理対象を区別して利用してください。

出典・一次情報

本記事は以下の公開情報をもとに作成しています。最新の状況は各リンク先で確認してください。

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

あわせて確認したい対策・解説

ほかの脆弱性

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

プロキシ

通信の間に立ち、利用者の代わりにリクエストを送ったり受け取ったりする中継の仕組みやサーバー。

詳しく見る

ロックファイル

パッケージマネージャーが、実際に入れた依存パッケージのバージョンを記録するファイル。package-lock.jsonなど。

詳しく見る

キャッシュ

一度取得したデータを一時的に保存しておき、次に使うときに再利用して処理を速くする仕組み。

詳しく見る

多層防御

一つの対策に頼らず、複数の対策を重ねて守る考え方。一つが破られても、ほかの対策で被害を防ぐ・小さくする。

詳しく見る

公開鍵

公開鍵暗号で、誰に渡してもよい鍵。データの暗号化や、秘密鍵で作られた署名の確認に使う。

詳しく見る

ランタイム

プログラムを実行するときに必要な環境や仕組み。Node.jsやブラウザのJavaScriptの実行環境など。

詳しく見る

CVSS

脆弱性の深刻度を0.0〜10.0の数値で評価する共通の基準。数値が大きいほど深刻度が高い。

詳しく見る

パッチ

ソフトウェアの不具合や脆弱性を修正するための更新プログラム。適用することで既知の問題を解消する。

詳しく見る

CVE

公開された脆弱性に付けられる世界共通の識別番号。「CVE-2026-12345」のように年と連番で表す。

詳しく見る

秘密鍵

公開鍵暗号で、持ち主だけが厳重に保管する鍵。署名や、公開鍵で暗号化されたデータの復号に使う。

詳しく見る

API

ソフトウェアやサービスの機能を、ほかのプログラムから決まった方法で呼び出して使えるようにした窓口。

詳しく見る

HTTPS

HTTPの通信をTLSで暗号化したもの。Webサイトとの通信を盗み見や改ざんから守る。

詳しく見る

電子証明書

公開鍵の持ち主が誰かを、認証局が証明する電子的な証明書。HTTPSのサーバー証明書やソフトウェアの署名に使う。

詳しく見る

中間者攻撃

通信する二者の間に攻撃者が割り込み、通信の内容を盗み見たり書き換えたりする攻撃。

詳しく見る

TLS

インターネット上の通信を暗号化し、盗み見や改ざん、なりすましを防ぐための仕組み(プロトコル)。HTTPSで使われる。

詳しく見る

ビルド

ソースコードなどから、実際に動かしたり配布したりできる形の成果物を作る作業。

詳しく見る

CI/CD

コードの変更をきっかけに、テストやビルド、本番への反映までを自動で行う開発の仕組み。

詳しく見る

依存関係

プログラムが動くために必要な、ほかのライブラリやパッケージとの関係。また、その必要な部品そのもの。

詳しく見る

認証局

電子証明書を発行し、公開鍵の持ち主が本物であることを保証する機関。ブラウザはあらかじめ信頼する認証局を持っている。

詳しく見る