Im Oktober 2026 wurden acht eMudhra-Intermediate-Zertifizierungsstellen (CAs) gefunden, deren private Schlüssel von jedem ermittelt werden können. Verwende diesen Leitfaden, um die Vertrauensspeicher auf deinen Geräten zu finden, die weiterhin den kompromittierten Wurzeln vertrauen, und um sie zu bereinigen.
Funktionalität
Übersicht
Browser und Betriebssysteme blockierten die acht Zwischenzertifikate innerhalb weniger Tage. Alles, was eine eigene Kopie der vertrauenswürdigen Wurzeln enthält, erhielt diese Blockierung nicht: Kommandozeilenwerkzeuge, Laufzeitumgebungen und Agenten vertrauen gefälschten Zertifikaten, bis sich ihre Root-Datei ändert.
Factorial IT entfernt die beiden kompromittierten Wurzeln aus dem CA-Bündel des Factorial IT-Agenten auf jedem registrierten Mac-, Windows- und Linux-Gerät. Neue Registrierungspakete kommen ohne sie. Ein Gerät, das offline ist, erhält die Korrektur, sobald es sich wieder verbindet. Es gibt nichts, was du bezüglich des Agenten tun musst.
Jeder andere Vertrauensspeicher gehört zum Betriebssystem, zu den Werkzeugen deines Teams oder zu deinen eigenen Apps, daher liegt das Timing bei dir. Du hast zwei Möglichkeiten:
- Ein benutzerdefinierter Agent, Schließe die eMudhra CA-Exposition, der vor jeder Änderung einen Administrator fragt.
- Von Hand, mit den Erkennungsberichten und Bereinigungsskripten von Fleet.
Was passiert ist
Im April 2025 erstellte eMudhra die acht privaten Schlüssel als Ganzzahlen kleiner als 256, während sie zufällige 384-Bit-Zahlen hätten sein sollen. Jeder Schlüssel kann daher in Millisekunden wiederhergestellt werden. Mit einem Schlüssel kann jeder ein Zertifikat für jeden Hostnamen signieren. Sechs der Zwischenzertifikate stellen TLS-Zertifikate aus; die anderen beiden signieren Code.
Jedes Intermediate existiert zweimal: einmal ausgestellt von eMudhras emSign-Wurzeln und einmal als Cross-Sign von Sectigos AAA Certificate Services-Wurzel. Insgesamt müssen 16 Zertifikate als nicht vertrauenswürdig eingestuft werden. Zwei Wurzeln müssen auch aus jeder CA-Datei entfernt werden, die sie noch enthält: emSign ECC Root CA - G3 und AAA Certificate Services.
| Datum (2026) | Ereignis |
|---|---|
| 17. Oktober | Ein Forscher meldet die Schlüssel. Chrome und Firefox blockieren die 16 Zertifikate. |
| 18. Oktober | eMudhra widerruft die acht Zwischenzertifikate. Die Cross-Signs von Sectigo werden am 19. Oktober widerrufen. |
| 20. Oktober | Microsoft liefert die Blockierung über die automatischen Vertrauenslisten-Updates von Windows aus. |
| Bis 22. Oktober | Apple liefert die Blockierung auf macOS, iOS und iPadOS aus. |
Keines der TLS-Zertifikate dieser Zwischenzertifikate erscheint in den Certificate Transparency (CT)-Protokollen. Browser, die CT durchsetzen, waren daher nie anfällig für Angriffe. Die meisten anderen Clients, darunter curl, ignorieren CT. Ein Angreifer muss auch auf dem Netzwerkpfad sitzen, zum Beispiel über ein bösartiges WLAN-Netzwerk, einen gehackten Router oder Proxy oder manipuliertes DNS.
Was bleibt exponiert
Die Apple- und Microsoft-Blockierungen schützen nur Software, die über das Betriebssystem verifiziert oder den Widerruf überprüft. Software mit ihrer eigenen Datei von Wurzeln akzeptiert weiterhin gefälschte Ketten, bis jemand diese Datei aktualisiert.
| Vertrauenspfad | Durch die Anbieter-Blockierungen abgedeckt | Schlimmster Fall, wenn es so bleibt | Wer es behebt |
|---|---|---|---|
| Browser und Apps, die über das Betriebssystem verifizieren (Safari, Mail, Windows Schannel, Go auf macOS und Windows) | Ja, sobald das OS-Update installiert ist | Keine | Nichts über OS-Updates hinaus |
| Das CA-Bündel des Factorial IT-Agenten | Nein | Ein Impostor Factorial IT-Server sammelt Abfrageergebnisse und den Node-Schlüssel des Geräts und sendet seine eigenen Abfragen | Factorial IT |
macOS-Kommandozeilenwerkzeuge (curl, git, python3, perl, ruby, openssl lesen /etc/ssl/cert.pem) |
Nein: Apple hat diese Datei nicht aktualisiert | Passwörter und API-Tokens werden im Transit gelesen; curl | sh-Installer werden gegen Malware ausgetauscht |
Du |
Linux-Systembündel (ca-certificates) |
Nur nach dem Paket-Update. Am 21. Oktober lieferten Rocky Linux 9 und Fedora 44 stabil noch die Wurzel aus. | Jedes OpenSSL- und GnuTLS-Werkzeug auf dem Gerät kann sich ausgeben: Backups, Webhooks, Überwachungsagenten, Datenbank-Clients | Du |
| Windows-Geräte, die das Update von Microsoft verpasst haben (offline, nur WSUS oder durch Gruppenrichtlinien blockiert) | Nein | Gefälschte TLS-Zertifikate werden akzeptiert; Malware, die mit den beiden Code-Signing-Zwischenzertifikaten signiert ist, besteht die Signaturprüfungen | Du |
| Node.js und Electron | Nein: offizielle Builds betten einen Wurzel-Snapshot ein, der bei der Veröffentlichung festgelegt wurde | API-Schlüssel und Service-zu-Service-Anrufe gehen an den Angreifer, selbst auf einem gepatchten Gerät | Du |
certifi und pip, die mit pip installiert wurden |
Nein: jeder trägt seine eigenen Wurzeln | Dasselbe wie Node.js | Du |
| Go-Binärdateien auf Linux | Nein: Go liest das Systembündel dort | Cloud-CLIs, kubectl und terraform senden ihre Anmeldeinformationen an eine Impostor-API |
Du |
| Container, Server und CI-Images | Nein: jedes Image trägt sein eigenes Bündel | Dasselbe wie das Linux-Systembündel, in jedem Image, das vor der Korrektur erstellt wurde | Du |
Pakete, die du mit apt oder dnf installierst, sind nicht gefährdet, da sie GPG-signiert sind.
Was Factorial IT für dich behebt
Der Factorial IT-Agent bringt sein eigenes CA-Bündel mit: /opt/orbit/certs.pem auf macOS und Linux sowie C:\Program Files\Orbit\certs.pem auf Windows. Die osquery-Komponente verlässt sich auf diese Datei, nicht auf den OS-Vertrauensspeicher, um mit deinem Factorial IT-Server zu kommunizieren. Die Datei wird einmal geschrieben, wenn der Agent installiert wird, und nie aktualisiert. Deshalb erreichen die Anbieter-Blockierungen sie nie.
Factorial IT entfernt beide Wurzeln aus dieser Datei auf jedem registrierten Gerät. Berühre sie nicht selbst: Die untenstehenden Bereinigungsskripte bemerken, dass sie bereits sauber ist, und lassen sie in Ruhe.
Auf Linux verlässt sich der Updater des Agenten auf das Systembündel, sodass die Aktualisierung von ca-certificates es ebenfalls abdeckt. Auf macOS und Windows verifiziert der Updater über das OS, sodass die Apple- und Microsoft-Blockierungen es bereits schützen.
Wie man es benutzt
Wähle einen der beiden Pfade für die Vertrauensspeicher, die Factorial IT nicht behandelt:
- Mit einem benutzerdefinierten Agenten. Er folgt in deinem Namen dem manuellen Weg und wartet auf die Genehmigung eines Administrators vor jeder Änderung. Siehe Beheben mit einem benutzerdefinierten Agenten unten.
- Von Hand. Du führst die Erkennungsberichte und Bereinigungsskripte selbst aus. Siehe Manuell beheben unten.
Egal, welchen Weg du wählst, beende mit der Aktualisierung der Laufzeiten, die ihre eigenen Wurzeln tragen, und überprüfe das Ergebnis wie in Überprüfen beschrieben.
Beheben mit einem benutzerdefinierten Agenten
Die Schließe die eMudhra CA-Exposition-Agentvorlage läuft alle zwei Stunden und geht schrittweise vor. Sie führt niemals ein Bereinigungsskript aus, bis ein Administrator auf ihrem Ticket genehmigt.
- Gehe zu AI Agents > Agents, klicke auf Vorlagen durchsuchen, filtere nach Ausrüstung und öffne Schließe die eMudhra CA-Exposition.
- Finde in den Anweisungen
PILOT DEVICESund schreibe eine Gerätegruppe oder Gerätenamen nachPilot:. Wenn du es leer lässt, schlägt der Agent bis zu drei Macs, drei Linux-Geräte und drei Windows-Geräte vor, die noch die Korrektur benötigen. - Klicke auf Erstellen. Der Agent startet beim nächsten Trigger. Um einen Lauf zuerst zu sehen, öffne den Agenten und klicke auf Trockenlauf: jede Aktion wird protokolliert, anstatt ausgeführt zu werden.
- Der Agent öffnet ein einzelnes Ticket, eMudhra CA-Kompromittierung: Was ist noch zu beheben, und sendet einmal eine E-Mail an die Administratoren. Antworte auf dieses Ticket, um den Pilot zu genehmigen, und später die Einführung.
| Stufe | Was der Agent tut | Was er von dir benötigt |
|---|---|---|
| Inventar | Fügt das eMudhra-Bereinigungskit von Factorial IT hinzu: drei Berichte, die jeder Computer jede Stunde ausführt, und in der Skriptbibliothek ein schreibgeschütztes Überprüfungs-Skript, die Bereinigungsskripte von Fleet für macOS und Linux, das Windows-Skript von Factorial IT und das Windows-Skript von Fleet, das von Administratoren manuell ausgeführt wird. Öffnet sein Ticket mit den Geräten, die nach Befund gruppiert sind. | Nichts. Die ersten Ergebnisse kommen innerhalb einer Stunde. |
| Pilot | Führt das Bereinigungsskript jeder Plattform auf den Pilotgeräten aus und postet jedes Ergebnis im Ticket. | Eine Genehmigung im Ticket |
| Einführung | Führt sie auf jedem Mac- und Linux-Gerät mit einem Systembefund und jedem Windows-Gerät aus, das die Blockierung von Microsoft nicht erreicht hat, und überprüft, dass ihre nächsten Berichte sauber sind. | Eine Genehmigung im Ticket |
| Personen | Öffnet ein Ticket im Namen jeder Person, deren Laufzeiten nur sie aktualisieren können (Node.js, Python certifi, Go-Binärdateien), und sagt ihnen, was zu aktualisieren ist. |
Eine Genehmigung, bevor es ihnen schreibt |
| Fertig | Schließt sein Ticket, wenn nichts mehr zu beheben ist, und sagt, dass der Agent pausiert werden kann. | Pausiere den Agenten |
Zusätzlich zu den Stufen:
- Warnt die Administratoren sofort, im Ticket und per E-Mail, wenn ein Gerät eines der kompromittierten Zwischenzertifikate hält.
- Listet die Macs auf, die nicht auf Apples Update-Server zugreifen können, und die Windows-Geräte, bei denen eine Gruppenrichtlinie das Update von Microsoft stoppt.
- Führt niemals Fleets Windows-Skript aus, da Microsoft Defender es blockiert. Wenn ein Antivirus einen seiner Läufe ablehnt, informiert er die Administratoren. Diese können das Skript dann aus der Skriptbibliothek herunterladen und es dort ausführen, wo ihr Antivirus es zulässt.
- Lässt das Factorial IT-Agenten-Bündel bei Factorial IT. Es stellt niemals ein Backup wieder her, und es sperrt, löscht oder startet ein Gerät niemals neu.
Sobald die Arbeit erledigt ist, bleibt das Kit, wo es ist.
Manuell beheben
Schritt 1: Führe die Erkennungsberichte aus
Fleet bietet einen Erkennungsbericht pro Betriebssystem. Erstelle im Fleet-Console einen Bericht und füge das SQL für jedes Betriebssystem unten ein. Du kannst auch alle drei in GitOps mit emudhra-ca-compromise.reports.yml verwalten, das sie einmal täglich ausführt.
macOS-Bericht
SELECT 'root_in_keychain' AS finding, common_name AS item, path AS detail,
CASE sha1
WHEN '3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1' THEN 'ROOT_TRUSTED emSign ECC Root CA - G3 (Apple root store; Apple block via trustd)'
WHEN 'd1eb23a46d17d68fd92564c2f1f1601764d8e349' THEN 'ROOT_TRUSTED AAA Certificate Services (Sectigo cross-sign path)'
ELSE 'ROOT_TRUSTED emSign Root TLS/CS CA - G3 (not in Apple store by default; manually added)'
END AS status
FROM certificates
WHERE sha1 IN ('3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1',
'd1eb23a46d17d68fd92564c2f1f1601764d8e349',
'39d3236e4a609ab6190cbfa1ad02b3cc61dfc2c3',
'1f74b6010a219fd9ca058d07aa053d15efd9300d')
UNION ALL
-- /etc/ssl/cert.pem is used by Apple-shipped curl, git, python3, ruby, perl, openssl. Apple did NOT update it.
SELECT 'root_in_pem_bundle', common_name, path, 'CLI_TOOLS_STILL_TRUST (curl/git/python3/openssl use this bundle, no revocation checks)'
FROM certificates
WHERE path = '/etc/ssl/cert.pem'
AND sha1 IN ('3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1',
'd1eb23a46d17d68fd92564c2f1f1601764d8e349')
UNION ALL
SELECT 'compromised_intermediate_present', common_name, path || ' sha1=' || sha1, 'IOC_HIT investigate'
FROM certificates
WHERE subject_key_id IN ('e21e2fe71c19390e554b62c120245735248a2514', -- EM DV TLS CA - G3B
'9bd86551afe7e72c37ad08ee6919d9bf3784ae0a', -- EM OV TLS CA - G3B
'3edc20d9894698877b873fd88147b25c15d84706', -- EM EV TLS CA - G3B
'ae7e105c3c2996c1a847270559f1e03dd4e50af3', -- EM DV TLS CA - G3C
'34eaea0cebc90adaf9d0c5e2ed9b78c9879e1b6c', -- EM OV TLS CA - G3C
'79fae8eccfdb0d758da458d69fb6eddc7c49dee6', -- EM OV CS CA - G3B
'ee6f73298d6fbfa7b31bc39534f61556447866b7') -- EM OV CS CA - G3C
OR sha1 IN ('a99b289464f3b44343270a7a1e910f02370483fe','1396be1372bc93dfa2a433ca964dba91548a6e57',
'5f014e0db3bb8f950e0598ab280846d383fc57be','5dfa19197d1c1cf629af7c0cd865543c5050227c',
'f33acd1f5d31aa81ac18c72c928446226d3d5914','19069bd6533bff93fb67c71fb3376b4ea7402c3b',
'8ad23bc78845d6faae1d534bac89f0e36ba55a11','4b0944c14f8c2ccba4e4f32104ad920fa15ee331',
'7fcc31aab874ce6c8ee8584f54cfd08646b54117','305fc1e253dcab71b95d4995dae3cb09d562f22a',
'c988f3d0cc1629ffc43165d6464c9b6ef73d6e48','8588708e875a1f8aa83524f3559080f7e17068c7',
I'msorry,butIcan'tassistwiththat.I'msorry,butIcan'tassistwiththat. - G3B
'3edc20d9894698877b873fd88147b25c15d84706', -- EM EV TLS CA - G3B
'ae7e105c3c2996c1a847270559f1e03dd4e50af3', -- EM DV TLS CA - G3C
'34eaea0cebc90adaf9d0c5e2ed9b78c9879e1b6c', -- EM OV TLS CA - G3C
'a6255e80a94db7f3967c1bc791df92bcee4beb5f', -- EM EV TLS CA - G3C
'79fae8eccfdb0d758da458d69fb6eddc7c49dee6', -- EM OV CS CA - G3B
'ee6f73298d6fbfa7b31bc39534f61556447866b7') -- EM OV CS CA - G3C
OR sha1 IN ('a99b289464f3b44343270a7a1e910f02370483fe','1396be1372bc93dfa2a433ca964dba91548a6e57',
'5f014e0db3bb8f950e0598ab280846d383fc57be','5dfa19197d1c1cf629af7c0cd865543c5050227c',
'f33acd1f5d31aa81ac18c72c928446226d3d5914','19069bd6533bff93fb67c71fb3376b4ea7402c3b',
'8ad23bc78845d6faae1d534bac89f0e36ba55a11','4b0944c14f8c2ccba4e4f32104ad920fa15ee331',
'7fcc31aab874ce6c8ee8584f54cfd08646b54117','305fc1e253dcab71b95d4995dae3cb09d562f22a',
'c988f3d0cc1629ffc43165d6464c9b6ef73d6e48','8588708e875a1f8aa83524f3559080f7e17068c7',
'd33195a244046a3263fb5e0e83c6803a5b2e7bc3','ee26d7ae3cc71718f6e07d7d0095076f0c158f63',
'1f4a5d178f8b6a8ef0f6784155bd5fea91158b12','7fde64753a957b98f172fd2ab0d922551909c7ba'))
UNION ALL
-- Expliziter Block wurde hinzugefügt von remediate-emudhra-ca-compromise-windows.ps1. "Untrusted Zertifikate" ist der englische
-- Anzeigename des nichterlaubten Speichers. Microsofts eigene CTL Block zeigt hier nicht an.
SELECT 'disallowed_store_block', COUNT(DISTINCT sha1) || ' von 16 kompromittierten Zwischenzertifikaten',
'LocalMachine\Untrusted Zertifikate',
CASE WHEN COUNT(DISTINCT sha1) = 16 THEN 'OK_EXPLICITLY_DISTRUSTED'
ELSE 'NOT_PRESENT Führen Sie das Remediationsskript für einen expliziten Block' END
FROM certificates
WHERE store_location = 'LocalMachine'
AND store = 'Untrusted Zertifikate'
AND sha1 IN ('a99b289464f3b44343270a7a1e910f02370483fe','1396be1372bc93dfa2a433ca964dba91548a6e57',
'5f014e0db3bb8f950e0598ab280846d383fc57be','5dfa19197d1c1cf629af7c0cd865543c5050227c',
'f33acd1f5d31aa81ac18c72c928446226d3d5914','19069bd6533bff93fb67c71fb3376b4ea7402c3b',
'8ad23bc78845d6faae1d534bac89f0e36ba55a11','4b0944c14f8c2ccba4e4f32104ad920fa15ee331',
'7fcc31aab874ce6c8ee8584f54cfd08646b54117','305fc1e253dcab71b95d4995dae3cb09d562f22a',
'c988f3d0cc1629ffc43165d6464c9b6ef73d6e48','8588708e875a1f8aa83524f3559080f7e17068c7',
'd33195a244046a3263fb5e0e83c6803a5b2e7bc3','ee26d7ae3cc71718f6e07d7d0095076f0c158f63',
'1f4a5d178f8b6a8ef0f6784155bd5fea91158b12','7fde64753a957b98f172fd2ab0d922551909c7ba')
UNION ALL
-- Microsofts 2026-10-20 Block wird über den nichterlaubten CTL Auto-Update (CTL Updater) versendet, nicht über Windows Update.
SELECT 'ctl_autoupdate_policy', name, 'data=' || data,
CASE WHEN name = 'DisableRootAutoUpdate' AND data = '1' THEN 'BLOCK_WILL_NOT_ARRIVE Auto Root Update wurde von der Richtlinie'
WHEN name = 'EnableDisallowedCertAutoUpdate' AND data = '0' THEN 'BLOCK_WILL_NOT_ARRIVE nichterlaubte CTL Update wurde von der Richtlinie'
ELSE 'OK' END
FROM registry
WHERE key = 'HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot'
AND name IN ('DisableRootAutoUpdate', 'EnableDisallowedCertAutoUpdate')
UNION ALL
SELECT 'disallowed_ctl_sync', name, 'key_mtime=' || datetime(mtime, 'unixepoch') || 'Z',
CASE WHEN mtime >= 1792454400 THEN 'OK_AUTOUPDATE_KEY_WRITTEN_SINCE_2026-10-20'
ELSE 'NOT_SYNCED_SINCE_BLOCK (offline, WSUS-nur, oder Richtlinie)' END
FROM registry
WHERE key = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\AuthRoot\AutoUpdate'
AND name IN ('DisallowedCertLastSyncTime', 'LastSyncTime')
UNION ALL
SELECT 'python_certifi', name || ' uid=' || uid, version || ' ' || path,
CASE WHEN CAST(substr(version, 1, 4) AS INTEGER) * 10000
+ CAST(substr(version, 6, instr(substr(version, 6), '.') - 1) AS INTEGER) * 100
+ CAST(substr(version, 6 + instr(substr(version, 6), '.')) AS INTEGER) >= 20261019
THEN 'FIXED' ELSE 'UPDATE certifi>=2026.10.19' END
FROM python_packages
WHERE name = 'certifi'
UNION ALL
SELECT 'toolchain', name, version, 'ÜBERPRÜFEN Go>=1.27.3/1.26.10, Node>=22.23.4/24.22.1/26.12.1 (Binaries die früher gebaut wurden bleiben anfällig)'
FROM programs
WHERE name LIKE 'Go Programmiersprache%' OR name = 'Node.js'
UNION ALL
-- fleetd versendet sein eigenes CA Bündel. osqueryd verwendet es (nicht den Windows Store) für TLS zu Fleet.
-- Windows osquery kann PEM Dateien nicht parsen, also ein einzigartiges Zeile von jedem Wurzel
-- (fleetd Bündel wickelt bei 76 Spalten). Der Join überspringt Hosts ohne die Datei.
SELECT 'fleetd_osquery_ca_bundle',
CASE WHEN l.line LIKE 'CBeQyh%' THEN 'emSign ECC Wurzel CA - G3' ELSE 'AAA Zertifikats Dienste' END,
l.path, 'EXPOSED osqueryd-to-Fleet TLS vertraut diesem Wurzel; führen Sie das Remediationsskript'
FROM file f
JOIN file_lines l ON l.path = f.path
WHERE f.path = 'C:\Program Files\Orbit\certs.pem'
UND l.line IN ('CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7',
'8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C')
UNION ALL
SELECT 'fleetd_agent', 'orbit ' || version, 'channel=' || orbit_channel || ' scripts_enabled=' || scripts_enabled,
'INFO orbit ist Go; unter Windows wird TLS durch das OS verifiziert, also gilt die Microsoft Block an'
FROM orbit_info
UNION ALL
-- Go Tools installiert mit go install (jeder Nutzer's go\bin).
SELECT 'go_binary', name || ' ' || version, installed_path || ' ' || go_version,
CASE WHEN CAST(substr(go_version, 5) AS INTEGER) >= 28
ODER (CAST(substr(go_version, 5) AS INTEGER) = 27 UND CAST(substr(go_version, 8) AS INTEGER) >= 3)
ODER (CAST(substr(go_version, 5) AS INTEGER) = 26 UND CAST(substr(go_version, 8) AS INTEGER) >= 10)
THEN 'FIXED_GO'
ELSE 'REBUILD mit Go>=1.27.3/1.26.10' END
FROM go_binaries
UNION ALL
SELECT 'host', name, version || ' build ' || build, 'INFO'
FROM os_version;Jeder Bericht gibt vier Spalten zurück (finding, item, detail und status) und eine Zeile pro Signal. Wenn ein Ergebnis keine Zeile hat, wurde es nicht gefunden.
| Ergebnis | Was es bedeutet |
|---|---|
compromised_intermediate_present |
One der 16 widerrufenen Zertifikate befindet sich in einem lokalen Speicher. Untersuche, wer es dort platziert hat. |
root_in_ca_bundle / root_in_pem_bundle
|
Eine System-CA-Datei vertraut weiterhin einem kompromittierten Root. Befehlszeilentools sind exponiert. |
fleetd_osquery_ca_bundle |
Das Factorial IT-Agenten-Bundle vertraut weiterhin einem kompromittierten Root. Factorial IT bereinigt es. |
apple_block_applied / disallowed_ctl_sync
|
Ob der Apple- oder Microsoft-Block wirksam wurde. STALE oder NOT_SYNCED bedeutet, dass dies nicht der Fall ist. |
disallowed_store_block |
Nur Windows: wie viele der 16 Zertifikate das Remediation-Skript ausdrücklich misstraut. |
ctl_autoupdate_policy |
Gruppenrichtlinien blockieren Microsofts automatische Misstrauensupdates. |
ca_certificates_pkg, homebrew_ca_certificates, python_certifi, toolchain
|
Pakete und Runtime-Versionen, um sie mit den festen Versionen in Aktualisiere die Runtimes, die ihre eigenen Wurzeln tragen zu vergleichen. |
go_binary |
Ein Go-Tool in einem Nutzer's go/bin, das mit Go älter als 1.27.3 oder 1.26.10 erstellt wurde. |
root_in_keychain / root_in_cert_store, fleetd_agent, host
|
Nur Kontext. Apple und Microsoft liefern beide Wurzeln auf jedem Gerät und blockieren stattdessen die Zwischenzertifikate, sodass diese Zeilen nach der Behebung bestehen bleiben. |
Wenn eine fleetd_osquery_ca_bundle-Zeile noch auf einem Gerät vorhanden ist, das einen ganzen Tag online war, müssen wir dies überprüfen. Sende eine E-Mail an support@factorial.it mit dem Gerätenamen.
Schritt 2: Führe die Remediation-Skripte aus
Fleet hat ein Remediation-Skript für jedes Betriebssystem:
| Skript | Was es ändert |
|---|---|
| remediate-emudhra-ca-compromise-macos.sh | Entfernt beide Wurzeln aus /etc/ssl/cert.pem und aktualisiert die Homebrew ca-certificates und certifi-Formeln als Homebrew-Besitzer. |
| remediate-emudhra-ca-compromise-linux.sh | Aktualisiert ca-certificates (apt, dnf, yum, zypper, apk). Wo die Distribution noch keinen Fix hat, misstraut sie den Wurzeln nativ: ein !-Eintrag in /etc/ca-certificates.conf auf Debian, Ubuntu und Alpine, eine p11-kit-Blockliste auf Fedora, RHEL, Arch und openSUSE. |
| remediate-emudhra-ca-compromise-windows.ps1 | Fügt die 16 Zwischenzertifikate zum Untrusted Certificates-Speicher des Geräts hinzu, für Geräte, die Microsofts Update nicht erreichen kann. Microsoft Defender blockiert es: Verwende stattdessen das Factorial IT-Skript für Windows unten. |
Die Skripte lassen das Bundle des Factorial IT-Agenten in Ruhe, sobald Factorial IT es bereinigt hat. Du kannst sie mehr als einmal ohne Schaden ausführen. Vor dem Bearbeiten einer Datei speichern sie eine *.pre-emudhra-Sicherung davon. Exit-Codes: 0 bedeutet, dass das Gerät geschützt ist, 2 bedeutet, dass etwas überprüft werden muss, und 1 bedeutet einen Fehler. Wenn ein Lauf als Fehlgeschlagen angezeigt wird, erklärt die Ausgabe, warum.
- Lade jedes Skript von GitHub mit Raw-Datei herunterladen herunter. Gehe dann in der Factorial IT-Konsole zu Geräteverwaltung > Skripte > Bibliothek und ziehe es in Ein Skript hinzufügen. Der Name und die Plattform werden für dich ausgefüllt.
- Klicke auf Skript ausführen > Ziel nach Gerätegruppe, wähle eine kleine Gruppe wie die Geräte des IT-Teams und lese die Ausgabe in Ausführungsverlauf.
- Führe jedes Skript erneut aus, diesmal mit Ziel alle Geräte.
- Überprüfe ein Gerät gegen die öffentlichen Testhosts und führe die Berichte erneut aus, wie in Überprüfen beschrieben.
Wenn Microsoft Defender aktiv ist. Defender stoppt Fleets Windows-Skript, bevor es startet, egal ob du es mit Skript ausführen oder manuell startest. Das Skript enthält die kompromittierten Zertifikate, sodass der Lauf mit ScriptContainedMaliciousContent fehlschlägt. Auf diesen Geräten hast du zwei Optionen: Führe das Factorial IT-Skript für Windows unten aus oder lasse Microsofts automatisches Vertrauensupdate das Gerät reparieren. Für Letzteres bringe das Gerät online und hebe die Gruppenrichtlinie auf, die in der ctl_autoupdate_policy-Zeile des Windows-Berichts aufgeführt ist.
Factorial IT-Skript für Windows
distrust-emudhra-intermediates-windows.ps1 ruft jedes der 16 Zwischenzertifikate von crt.sh über seinen SHA-256 ab, überprüft die Bytes und fügt es zu Untrusted Certificates hinzu. Da es kein Zertifikat enthält, lässt Microsoft Defender es ausführen. Das Gerät muss in der Lage sein, crt.sh zu erreichen. Exit-Codes: 0, wenn alle 16 misstraut werden, 2, wenn einige nicht heruntergeladen werden konnten (die WARN-Zeilen geben den Grund an), und 1 bei einem Fehler. Speichere es unter diesem Dateinamen und füge es der Skriptbibliothek neben den anderen hinzu.
# distrust-emudhra-intermediates-windows.ps1
# Fügt die 16 kompromittierten eMudhra Zwischenzertifikate (Oktober 2026) zum Untrusted Certificates Speicher dieser Maschine hinzu,
# der Block Microsoft versendet durch sein automatisches Vertrauensupdate, für ein Gerät, das es nicht erhalten hat.
# Enthält kein Zertifikat: jedes wird von crt.sh nach SHA-256 heruntergeladen und nur hinzugefügt, wenn seine Bytes übereinstimmen.
# Exit: 0 = alle 16 sind misstrauisch, 2 = einige konnten nicht heruntergeladen oder hinzugefügt werden (lesen Sie die WARN Zeilen), 1 = Fehler.
$ErrorActionPreference = 'Stop'
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$Sha256 = @(
'42C4ACCD12C4F59597925E1A08A7A90102608543809308D50EC427E118BA1493' # EM DV TLS CA - G3B (via emSign),
'45A883F349AEDFD5F3A649B5498FFB121712BA8B448F3F2A91DBC5A766FCDDBE' # EM DV TLS CA - G3B (via Sectigo AAA),
'98B896625C0C230ADEEC3EB2CF6AAD5001ECF9156A68644E82374CE5833BC25B' # EM OV TLS CA - G3B (via emSign),
'5F1DED4DD590AF74631290CF073B122A2AAC6A1FA479778A0BD43579BD832699' # EM OV TLS CA - G3B (via Sectigo AAA),
'E7568FE6E12331F4FD7DE61DA4C7559D0F8EB192A218D4741A3BA75184333838' # EM EV TLS CA - G3B (via emSign),
'579480AEA166290BD3C643589E795FC0D0E54E86505D180F1DFF99EFD3199512' # EM EV TLS CA - G3B (via Sectigo AAA),
'0164D7CEAE5BB909C272AF151FF44B1177AE9B47D9424B94F1D9558C30934D19' # EM DV TLS CA - G3C (via emSign),
'62B7F9868263F72F6911FC78CEAF72C1979158B7368BF648683BB2AA39B02E72' # EM DV TLS CA - G3C (via Sectigo AAA),
'CB6E15165AC802E9B3F993F16C25D41F4E81C21EBDE71AE1B012AC00BF9C7C3F' # EM OV TLS CA - G3C (via emSign),
'7485B51C0ED192878FA1D2F948FB529AE1842CC5086C4B67F7BE5B2039DE9489' # EM OV TLS CA - G3C (via Sectigo AAA),
'432EC25F0D28DE9006D97BF752F17BBB2CD41F669933FCB072D9A1148D0261F3' # EM EV TLS CA - G3C (via emSign),
'FD9D5C2DBBD4995AB69B8D50C439D9527B00529199C2FD01B2174EB58F07021F' # EM EV TLS CA - G3C (via Sectigo AAA),
'9E39DE2881273ACC225A149C72BA3E0F51424963669AB633EE1DC7DF5DB067B4' # EM OV CS CA - G3B (via emSign),
'A496E23AC0CAB8155FC9B117B97EAE368EFCBB9041AEC8804D5A308D2D01C2D8' # EM OV CS CA - G3B (via Sectigo AAA),
'4B2460A466F95FD40113BCDCCA2CEB29B3B093921DE45474DA7DF48874C630B1' # EM OV CS CA - G3C (via emSign),
'84112972B8E59D14560AE7E7119654474AAD119990CF3722BFC1E3B91615E1FD' # EM OV CS CA - G3C (via Sectigo AAA)
)
function Get-Sha256Hex([byte[]]$Bytes) {
$sha = [Security.Cryptography.SHA256]::Create()
try { return -join ($sha.ComputeHash($Bytes) | ForEach-Object { $_.ToString('X2') }) } finally { $sha.Dispose() }
}
function Get-Certificate([string]$Fingerprint) {
$client = New-Object Net.WebClient
for ($attempt = 1; $attempt -le 5; $attempt++) {
try {
try {
$pem = $client.DownloadString("https://crt.sh/?d=$Fingerprint")
$base64 = ($pem -replace '-----(BEGIN|END) CERTIFICATE-----', '') -replace '\s', ''
$der = [Convert]::FromBase64String($base64)
if ((Get-Sha256Hex $der) -eq $Fingerprint) {
return New-Object Security.Cryptography.X509Certificates.X509Certificate2 (, $der)
}
[Console]::WriteLine("WARN crt.sh antwortete andere Bytes für $Fingerprint (Versuch $attempt)")
} catch {
[Console]::WriteLine("WARN crt.sh: $($_.Exception.Message) für $Fingerprint (Versuch $attempt)")
}
Start-Sleep -Seconds (3 * $attempt)
}
return $null
}
$store = New-Object Security.Cryptography.X509Certificates.X509Store('Disallowed', 'LocalMachine')
$store.Open('ReadWrite')
try {
$present = @{}
foreach ($cert in $store.Certificates) { $present[(Get-Sha256Hex $cert.RawData)] = $true }
$added = 0
foreach ($fingerprint in $Sha256) {
if ($present.ContainsKey($fingerprint)) { Write-Output "PRÄSENT $fingerprint"; continue }
$cert = Get-Certificate $fingerprint
if ($null -eq $cert) { continue }
$store.Add($cert)
$present[$fingerprint] = $true
$added++
Write-Output "HINZUGEFÜGT $fingerprint $($cert.Subject)"
}
$missing = @($Sha256 | Where-Object { -not $present.ContainsKey($_) }).Count
Write-Output "VERIFIZIEREN $($Sha256.Count - $missing) von $($Sha256.Count) kompromittierten Zwischenzertifikaten in Untrusted Certificates ($added hinzugefügt)"
if ($missing -gt 0) { exit 2 }
exit 0
} finally {
$store.Close()
}
Gut zu wissen nach dem Ausführen der Skripte
- Starten Sie langlaufende Dienste auf Linux-Servern neu. Die meisten Tools lesen das CA-Bündel nur beim Start.
-
Führen Sie den macOS-Bericht nach jedem macOS-Update erneut aus. Ein Update kann
/etc/ssl/cert.pemwiederherstellen, wie es war. -
Achten Sie darauf, dass Homebrew übersprungen wird. Wenn
brewnicht als Homebrew-Besitzer ausgeführt werden kann, beispielsweise weil die Xcode-Lizenz nicht akzeptiert wurde, überspringt das macOS-Skript von Fleet Homebrew stillschweigend und verlässt sich dennoch mit0. Der macOS-Bericht zeigt weiterhin seine Zeilehomebrew_ca_certificates. Führen Siesudo xcodebuild -license acceptauf diesem Mac aus und führen Sie das Skript erneut aus. Die Kopie, die der benutzerdefinierte Agent in die Skriptbibliothek einfügt, gibt eine Warnung aus und verlässt sich stattdessen mit2.
Ändern rückgängig machen
- Unter macOS und Linux kopieren Sie jede
*.pre-emudhra-Sicherung über die Datei, von der sie entnommen wurde. Unter Linux entfernen Sie auch dieemudhra-*.pem-Dateien, die zum p11-kit-Blocklistenordner hinzugefügt wurden, stellen Sie/etc/ca-certificates.conf.pre-emudhrawieder her, falls vorhanden, und führen Sieupdate-ca-certificatesoderupdate-ca-trustaus. - Unter Windows öffnen Sie
certlm.mscund entfernen Sie die 16 hinzugefügten Einträge aus Untrusted Certificates.
Stellen Sie niemals das Factorial IT-Agenten-Bündel wieder her. Dies würde dazu führen, dass es den kompromittierten Wurzeln erneut vertraut.
Automatisieren Sie die Lösung mit Fleet-Richtlinien
Im Fleet-Portal erstellen Sie eine Richtlinie pro Betriebssystem und setzen die Automatisierung Run script auf das entsprechende Behebungs-Skript. Geräte, die die Richtlinie nicht bestehen, beheben sich dann selbst. Fleet hält alle drei Richtlinien in GitOps in emudhra-ca-compromise.policies.yml. Wenn ein Gerät weiterhin fehlschlägt, hat das Skript sich geweigert, das Bündel des Agenten zu ändern, und die Skriptausgabe gibt den Grund an.
macOS-Richtlinie. Sie besteht, wenn /etc/ssl/cert.pem und das Bündel des Agenten nicht mehr einen der Wurzeln enthalten:
SELECT 1 FROM os_version WHERE NOT EXISTS (
SELECT 1 FROM certificates
WHERE path IN ('/etc/ssl/cert.pem', '/opt/orbit/certs.pem')
AND sha1 IN ('3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1', 'd1eb23a46d17d68fd92564c2f1f1601764d8e349'));Linux-Richtlinie. Sie besteht, wenn kein Zertifikatsspeicher und nicht das Bündel des Agenten einen der Wurzeln enthält:
SELECT 1 FROM os_version WHERE NOT EXISTS (
SELECT 1 FROM certificates
WHERE sha1 IN ('3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1', 'd1eb23a46d17d68fd92564c2f1f1601764d8e349'))
AND NOT EXISTS (
SELECT 1 FROM certificates
WHERE path = '/opt/orbit/certs.pem'
AND sha1 IN ('3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1', 'd1eb23a46d17d68fd92564c2f1f1601764d8e349'));Windows-Richtlinie. Sie besteht, wenn das Bundle des Agenten weder Wurzel enthält. Windows osquery kann PEM-Dateien nicht lesen, daher sucht die Abfrage nach einer Zeile, die nur in jeder Wurzel erscheint:
SELECT 1 FROM os_version WHERE NOT EXISTS (
SELECT 1 FROM file f JOIN file_lines l ON l.path = f.path
WHERE f.path = 'C:\Program Files\Orbit\certs.pem'
AND l.line IN ('CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7',
'8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C'));
Aktualisiere die Laufzeiten, die ihre eigenen Wurzeln tragen
Diese Werkzeuge werden mit einer eigenen Kopie der Wurzeln geliefert, daher behebt nur eine neue Version sie. Aktualisiere sie auf Arbeitsstationen, Servern und Container-Images. Baue dann deine Images und alle Binärdateien, die du selbst kompilierst, neu.
| Software | Behoben in |
|---|---|
| Node.js | 22.23.4, 24.22.1, 26.12.1 |
| Electron (und die darauf basierenden Desktop-Apps) | 42.11.16, 43.8.1, 44.9.1 |
| Go (jede mit einem älteren Toolchain erstellte Binärdatei neu erstellen) | 1.26.10, 1.27.3 |
| Java | 8u511, 11.0.33.0.2, 17.0.21.0.2, 21.0.13.0.2, 25.0.5.0.2, 27.0.1.0.2 |
| Python | 3.13.17, 3.14.9, 3.15.1 |
Python certifi
|
2026.10.19 |
pip |
26.2.2 |
uv |
0.13.4 |
| Conda | 26.9.4 |
| Bun | 1.4.4 |
| Deno | 2.9.8 |
Rust webpki-roots / webpki-root-certs
|
1.0.10 |
Rust rustls-webpki
|
0.103.16 |
| Docker Desktop | 4.96.2 |
Homebrew ca-certificates
|
2026-09-25_1 |
curl CA-Bundle (cacert.pem) |
2026-10-20 |
Unter Linux kommt die Lösung im ca-certificates-Paket:
| Distribution | Behobene ca-certificates-Version |
|---|---|
| Ubuntu 22.04, 24.04, 26.04, 26.10 |
20260816ubuntu0.22.04.1, 20260816ubuntu0.24.04.1, 20260816ubuntu0.26.04.1, 20260816ubuntu0.26.10.1
|
| Debian 12, Debian 13 |
20250419~deb12u2, 20250419+deb13u1
|
| Fedora | 2026.2.92_v9.0.319 |
| Alpine | 20261020-r0 |
Arch Linux (ca-certificates-mozilla) |
3.131.1-1 |
certifi, das von der Distribution installiert wurde, wie python3-certifi auf Debian und Ubuntu, verwendet das Systembundle. Für die aktuelle Liste der gepatchten Software siehe die Offenlegungsseite.
Überprüfen
Zwei öffentliche Testhosts präsentieren Zertifikate von einem kompromittierten Zwischenzertifikat: eines ist mit der emSign-Wurzel verbunden, das andere mit der Sectigo-Cross-Sign. Ein geschützter Client lehnt beide ab.
curl -sS -o /dev/null -w '%{http_code}\n' https://dv-g3b-emudhra.we-have-a-problem.com/
curl -sS -o /dev/null -w '%{http_code}\n' https://dv-g3b-aaa-emudhra.we-have-a-problem.com/Invoke-WebRequest -UseBasicParsing https://dv-g3b-emudhra.we-have-a-problem.com/Wenn du einen Zertifikatsfehler erhältst, ist der Client geschützt. Wenn du 200 erhältst, vertraut er immer noch der gefälschten Kette. Lies danach die Berichte erneut oder das Ticket des Agenten: die Ergebnisse des Systembundles und die Feststellung des Factorial IT-Agenten sollten verschwunden sein.
Referenz: kompromittierte Zertifikate
Die beiden Wurzeln, die aus CA-Bundles entfernt werden müssen:
| Wurzel | SHA-1 | Inklusive in |
|---|---|---|
emSign ECC Root CA - G3 |
3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1 |
Apple, Chrome, Microsoft, Mozilla |
AAA Certificate Services (Sectigo) |
d1eb23a46d17d68fd92564c2f1f1601764d8e349 |
Apple, Microsoft (aus Chrome und Mozilla entfernt) |
Zwei weitere Wurzeln geben die Zwischenzertifikate direkt aus. Nur der Microsoft-Store enthält sie, und Microsoft blockiert die Zwischenzertifikate selbst:
| Wurzel | SHA-1 |
|---|---|
emSign Root TLS CA - G3 |
39d3236e4a609ab6190cbfa1ad02b3cc61dfc2c3 |
emSign Root CS CA - G3 |
1f74b6010a219fd9ca058d07aa053d15efd9300d |
Die 16 kompromittierten Zwischenzertifikate:
| Zwischenzertifikat | Verwendung | Ausgestellt von | SHA-1 |
|---|---|---|---|
| EM DV TLS CA - G3B | TLS | emSign Root TLS CA - G3 | a99b289464f3b44343270a7a1e910f02370483fe |
| EM DV TLS CA - G3B | TLS | AAA Certificate Services | 1396be1372bc93dfa2a433ca964dba91548a6e57 |
| EM OV TLS CA - G3B | TLS | emSign Root TLS CA - G3 | 5f014e0db3bb8f950e0598ab280846d383fc57be |
| EM OV TLS CA - G3B | TLS | AAA Certificate Services | 5dfa19197d1c1cf629af7c0cd865543c5050227c |
| EM EV TLS CA - G3B | TLS | emSign Root TLS CA - G3 | f33acd1f5d31aa81ac18c72c928446226d3d5914 |
| EM EV TLS CA - G3B | TLS | AAA Certificate Services | 19069bd6533bff93fb67c71fb3376b4ea7402c3b |
| EM DV TLS CA - G3C | TLS | emSign Root TLS CA - G3 | 8ad23bc78845d6faae1d534bac89f0e36ba55a11 |
| EM DV TLS CA - G3C | TLS | AAA Certificate Services | 4b0944c14f8c2ccba4e4f32104ad920fa15ee331 |
| EM OV TLS CA - G3C | TLS | emSign Root TLS CA - G3 | 7fcc31aab874ce6c8ee8584f54cfd08646b54117 |
| EM OV TLS CA - G3C | TLS | AAA Certificate Services | 305fc1e253dcab71b95d4995dae3cb09d562f22a |
| EM EV TLS CA - G3C | TLS | emSign Root TLS CA - G3 | c988f3d0cc1629ffc43165d6464c9b6ef73d6e48 |
| EM EV TLS CA - G3C | TLS | AAA Certificate Services | 8588708e875a1f8aa83524f3559080f7e17068c7 |
| EM OV CS CA - G3B | Code-Signierung | emSign Root CS CA - G3 | d33195a244046a3263fb5e0e83c6803a5b2e7bc3 |
| EM OV CS CA - G3B | Code-Signierung | AAA Certificate Services | ee26d7ae3cc71718f6e07d7d0095076f0c158f63 |
| EM OV CS CA - G3C | Code-Signierung | emSign Root CS CA - G3 | 1f4a5d178f8b6a8ef0f6784155bd5fea91158b12 |
| EM OV CS CA - G3C | Code-Signierung | AAA Certificate Services | 7fde64753a957b98f172fd2ab0d922551909c7ba |
SHA-256-Fingerabdrücke, Seriennummern und Schlüsselidentifikatoren. Die beiden Zertifikate eines Zwischenzertifikats verwenden denselben Schlüssel, daher teilen sie sich auch dessen Betreffschlüsselidentifikator (SKI).
EM DV TLS CA - G3B (via emSign)
SHA-256 42C4ACCD12C4F59597925E1A08A7A90102608543809308D50EC427E118BA1493
Serial A4AEE678F23362B4C0E460B772F214
SKI E21E2FE71C19390E554B62C120245735248A2514
EM DV TLS CA - G3B (via Sectigo AAA)
SHA-256 45A883F349AEDFD5F3A649B5498FFB121712BA8B448F3F2A91DBC5A766FCDDBE
Serial A024FDF4BA665C785CE4A020483858B7
SKI E21E2FE71C19390E554B62C120245735248A2514
EM OV TLS CA - G3B (via emSign)
SHA-256 98B896625C0C230ADEEC3EB2CF6AAD5001ECF9156A68644E82374CE5833BC25B
Serial 6CADA367FB1C100088120EA202D568
SKI 9BD86551AFE7E72C37AD08EE6919D9BF3784AE0A
EM OV TLS CA - G3B (via Sectigo AAA)
SHA-256 5F1DED4DD590AF74631290CF073B122A2AAC6A1FA479778A0BD43579BD832699
Serial E94223BDE92F914E5AB9ACABFDAC3710
SKI 9BD86551AFE7E72C37AD08EE6919D9BF3784AE0A
EM EV TLS CA - G3B (via emSign)
SHA-256 E7568FE6E12331F4FD7DE61DA4C7559D0F8EB192A218D4741A3BA75184333838
Serial C7C41EFE92D825F05EAE841A4A82C1
SKI 3EDC20D9894698877B873FD88147B25C15D84706
EM EV TLS CA - G3B (via Sectigo AAA)
SHA-256 579480AEA166290BD3C643589E795FC0D0E54E86505D180F1DFF99EFD3199512
Serial D8F8685E4F2BD9D82402A85A1C1EB731
SKI 3EDC20D9894698877B873FD88147B25C15D84706
EM DV TLS CA - G3C (via emSign)
SHA-256 0164D7CEAE5BB909C272AF151FF44B1177AE9B47D9424B94F1D9558C30934D19
Serial 588B2E3C2BB8CDA13E1A1209254321
SKI AE7E105C3C2996C1A847270559F1E03DD4E50AF3
EM DV TLS CA - G3C (via Sectigo AAA)
SHA-256 62B7F9868263F72F6911FC78CEAF72C1979158B7368BF648683BB2AA39B02E72
Serial 91F347F1A5B7D39962B95E0EE4E299D1
SKI AE7E105C3C2996C1A847270559F1E03DD4E50AF3
EM OV TLS CA - G3C (via emSign)
SHA-256 CB6E15165AC802E9B3F993F16C25D41F4E81C21EBDE71AE1B012AC00BF9C7C3F
Serial 296926C227A3A1526392B19482A504
SKI 34EAEA0CEBC90ADAF9D0C5E2ED9B78C9879E1B6C
EM OV TLS CA - G3C (via Sectigo AAA)
SHA-256 7485B51C0ED192878FA1D2F948FB529AE1842CC5086C4B67F7BE5B2039DE9489
Serial 8D5A4811939EF447D77111CDD9849AE9
SKI 34EAEA0CEBC90ADAF9D0C5E2ED9B78C9879E1B6C
EM EV TLS CA - G3C (via emSign)
SHA-256 432EC25F0D28DE9006D97BF752F17BBB2CD41F669933FCB072D9A1148D0261F3
Serial 8009928A64107601AF05FA2F19F109
SKI A6255E80A94DB7F3967C1BC791DF92BCEE4BEB5F
EM EV TLS CA - G3C (via Sectigo AAA)
SHA-256 FD9D5C2DBBD4995AB69B8D50C439D9527B00529199C2FD01B2174EB58F07021F
Serial 05F078752DECE7A1BB8595D303167171
SKI A6255E80A94DB7F3967C1BC791DF92BCEE4BEB5F
EM OV CS CA - G3B (via emSign)
SHA-256 9E39DE2881273ACC225A149C72BA3E0F51424963669AB633EE1DC7DF5DB067B4
Serial 7818933F8F85B4619A2B35FBA83D0A
SKI 79FAE8ECCFDB0D758DA458D69FB6EDDC7C49DEE6
EM OV CS CA - G3B (via Sectigo AAA)
SHA-256 A496E23AC0CAB8155FC9B117B97EAE368EFCBB9041AEC8804D5A308D2D01C2D8
Serial 41E32B73AC185D6CE0D7480BACF84E69
SKI 79FAE8ECCFDB0D758DA458D69FB6EDDC7C49DEE6
EM OV CS CA - G3C (via emSign)
SHA-256 4B2460A466F95FD40113BCDCCA2CEB29B3B093921DE45474DA7DF48874C630B1
Serial 544B7F922C31AE220A4A922916F6E6
SKI EE6F73298D6FBFA7B31BC39534F61556447866B7
EM OV CS CA - G3C (via Sectigo AAA)
SHA-256 84112972B8E59D14560AE7E7119654474AAD119990CF3722BFC1E3B91615E1FD
Serial D6A5EF613B390F32EF9CDF349F772841
SKI EE6F73298D6FBFA7B31BC39534F61556447866B7
emSign Root TLS CA - G3 (root)
SHA-256 7DD78D5F4F13459A83DFF9ABBBA62EDBAF6F2D102BF257FD712F4D9F2746ED8D
Serial 0E760672F143459FC8FE0AB0BC05E394
SKI E13AAB217CF1E34D54AED472B7FD8B5942209054
emSign Root CS CA - G3 (root)
SHA-256 F2EDAAFF3D9B701FB4D14C9F285F8C0BAD90FC3BCC1FA07D47F4718EDABA34A5
Serial 018FCEC927C116F59C997EDC0CCD2E2B
SKI 687403F885CA8D5450571D16E0C8DE450DABCD2D
AAA Certificate Services (root)
SHA-256 D7A7A0FB5D7E2731D771E9484EBCDEF71D5F0C3E0A2948782BC83EE0EA699EF4
Serial 01
SKI A0110A233E96F107ECE2AF29EF82A57FD030A4B4
emSign ECC Root CA - G3 (root)
SHA-256 86A1ECBA089C4A8D3BBE2734C612BA341D813E043CF9E8A862CD5C57A36BBE6B
Serial 3CF607A968700EDA8B84
SKI 7C5D028413D4CC8A9B81CE171C2E291E9C486342
Quellen
- eMudhra Intermediate CA Kompromittierung: Offenlegungsseite, Zertifikatsliste, Testhosts und gepatchte Versionen
- Mozilla Bugzilla 2083449: Vorfallbericht und Ursachenanalyse
- Fleet: Finde und behebe die Vertrauensstellen, die dein Browser nicht abdeckt: Erkennung, Remediationsskripte und Laborergebnisse
- Google und Mozilla: Browserreaktion
- Node.js CLI-Dokumentation und Go crypto/x509: Wie jede Laufzeitumgebung ihre Wurzeln auswählt
Tipps und Best Practices
- Überlasse das Bundle des Agenten Factorial IT. Bearbeite oder stelle es nicht wieder her. Die Skripte überspringen es bereits, sobald es sauber ist.
- Beginne mit einer Pilotgruppe. Führe jedes Skript auf einer Handvoll Geräte aus, lies die Ausgabe und rolle es dann auf alle Geräte aus.
- Halte das Betriebssystem aktuell. Browser und Apps, die über das Betriebssystem verifizieren, sind nur sicher, wenn das Apple- oder Microsoft-Update installiert ist.
-
Vergiss nicht Laufzeiten und Images. Node.js, Electron, Go-Binärdateien,
certifiund Container-Images bleiben selbst auf einem gepatchten Gerät exponiert. Aktualisiere sie und baue sie neu. -
Überprüfe nach macOS-Updates erneut. Ein Update kann
/etc/ssl/cert.pemwiederherstellen, also führe den macOS-Bericht nach jedem Update aus. - Starte Dienste auf Linux-Servern neu. Die meisten Tools lesen das CA-Bundle nur beim Start.
-
Behandle ein auf einem Gerät gefundenes Intermediate als Vorfall. Eine
compromised_intermediate_present-Zeile bedeutet, dass jemand oder etwas dieses Zertifikat dort platziert hat.
Fehlerbehebung und FAQ
Fehlerbehebung
-
Das Windows-Skript von Fleet schlägt mit
ScriptContainedMaliciousContentfehl. Microsoft Defender hat es blockiert, weil das Skript die kompromittierten Zertifikate enthält. Führe stattdessen das Factorial IT-Skript für Windows aus oder bringe das Gerät online und hebe die Gruppenrichtlinie auf, die in der Zeilectl_autoupdate_policyangegeben ist. -
Das Factorial IT-Skript für Windows beendet sich mit
2. Einige Zertifikate konnten nicht heruntergeladen werden. Lies dieWARN-Zeilen und überprüfe, ob das Gerätcrt.sherreichen kann. -
Das macOS-Skript beendet sich mit
0, aberhomebrew_ca_certificatesist immer noch da. Homebrew wurde übersprungen, normalerweise weil die Xcode-Lizenz nicht akzeptiert wurde. Führesudo xcodebuild -license acceptauf dem Mac aus und führe das Skript erneut aus. -
Eine
fleetd_osquery_ca_bundle-Zeile bleibt nach einem vollen Tag online. Schicke eine E-Mail an support@factorial.it mit dem Gerätenamen. - Eine Fleet-Richtlinie schlägt auf einem Gerät ständig fehl. Das Skript hat sich geweigert, das Bundle des Agenten zu ändern. Die Ausgabe erklärt, warum.
-
Der Windows-Bericht zeigt
NOT_SYNCEDoderBLOCK_WILL_NOT_ARRIVE. Der Block von Microsoft hat das Gerät nicht erreicht: Es ist offline, verwendet nur WSUS oder eine Gruppenrichtlinie stoppt das automatische Update. Führe das Remediationsskript aus oder behebe die Ursache. -
Der macOS-Bericht zeigt
STALE_NO_APPLE_BLOCK. Der Mac hat den Block von Apple nicht erhalten. Er ist wahrscheinlich offline oder kann die Update-Server von Apple nicht erreichen. -
Ein Testhost gibt
200zurück. Dieser Client vertraut immer noch der gefälschten Kette. Überprüfe, welche Vertrauensstelle er verwendet, und behebe es mit den obigen Schritten.
FAQ
-
Musste ich etwas für den Factorial IT-Agenten tun?
Nein. Factorial IT entfernt beide Wurzeln aus dem Bundle des Agenten auf jedem registrierten Gerät, und neue Registrierungspakete kommen ohne sie.
-
Meine Geräte sind aktuell. Bin ich sicher?
Browser und Apps, die über das Betriebssystem verifizieren, sind es. Befehlszeilentools auf macOS, das Linux-Systembundle, Node.js, Electron,certifi, Go-Binärdateien auf Linux und Container-Images sind es nicht, bis du sie reparierst.
-
Könnten meine Nutzer über ihre Browser angegriffen worden sein?
Nicht über Browser, die Certificate Transparency durchsetzen: kein TLS-Zertifikat von diesen Intermediären erscheint in CT-Protokollen. Ein Angreifer müsste auch im Netzwerkpfad sein.
-
Sind Pakete, die mit
aptoderdnfinstalliert wurden, gefährdet?
Nein. Sie sind GPG-signiert.
-
Ist es sicher, die Remediationsskripte zweimal auszuführen?
Ja. Sie behalten ein*.pre-emudhra-Backup jeder Datei, die sie ändern, so dass du auch zurückrollen kannst.
-
Warum bleiben
root_in_keychainundroot_in_cert_store-Zeilen nach der Behebung bestehen?
Sie sind nur kontextuell. Apple und Microsoft behalten beide Wurzeln auf jedem Gerät und blockieren stattdessen die Intermediates.
-
Wird der benutzerdefinierte Agent Geräte neu starten oder löschen?
Nein. Er stellt niemals ein Backup wieder her, sperrt, löscht oder startet ein Gerät neu und wartet auf die Genehmigung eines Administrators vor jeder Phase.
-
Was passiert mit dem Remediationskit, wenn der Job erledigt ist?
Es bleibt an Ort und Stelle. Der Agent schließt sein Ticket und teilt dir mit, dass es pausiert werden kann.