Закрытые ключи восьми промежуточных центров сертификации eMudhra оказались скомпрометированы. Шесть из них выпускают TLS-сертификаты, и с их ключами можно создать сертификат, который выглядит действительным для любого сайта. eMudhra и Sectigo отозвали затронутые сертификаты, а устройства Apple блокируют их автоматически – в Safari, «Почте» и приложениях, которые используют сетевые фреймворки и фреймворки безопасности Apple. Для этой блокировки обновление системы не нужно.
Исключение – инструменты командной строки на Mac. curl, git, python3, ruby, perl, openssl и другие инструменты из macOS и Command Line Tools для Xcode проверяют сертификаты по файлу /etc/ssl/cert.pem и не учитывают ни блокировку Apple, ни отзыв сертификатов. Их защищают только обновления macOS Golden Gate 27.2.1, macOS Tahoe 26.7.3 и macOS Sequoia 15.8.3. Они блокируют 12 скомпрометированных сертификатов и удаляют из файла два корневых сертификата, к которым ведут их цепочки, – emSign ECC Root CA - G3 и AAA Certificate Services, а также еще три корневых сертификата eMudhra: emSign Root CA - G1, emSign Root CA - C1 и emSign ECC Root CA - C3.
Если Mac нельзя обновить до этих версий, корневые сертификаты можно удалить из файла вручную по инструкции Apple. Ниже – ее шаги с пояснениями и наша проверка. Команды мы проверили на копии файла /etc/ssl/cert.pem, сам системный файл не меняли.
Перед началом
Для правки нужна учетная запись администратора: команды с sudo запрашивают ее пароль. Команды выполняются в приложении «Терминал», копировать их нужно целиком. Если macOS заблокирует вставку и предупредит о возможном вредоносном ПО, вставку можно подтвердить в окне предупреждения – так система защищает от мошенников, которые просят вставлять команды с сайтов. Подробнее об этом предупреждении – в справке Apple.
Удаление действует на все инструменты, которые используют /etc/ssl/cert.pem. После него они могут не открыть часть сайтов, сертификаты которых ведут к этим корневым сертификатам через другие, не скомпрометированные промежуточные центры. Особенно это касается AAA Certificate Services из шага 3.
Проверка до удаления
Команды ниже обращаются к тестовым адресам сайта, который отслеживает инцидент с eMudhra. Первый адрес использует цепочку через emSign ECC Root CA - G3, второй – через AAA Certificate Services, третья команда проверяет git:
curl -sSI https://dv-g3b-emudhra.we-have-a-problem.com/ | head -1 curl -sSI https://dv-g3b-aaa-emudhra.we-have-a-problem.com/ | head -1 git ls-remote https://git-emudhra.we-have-a-problem.com/check.git
Если curl отвечает строкой с кодом 200, а git выводит список коммитов, инструменты принимают скомпрометированные сертификаты. Ошибка «SSL certificate problem» означает, что сертификат отклонен. На нашем тестовом Mac с macOS Golden Gate 27.0.1 обе команды curl вернули код 200, а git показал коммиты.
Как удалить сертификаты
- Сделайте резервную копию файла. Если копия уже есть, команда ее не перезапишет:
[ -e /etc/ssl/cert.pem.orig ] || sudo cp -p /etc/ssl/cert.pem /etc/ssl/cert.pem.orig
- Удалите корневой сертификат emSign ECC Root CA - G3. Команда создает копию файла без этого сертификата, проверяет, что копия не пустая, и заменяет ею исходный файл. При успешном выполнении она ничего не выводит:
t=$(mktemp) && awk -v s='=== /C=IN/OU=emSign PKI/O=eMudhra Technologies Limited/CN=emSign ECC Root CA - G3' '/^(===|###) /{skip=0} $0==s{skip=1} !skip' /etc/ssl/cert.pem > "$t" && [ -s "$t" ] && sudo install -m 0644 -o root -g wheel "$t" /etc/ssl/cert.pem; rm -f "$t"
- По желанию удалите корневой сертификат AAA Certificate Services. Без этого шага инструменты продолжат принимать 6 сертификатов eMudhra, перекрестно подписанных Sectigo: их цепочка ведет к AAA Certificate Services. Команда работает так же, как в шаге 2:
t=$(mktemp) && awk -v s='=== /C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services' '/^(===|###) /{skip=0} $0==s{skip=1} !skip' /etc/ssl/cert.pem > "$t" && [ -s "$t" ] && sudo install -m 0644 -o root -g wheel "$t" /etc/ssl/cert.pem; rm -f "$t"
- Проверьте результат. Команда выводит те из двух сертификатов, что остались в файле. Если удалены оба, она ничего не показывает:
openssl crl2pkcs7 -nocrl -certfile /etc/ssl/cert.pem | openssl pkcs7 -print_certs -noout | grep -E 'emSign ECC Root CA - G3|AAA Certificate Services'
Если команда выдает ошибку, верните исходный файл из резервной копии:
sudo cp -p /etc/ssl/cert.pem.orig /etc/ssl/cert.pem
Мы проверили команды на тестовом Mac с macOS Golden Gate 27.0.1 на копии файла. На исходном файле команда из шага 4 нашла оба сертификата – по две строки на каждый. После шага 2 curl отклонил сертификат первого тестового адреса, но второй адрес по-прежнему открывался через AAA Certificate Services. После шага 3 оба адреса вернули ошибку «SSL certificate problem: unable to get local issuer certificate», git тоже отказался подключаться, а команда из шага 4 больше ничего не выводила.
После обновления macOS
Обновление системы может вернуть исходный файл. После каждого обновления выполняйте команду из шага 4 и, если удаленные сертификаты снова в файле, повторите шаги 2 и 3. После перехода на macOS Golden Gate 27.2.1, macOS Tahoe 26.7.3 или macOS Sequoia 15.8.3 ручная правка больше не нужна. Apple советует удалить резервную копию и не восстанавливать копию, сделанную до обновления:
sudo rm /etc/ssl/cert.pem.orig