Skip to content

Guide

Is my Mac affected by the eMudhra certificate incident?

Your browsers already block the eight eMudhra certificates. The tools that carry their own list of trusted certificates don't, until you update them. Here's which ones, the version that fixes each, and the commands to check.

By the iKnowMyMac team · Updated · 6 min read

The short answer

Safari, Chrome and Firefox on a Mac are covered: Chrome and Firefox blocked the affected certificates on 17 October and Apple on 19 October. What can still trust them is software with its own certificate bundle. Each is fixed from a specific version: Python certifi 2026.10.19, Node.js 26.12.1, 24.22.1 or 22.23.4, Go 1.27.3 or 1.26.10 (programs built with Go have to be rebuilt), Homebrew ca-certificates 2026-09-25_1, and Composer ca-bundle 1.6.0 or 1.4.16. Check with python3 -m pip show certifi, node -v, go version and brew list --versions ca-certificates. CERT-In said on 21 October that there was no confirmed malicious use of the keys.

On this page

What happened

Eight intermediate certificate authority (CA) certificates run by eMudhra had private keys that could be recovered trivially. Anyone holding such a key could issue certificates that software trusting these intermediates would accept. They chain to emSign Root TLS CA - G3 and emSign ECC Root CA - G3, and were also cross-signed by Sectigo AAA Certificate Services, so a certificate store that trusts any of those roots could accept them until it blocks the eight.

  • EM DV TLS CA - G3B, EM DV TLS CA - G3C

    Used for
    Website certificates (domain validated)
  • EM OV TLS CA - G3B, EM OV TLS CA - G3C

    Used for
    Website certificates (organisation validated)
  • EM EV TLS CA - G3B, EM EV TLS CA - G3C

    Used for
    Website certificates (extended validation)
  • EM OV CS CA - G3B, EM OV CS CA - G3C

    Used for
    Code signing
The eight affected intermediate certificates

CERT-In's advisory CIAD-2026-0050 of 21 October says the public disclosures don't establish confirmed malicious use of the keys as of that date.

Safari, Chrome and Firefox: already blocked

  • Google Chrome

    Blocked on
    17 October
    What it covers on a Mac
    Chrome. Google says the block reached users without a browser update or restart. It covers the six website intermediates.
  • Mozilla Firefox

    Blocked on
    17 October
    What it covers on a Mac
    Firefox, through its OneCRL block list.
  • Apple

    Blocked on
    19 October
    What it covers on a Mac
    Safari, and apps that use macOS's own certificate checks.
  • Microsoft

    Blocked on
    20 October
    What it covers on a Mac
    Windows. Nothing on your Mac.
Who blocked the certificates, and when (2026)

So for browsing, there's nothing to change. Keep your browsers and macOS up to date as usual.

What isn't covered yet: tools with their own certificate bundle

Some developer tools don't ask macOS which certificates to trust. They read a list that ships inside the tool, and they keep trusting the eight intermediates until that list is updated. These are the ones with a fixed release:

  • Python certifi (used by requests and many other Python libraries)

    Fixed in
    2026.10.19
    Check with
    python3 -m pip show certifi
  • Node.js

    Fixed in
    26.12.1, 24.22.1, 22.23.4
    Check with
    node -v
  • Go, and programs built with it

    Fixed in
    1.27.3, 1.26.10, then rebuild the program
    Check with
    go version
  • Homebrew ca-certificates

    Fixed in
    2026-09-25_1
    Check with
    brew list --versions ca-certificates
  • Composer composer/ca-bundle (PHP)

    Fixed in
    1.6.0, 1.4.16
    Check with
    composer show composer/ca-bundle, in the project
Fixed versions, and how to see yours

Python: check and update certifi

Every Python environment has its own copy of certifi, so check the one each project uses. Activate the project's virtual environment first, then:

The certifi version and bundle this Python uses
python3 -m pip show certifi
python3 -c "import certifi; print(certifi.__version__, certifi.where())"

WARNING: Package(s) not found: certifi means that Python has no certifi, so there's nothing to update in it. To list the certifi copies in your home folder, with the version in each folder name:

Every certifi copy under your home folder (it can take a minute)
find ~ -type d -name "certifi-*.dist-info" 2>/dev/null

macOS may ask whether Terminal can open folders such as Documents or Desktop while this runs. Any folder name below certifi-2026.10.19.dist-info is an older copy. Update it in the environment it belongs to:

Update certifi with the tool the project uses
# pip, inside the activated virtual environment
python -m pip install --upgrade certifi

# uv
uv lock --upgrade-package certifi
uv sync

# Poetry
poetry update certifi

If a requirements.txt pins an older version, change the line to certifi==2026.10.19. Homebrew's Python refuses pip install outside a virtual environment, so update certifi inside each environment rather than globally.

Node.js

Your Node.js version
node -v

Node.js 26.12.1, 24.22.1 and 22.23.4 update its built-in certificate list for this incident, and they're the same versions as the Node.js security release of 21 October. How to update depends on how Node was installed: see checking and updating Node on a Mac.

Go, and programs built with Go

Go 1.27.3 and 1.26.10 carry the fix. A Go program contains the Go version it was built with, so updating Go isn't enough: rebuild each program, and reinstall the Go tools you installed with go install.

Check, update, and see which Go built your installed tools
go version
brew upgrade go
go version ~/go/bin/*

go version followed by file names prints the Go version each program was built with. For one built before the update, run its go install command again, for example go install golang.org/x/tools/gopls@latest. If you installed Go from go.dev rather than Homebrew, download the new installer there instead of running brew upgrade go.

Homebrew and Composer

Homebrew's certificate bundle
brew list --versions ca-certificates
brew update
brew upgrade ca-certificates

For PHP projects that use Composer's certificate bundle, run these in the project folder:

Composer's ca-bundle package
composer show composer/ca-bundle
composer update composer/ca-bundle

The faster way: Package Watch in iKnowMyMac

Package Watch in iKnowMyMac checks the Python packages in every environment on your Mac, including certifi, against published advisories.

FAQ

Questions

Something else? support@iknowmymac.com

Do I need to do anything in Safari?

No. Apple blocked the certificates on 19 October. Keep macOS up to date as usual.

Were these certificates used in an attack?

CERT-In's advisory of 21 October says the public disclosures don't establish confirmed malicious use of the keys as of that date.

Why do Python and Node.js still trust the certificates after Apple blocked them?

They don't ask macOS. certifi and Node.js each carry their own list of trusted certificates, and only a new version of that list drops the eight intermediates: certifi 2026.10.19, and Node.js 26.12.1, 24.22.1 or 22.23.4.

Do I have to rebuild my Go programs?

Yes. A Go program uses the Go version it was built with, so rebuild it with Go 1.27.3 or 1.26.10.

Know why your Mac is slow.

macOS 15 Sequoia or later · Apple silicon. A 32.6 MB native app, notarized by Apple. No account, no analytics, no telemetry.

One-time purchase · every feature · 14-day refund