
Офлайн-сканер для компрометации ключа CA eMudhra/emSign в октябре 2026 года, находит затронутые сертификаты в доверенных хранилищах ОС, наборах CA, Java cacerts, NSS и образах контейнеров.
Инструменты обнаружения для компрометации закрытого ключа промежуточного УЦ eMudhra / emSign в октябре 2026 года. Восемь промежуточных УЦ были выпущены с ключами P-384, чьи закрытые скаляры были крошечными целыми числами (восстановленные значения 4, 56, 66, 115, 155, 156, 230, 237), поэтому любой может тривиально подделать сертификаты, выстраивающиеся в цепочку до них. Браузеры и хранилища доверия ОС быстро добавили их в недоверенные — но большинство хранилищ доверия, не относящихся к браузерам, не обновляются автоматически, и именно это находит данный инструмент.
Статус: инцидент активен, поэтому считайте встроенные IOC снимком состояния (при каждом запуске выводится их дата
generated). Чтобы обновить их, обновитеtools/sources/*.jsonиз вышестоящего трекера и повторно запустите генератор (см. ниже).
trustscan (Python) и trustscan.ps1 (Windows/PowerShell) выполняют инвентаризацию
хранилищ доверия и наборов CA на хосте и помечают всё, что соответствует затронутым
сертификатам. Только стандартная библиотека + cryptography; никаких других зависимостей.
Требуется Python 3 и cryptography (единственная зависимость):
pip install -r requirements.txt
# scan this host's trust stores and CA bundles
python trustscan.py
# machine-readable for ticketing
python trustscan.py --format csv > findings.csv
# Windows-native: cert stores (both scopes) + GPO roots + env bundles
pwsh -File trustscan.ps1
Коды выхода: 0 = чисто, 1 = найдены находки, 2 = ошибка. Результаты только с уровнем INFO (см.
--flag-aaa ниже) завершаются с кодом 0.
Каждый запуск заканчивается однострочным предупреждением о пути кросс-подписи AAA (см.
Область применения и ограничения). В режиме text оно является
частью отчёта; в режиме json/csv оно выводится в stderr, чтобы машиночитаемый
вывод оставался чистым.
Каждый сертификат, найденный в любом из указанных ниже мест, получает отпечаток и проверяется четырьмя способами:
| Совпадение | Уровень серьёзности | Значение |
|---|---|---|
compromised_ca_cert | CRITICAL | точное совпадение с скомпрометированным промежуточным сертификатом (SHA-256 сертификата) |
compromised_key_reuse | CRITICAL | другой сертификат, несущий скомпрометированный ключ (SPKI SHA-256) — выявляет кросс-подписи Sectigo и любые перевыпуски |
issued_by_compromised_ca | HIGH | конечный сертификат/суб-CA, чей AuthorityKeyIdentifier указывает на скомпрометированный промежуточный сертификат — подделываемый |
distrust_root_present | CRITICAL | недоверенный корневой сертификат emSign всё ещё является доверенным здесь. Его собственный ключ цел — но ключи промежуточных сертификатов публичны, поэтому пока этот корень доверенный, поддельный сертификат для любого домена проходит проверку у каждого клиента, который не проверяет отзыв (большинство небраузерных клиентов). Удалите его / обновите хранилище. Сам по себе это не закрывает путь кросс-подписи AAA (ниже) |
Ещё одна проверка является опциональной (--flag-aaa / -FlagAaa):
| Совпадение | Уровень серьёзности | Значение |
|---|---|---|
cross_sign_root_present | INFO | присутствует легитимный корневой сертификат Sectigo AAA Certificate Services. Он кросс-подписал восемь промежуточных сертификатов, поэтому служит якорем для их второго пути доверия; его собственный ключ цел. Mozilla и Chrome исключили его в апреле 2025 года, но Windows, Apple, старые пакеты Linux и многие хранилища ключей Java всё ещё доверяют ему. Сообщается только по запросу, для команд, решающих, удалять ли его (обновление Debian для этого инцидента удаляет); никогда не влияет на код выхода |
По умолчанию AAA Certificate Services не помечается: его собственный ключ цел, а его удаление — осознанный выбор, а не стандартное средство исправления. См. ограничения ниже, чтобы понять, почему это важно.
trustscan| Источник | Что это | Проверяемые расположения |
|---|---|---|
certifi | CA-бандл Python | certifi.where() (определяется во время выполнения) |
bundles → дистрибутив | агрегаты ca-certificates ОС | Debian/Arch/Alpine /etc/ssl/certs/ca-certificates.crt · RHEL /etc/pki/tls/certs/ca-bundle.crt, /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem, консолидированный Java cacerts, каталог администратора anchors/ · SUSE /etc/ssl/ca-bundle.pem, /var/lib/ca-certificates/ca-bundle.pem · исходный каталог Debian /usr/share/ca-certificates/ · /etc/ssl/cert.pem |
bundles → FreeBSD | ca_root_nss | /usr/local/share/certs/ca-root-nss.crt · /usr/local/etc/ssl/cert.pem |
bundles → Homebrew / MacPorts | brew / port ca-certificates, openssl | /opt/homebrew/etc/ca-certificates/cert.pem · /opt/homebrew/etc/openssl*/cert.pem · /usr/local/etc/... (Intel) · /opt/local/etc/{openssl,ssl}/cert.pem |
bundles → curl | автономный бандл curl | /usr/local/share/curl/curl-ca-bundle.crt · /opt/local/share/curl/curl-ca-bundle.crt · C:\Program Files\Git\...\ca-bundle.crt |
bundles → conda | ssl/cacert.pem каждого окружения | $CONDA_PREFIX · /opt/conda · ~/anaconda3, ~/miniconda3, ~/miniforge3 (включая envs/*) |
bundles → AWS CLI v2 | встроенный botocore | /usr/local/aws-cli/.../botocore/cacert.pem · C:\Program Files\Amazon\AWSCLIV2\... |
bundles → облачные SDK / реестр / экосистема | дополнительные встроенные бандлы | gcloud / Azure CLI third_party/certifi · реестр контейнеров /etc/{docker,containers}/certs.d/*/ · Perl Mozilla::CA · Erlang/Elixir certifi |
bundles → pip | встроенный в pip certifi | <pip>/_vendor/certifi/cacert.pem (определяется через import pip) |
nss | Firefox / Thunderbird / Chrome-Linux + системная БД NSS | ~/.mozilla/firefox/*/cert9.db · ~/.thunderbird/*/cert9.db · ~/snap/firefox/common/.mozilla/firefox/*/cert9.db · ~/.pki/nssdb/cert9.db · /etc/pki/nssdb/cert9.db · %APPDATA%\Mozilla\Firefox\Profiles\*\cert9.db · %APPDATA%\Thunderbird\Profiles\*\cert9.db |