GitHub Actions と eMudhra の中間 CA の鍵の漏れ(CVE-2026-111943):まだ信用しているランナーと、macOS のランナーでの直し方
2026年10月17日、eMudhra の中間 CA の証明書8つの秘密鍵が漏れていたことが示されました(公表のページ)。その鍵を持つ人は、どのホスト名の証明書でも発行できます。ブラウザーと OS 自身の通信は止めています(Firefox と Chrome は10月17日から、Microsoft の製品は10月20日から、Apple の製品は10月22日から)。ところが、curl・git・Python・pip・Node.js・Java のように CA のバンドルのファイルで証明書を確かめる道具は、そのファイルが更新されるまで信用し続けます。GitHub のホストのランナーで依存を取ってきてリリースを送るのはこの道具なので、通信の途中にいる人がパッケージのレジストリや git のリモートになりすませます。
2026年11月5日の時点のイメージごとの状況
- Ubuntu 24.04 と 26.04:直っています。イメージ 20261026.354.1 と 20261026.180.1 では
ca-certificatesが 20260816ubuntu0.24.04.1 と 20260816ubuntu0.26.04.1 で、10月29日に報告された試しでは curl・Composer・システムの Node.js が鎖を拒みました(runner-images #15018)。Ubuntu 22.04 は、Ubuntu の直ったパッケージが 20260816ubuntu0.22.04.1 です。届いたイメージの版を確かめます(下)。 - ランナー自身が持つ Node.js 20 は、まだ信用しています。アクションは9月から Node 24 で動いていて、GitHub は11月の後半のリリースでランナーから Node 20 を外す予定です(同じ issue)。
- macOS:Apple の
/usr/bin/curl・git・python3が確かめに使う/etc/ssl/cert.pemは、どの macOS のイメージでも2021年の日付のままで、Apple は更新していません(#15186)。GitHub は11月4日に、macOS 15 と macOS 26 の Arm64 のイメージ・xcode-27・macos-26-intel・macos-15-intelでこのファイルを直したと言い、Intel のイメージの Homebrew のca-certificatesの直しは米国東部時間の11月5日の終わりまでの予定としました(#15228)。新しいイメージの版がジョブに届くまでには数日かかり、何週間も前のイメージが届き続けたジョブもあるので(#15208)、直ったと決めずに確かめます。 - Windows は2つの鎖を
CRYPT_E_REVOKEDで拒みます(#15018)。Git for Windows 2.56.0.windows.2 がいくつかの実行で受け入れたのを見た人がいます。Git for Windows 2.56.0.3 で直っています。
ワークフローからの確かめ方
公表のページは、漏れた中間 CA の証明書を使う試しのホストを置いています。証明書のエラーになれば、その道具は信用していません:
- name: Check the eMudhra chains
shell: bash
run: |
for h in dv-g3b-emudhra dv-g3b-aaa-emudhra; do
if curl -sS -o /dev/null "https://$h.we-have-a-problem.com/"; then
echo "$h: trusted"
else
echo "$h: rejected"
fi
done
「trusted」なら、そのランナーのその道具は漏れた中間 CA をまだ受け入れています。道具ごとに別のバンドルを使うことがあるので、ジョブで使う道具(git ls-remote・Python・Node.js)も同じように試します。通信の不具合も「rejected」に見えるので、手を打つべきなのは「trusted」の方です。
macOS では、/etc/ssl/cert.pem に該当のルートが残っている間、このステップが失敗します(#15228 で GitHub が示した確かめ方):
- if: runner.os == 'macOS'
run: |
openssl crl2pkcs7 -nocrl -certfile /etc/ssl/cert.pem | openssl pkcs7 -print_certs -noout \
| grep -E 'emSign ECC Root CA - G3|AAA Certificate Services' && exit 1 || echo "cert.pem is fixed"
Ubuntu では、dpkg-query -W ca-certificates で入っている版が出ます。
イメージより先に macOS で直す
- ジョブの最初のステップで、
actions/checkoutより前に、/etc/ssl/cert.pemから該当のルートを外します。checkout は git を使うからです(#15228 の GitHub の助言)。curl 自身の CI は、小さな複合アクション macos-fix-certs でこれをしています。emSign ECC Root CA - G3・emSign ECC Root CA - C3・emSign Root CA - C1・AAA Certificate Services の項目を除き、結果をsudoで置き直します。作った人は、前の版が外さなくてよいルートまで外していたと書いているので、使い回す前に一覧を見直します。 - Apple の
python3はSSL_CERT_FILEを無視するので、それだけを設定しても効きません。Apple の Python のpipはルートの写しを自分で持っているので、PIP_CERT=/etc/ssl/cert.pemで直したファイルを使わせます(#15228)。 - Homebrew の curl と git は Homebrew の
ca-certificatesで確かめます。直ったのは 2026-09-25_1 からです。イメージは Homebrew の自動の更新を切っているので、古い版のままのイメージがあります(#15191)。brew updateのあとにbrew upgrade ca-certificatesを流すと、直った版になります。
ルートを自分で持っている道具
システムのファイルを直しても、自分の一覧を持つ道具には届きません。公表のページの一覧から、直った版:
- Node.js 26.12.1・24.22.1・22.23.4(
actions/setup-nodeで入れるもの)。 - Python 3.15.2・3.14.10・3.13.18・3.12.16・3.11.18(
actions/setup-pythonで入れるもの。3.11〜3.13 の直った版は Linux 向けしかありません:CVE-2026-115557 と setup-python)、pip 26.2.2、uv 0.13.5、PyPI に公開するアクション 1.14.3。 - Go 1.27.3・1.26.10。CVE-2026-111943 はこの直しの記録で、10月21日に公開されました。システムの一覧が古くても
crypto/x509が中間 CA を拒むための一覧です。そのため、古い Go で作ったバイナリーに対して、検査の道具はこれを「stdlib」の脆弱性として出します。多くの追跡の場では、同じ番号を出来事全体に使っています。これらの版でビルドし直します(ワークフローのどこで Go の版が決まるか)。 - Java:Oracle JDK 27.0.1.0.3・25.0.5.0.3・21.0.13.0.3・17.0.21.0.3・11.0.33.0.3・8u511 b33。OpenJDK のビルドはまだでした。
actions/setup-javaは選んだ JDK を入れるだけなので、直しは、直った配布元と版を選ぶことで得ます(setup-java #1305)。 - GitHub CLI 2.102.1、Git for Windows 2.56.0.3。
actions/setup-python 自体は、ランナーの Node 24 で Python を取ってきます。直った Ubuntu のイメージでは、この Node 24 が鎖を拒みます(setup-python #1382)。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べるので、失敗し始めた確かめのステップがすぐ分かり、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、Apple と macOS は Apple Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Apple Inc.・eMudhra・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:xcode-27 と iOS 27.1 のシミュレーター · macOS 14 の終わり · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English