
Appleは日本時間11月10日に配信したmacOS 27.2.1で、Mac標準のcurlなどが問題のある証明書を信頼し続けていた不具合を修正しました。更新前と更新後のMacで確認用のサイトに接続すると、更新後はcurl・python3・gitのいずれも接続を拒否しています。
macOS 27.2.1で証明書の穴を修正
証明書は、Webサイトが本物であることを示す電子的な身分証明書です。curlやgitはターミナルからWebに接続するMac標準のコマンドで、アプリの導入や開発作業の裏側でも使われています。
Appleは日本時間11月10日に、iOS27.2.1などと同時にmacOS Golden Gate 27.2.1を配信しました。Appleのサポート文書によると、27.2.1以降はcurlやgitなどのコマンドラインツールも、問題の証明書12件を受け入れません。
10月に秘密鍵の問題が見つかったのは、eMudhraの中間認証局8件です。このうちWebサイト用の6件には、別の認証局Sectigoが署名した証明書もありました。残る2件はアプリの署名用で、Appleはもともと信頼していません。12件は、この6件とSectigoが署名した6件の合計です。
ツールが読む証明書の一覧「/etc/ssl/cert.pem」からは、ルート証明書5件が外されました。ただ、macOS 27.2.1のセキュリティ情報にこの修正の項目はなく、サポート文書だけで案内されているため、アップデートの内容を見ても気づきにくい修正です。
なぜcurlなどに問題が残った?遮断が届かなかった理由
今回の問題は、10月に見つかった証明書8件にさかのぼります。インドの認証局eMudhraの中間証明書で、証明書を発行するための鍵が、256通りを試せば割り出せる状態でした。この鍵を使えば、本物と同じURLで鍵マークの付いた偽サイトを作ることも可能です。
Macには、証明書を確かめる経路が2つあります。1つはSafariなどAppleの仕組みを使うアプリ、もう1つはターミナルのツールがファイルを直接読む経路です。前者には信頼設定が自動で配信されるため、10月からOSをアップデートしなくても問題の証明書が拒否されています。
一方、ターミナルのツールが参照するcert.pemはOSに含まれるファイルで、Appleは今後のmacOSアップデートで修正すると案内していました。ところが、10月26日に配信されたmacOS 27.2でも、curlなどは問題の証明書を信頼したままです。
10月からの流れは、次のようになります。
| 日付 | 出来事 |
|---|---|
| 10月17日(協定世界時) | 研究者が弱い鍵を見つけ、各社に報告 |
| 10月19日(協定世界時) | Apple製品のSafariなどで遮断が始まる |
| 10月26日 | macOS 27.2を配信。curlなどの穴は残る |
| 11月10日 | macOS 27.2.1を配信。curlなども証明書を拒否 |
Macで確認!27.2.1ではcurlも接続を拒否
筆者のMacBook Pro(14インチ、M4、2024)で、10月の検証と同じ確認用のサイトに接続しました。このサイトの証明書は、問題の中間証明書から発行されたものです。証明書の検証を有効にした状態で接続できれば、そのツールが問題の証明書を受け入れていると判断できます。
macOS 27.2ではcurlもpython3も接続
まず、アップデート前のmacOS 27.2で試しました。curlとpython3はエラーを出さずにページを受け取り、問題の証明書を有効なものとして受け入れています。10月に試したmacOS 27.0.1のときから、状況は変わっていません。
一方、Safariと同じAppleの仕組みを使うnscurlというコマンドは、サーバーの証明書が無効だというエラーで止まりました。cert.pemにも、eMudhraのルート証明書4件と、SectigoのAAA Certificate Servicesが残ったままです。
27.2.1に更新するとcurlは接続を拒否
次に、macOS 27.2.1にアップデートし、同じサイトへの接続を試みています。curl・python3・gitのいずれも、証明書の検証エラーによって接続に失敗しました。nscurlも、更新前と同じエラーで止まったままです。
Appleの文書が名前を出しているのはcurlとgitですが、python3も同じように拒否しています。cert.pemの証明書は128件から123件に減り、問題の5件は一覧から消えました。更新前と更新後の結果は、次の表のとおりです。
| 確かめた方法 | macOS 27.2(更新前) | macOS 27.2.1(更新後) |
|---|---|---|
| curl(Mac標準) | 接続できた | 接続を拒否 |
| python3(Mac標準) | 接続できた | 接続を拒否 |
| git(Mac標準) | 未確認 | 接続を拒否 |
| nscurl(Appleの仕組み) | 接続を拒否 | 接続を拒否 |
| cert.pemの証明書 | 128件 | 123件 |

