Как вручную удалить скомпрометированные сертификаты eMudhra на Mac

2026-11-10 73 комментарии
Инструкция для Mac, которые нельзя обновить до macOS Golden Gate 27.2.1, Tahoe 26.7.3 или Sequoia 15.8.3: как убрать из /etc/ssl/cert.pem корневые сертификаты emSign ECC Root CA - G3 и AAA Certificate Services, чтобы curl, git и другие инструменты перестали им доверять.

Закрытые ключи восьми промежуточных центров сертификации 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 показал коммиты.

Как удалить сертификаты

  1. Сделайте резервную копию файла. Если копия уже есть, команда ее не перезапишет:
[ -e /etc/ssl/cert.pem.orig ] || sudo cp -p /etc/ssl/cert.pem /etc/ssl/cert.pem.orig
  1. Удалите корневой сертификат 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"
  1. По желанию удалите корневой сертификат 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"
  1. Проверьте результат. Команда выводит те из двух сертификатов, что остались в файле. Если удалены оба, она ничего не показывает:
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
Читаете нас в Google? Добавьте Comss.ru в источникиДобавьте Comss.ru в источники Google
Новые статьи будут чаще в «Главных новостях» Google. Без подписок и уведомлений, отключается в один клик. Нужен вход в аккаунт Google.Наши статьи будут чаще в «Главных новостях». Нужен вход в Google.
Добавить в Google
© .
Комментарии и отзывы

Нашли ошибку?

Новое на сайте