【悲報】OS更新「で、安心」できたのは最初だけ。Pythonの”信用する仕組み”が裏口から危うくなっている
HTTPSの通信や、ライブラリ(パッケージ)のダウンロードを支えているのが「証明書」だ。このサイトは本物ですよ、この通信は正規の相手ですよ、と保証してくれる信用の証し。その信用の土台そのものに、深刻な問題が発生している。Pythonの開発環境を使っているなら、今日中にでも確認しておきたい話だ。
きっかけは、ある認証局(CA)に関連する8枚の中間証明書で見つかった秘密鍵の問題だ。古い証明書リストを使い続けている環境では、偽の証明書を「正しい」と信用してしまう恐れがある。通信経路に割り込める位置に攻撃者がいれば、不正な証明書を使って正規サイトになりすますことが理論上可能になる。Python本体のダウンロード元や、パッケージ保管庫への接続も対象になり得るという。
「サイトが乗っ取られた」わけではない、しかし
誤解されやすいが、Pythonの公式サイトやパッケージ保管庫が侵入されたと確認された話ではない。HTTPSという通信方式そのものが全部破られたわけでもない。問題は”信用する側”の設定にある。正しいURLを入力したつもりでも、途中で偽の証明書を本物と見なしてしまう――「怪しいサイトを踏まない」という定番の注意が通用しない層の話なのだ。画面の鍵マークは「暗号化されているか」は示しても「相手が本物か」までは保証しない。普段その2つを分けて考えていない人ほど、足元をすくわれやすい。
最大の問題児は「pip」――OSの指示を聞かない内部リスト
今回の件で特に注意が必要なのが、ライブラリをインストールするためのツール「pip」だ。古いpipは、OSが持つ証明書リストとは”別に”、内部に同梱した証明書リスト(certifi)を信頼する仕組みになっている。つまり、OS側で問題のある証明書を無効化しても、古いpipの中だけはその証明書を信頼し続けている――という落とし穴がある。家の鍵を全部交換したつもりが、勝手口の鍵がそのままだった、という状況に近い。
更新の目安となるバージョンも示されている。pipは26.2.2以上、certifiは2026.10.19以上、uvは0.13.4以上。Python 3.15、3.14、3.13の各系列には、pipを更新した緊急リリースも出ている。certifiには前日の修正版も存在するが、問題のない証明書との混同も考えて、10月19日以降の版が推奨されている。
「本体を入れ替えた」で終わらない沼
やっかいなのは、適用範囲の広さだ。Python本体を入れ替えれば、既存の仮想環境まで自動で全部直る、ということは起きない。すでに作り済みの仮想環境の中のpipやuvも、個別に更新する必要がある。コンテナについては、古いレイヤーのキャッシュを使わずに再構築することが案内されている。「昨日と同じ環境です。だから昨日と同じ危険もあります」という、再現性の良さが裏目に出る構図だ。
パソコン全体は更新済みなのに、開発環境の中だけに古いリストが眠り続ける。放置された昔のプロジェクト、CIのパイプライン、ローカルのコンテナイメージ。場所ごとに「どこに入っているか」を確かめる作業は地味だが、これをサボった瞬間に更新の意味が薄れる。公式の案内では、ダウンロードするpipのファイルをハッシュ値で指定して取得する方法も示されている。エラーが出たからといって証明書の検証を無効化する――警報がうるさいから電池を抜くような真似だけは、今回ばかりは逆効果だ。
ネットの反応
いやぁ・・・これ結構めんどいぞ・・・
証明書絡みの問題は昔からあるね。今回は独自にキャッシュしてしまうという仕様が問題だった様だけど、証明書自体はツリー構造で上位の認証局によって認証されている。昔はその中間にある認証局自体が偽物ってすごいのもあったからね
インドだから日本関係ないとか言ってる奴いるけど全く違うからな。DNSやられて経路を捻じ曲げられたら、日本のシステム・開発端末がやられ放題だからな
CUDAが最新に追いつかないせいで、まだPython3.12、3.10使ってる環境も多いのでは
この動画見てとりあえず更新しといた。趣味の範囲でさわってる程度だから、依存関係は難しくて無限に時間かかるところだった
Ruby「怖いわ~~」 Java「せやな」
OS更新したよ、更新したよ、の横から「昔作った仮想環境です」って出てくるな。お前もいたのかよ
この脆弱性はAIが見つけてるから、そのうちAI同士のセキュリティ代理戦争が起こりそう
AIの所感
今回の事件の本質は「Pythonが危ない」ではない。信用の仕組みは、それを参照する软件が古いままなら意味をなさない、という構造そのものだ。OS・言語本体・パッケージツール・同梱ライブラリ・仮想環境・コンテナイメージ。信用の判断材料が階層化すればするほど、「更新したつもり」の隙間が増えていく。しかも修正を取りに行く通信自体が証明書の信用に依存しているというループまである。対策の要諦は派手なツールではなく、pip・certifi・uvのバージョン確認と、休眠中の仮想環境やコンテナまで含めた棚卸しという、驚くほど地味な作業だ。最新版にしろ、という5文字は短い。しかし「どこに入っているか」は長い。この非対称と付き合っていくのが、開発者の日常のセキュリティなのだろう。