外れたルート証明書5件で困ることは?
macOS 27.2.1では、eMudhraとSectigoのルート証明書5件が、cert.pemから外されました。ルート証明書は証明書の信頼性を判断する基点となるもので、ツールは信頼されたルート証明書までのつながりを確認して、Webサイトの証明書が有効かどうかを判断します。
外れた5件はeMudhraとSectigoのルート
外れたのは次の5件です。
- emSign ECC Root CA – G3
- AAA Certificate Services
- emSign Root CA – G1
- emSign Root CA – C1
- emSign ECC Root CA – C3
このうち4件はeMudhraのルート証明書で、問題の中間証明書がつながっていたのはG3の1件です。AAA Certificate ServicesはSectigoの古いルート証明書で、Sectigoが署名した6件はここにつながっていました。
Appleは、cert.pemだけを使うツールでは、これらにつながる一部のWebサイトを検証できなくなる可能性があると注意しています。どのサイトが当てはまるかは、文書では示されていません。
GitHubなど3サイトには接続できた
そこで更新前のMacで、cert.pemの写しから5件を外した一覧を作り、curlでいくつかのサイトに接続してみました。確認用のサイトは拒否された一方、GitHubやSectigoの公式サイトには問題なく接続できています。
Namecheapのサイトは、AAA Certificate Servicesにつながる証明書を送ってきますが、証明書の検証には成功しました。Sectigoの別のルート証明書であるUSERTrustが一覧に残っており、そちらを使って検証できたとみられます。
少なくとも今回確認したGitHub、Sectigo、Namecheapでは接続できました。ただし、ほかのサイトでも同じ結果になるとは限りません。また、これは5件を外した一覧を使った模擬的な接続で、macOS 27.2.1そのもので確かめた結果とは異なります。
Macユーザーが今やること
Safariやメールなど、Appleの仕組みを使うアプリは10月から遮断済みです。今回の修正で守られるのは、主にターミナルのツールを使う人といえます。確かめておきたいことは、次の3つです。
- 「システム設定」→「一般」→「ソフトウェアアップデート」から、macOS 27.2.1にアップデートする(macOS 26はTahoe 26.7.3、macOS 15はSequoia 15.8.3)
- 10月にcert.pemから証明書を手動で削除した人は、アップデート前のcert.pemのバックアップを復元しない。不要になったバックアップは削除する
- Homebrewのcurlや、Pythonのcertifiなど別の一覧を使うツールは、それぞれをアップデートする
手動で外す手順は、アップデートできないMacのためにAppleが案内しているものです。アップデート前に取ったバックアップを戻すと、問題のルート証明書がまた一覧に入るため注意しましょう。
ターミナルで「which curl」と入力するとcurlの場所が分かります。「/usr/bin/curl」と表示されれば、今回の修正が適用されるMac標準のcurlです。ほかの場所が表示された場合は、別途インストールしたcurlの可能性があるため、証明書の一覧や更新状況を確認してください。
なお、iPhoneについては、Appleの文書はSafariなどでの遮断がApple製品全体に及ぶとしているだけで、iOSのアップデートには触れていません。iPhoneで利用者が新たに対応する必要はないとみられます。
10月の遮断から約3週間、ターミナルのツールにだけ残っていた穴は、macOS 27.2.1でふさがりました。Macでターミナルを使う人は、macOS 27.2.1へ早めにアップデートしておきましょう。
- Original:https://iphone-mania.jp/mac-608540/
- Source:iPhone Mania
- Author:茂木太郎
Amazonベストセラー
Now loading...