Nel ottobre 2026, otto autorità di certificazione intermedie di eMudhra (CA) sono state trovate con chiavi private che chiunque può dedurre. Usa questa guida per trovare i trust store sui tuoi dispositivi che ancora si fidano delle radici compromesse e per pulirli.
Caratteristica/Funzionalità
Panoramica
I browser e i sistemi operativi hanno bloccato gli otto intermedi in pochi giorni. Qualsiasi cosa che porta la propria copia delle radici fidate non ha ricevuto quel blocco: gli strumenti da riga di comando, i runtime e gli agenti continuano a fidarsi dei certificati falsificati fino a quando il loro file di radice non cambia.
Factorial IT rimuove le due radici compromesse dal pacchetto CA dell'agente Factorial IT su ogni Mac, Windows e dispositivo Linux registrato. I nuovi pacchetti di registrazione arrivano senza di esse. Un dispositivo che è offline riceve la correzione non appena si riconnette. Non c'è nulla che tu debba fare riguardo all'agente.
Tutti gli altri trust store appartengono al sistema operativo, agli strumenti del tuo team o alle tue app, quindi il tempismo è tuo. Hai due strade:
- Un agente personalizzato, Chiudi l'esposizione della CA eMudhra, che chiede a un amministratore prima di ogni cambiamento.
- Manualmente, con i rapporti di rilevamento e gli script di rimedio di Fleet.
Cosa è successo
Ad aprile 2025, eMudhra ha creato le otto chiavi private come interi più piccoli di 256, quando avrebbero dovuto essere numeri casuali a 384 bit. Ogni chiave può quindi essere ricostruita in millisecondi. Con una chiave, chiunque può firmare un certificato per qualsiasi hostname. Sei degli intermedi emettono certificati TLS; gli altri due firmano codice.
Ogni intermedio esiste due volte: una volta emesso dalle radici emSign di eMudhra e una volta come cross-sign da parte della radice AAA Certificate Services di Sectigo. In totale, 16 certificati devono essere disconosciuti. Due radici devono anche essere rimosse da qualsiasi file CA che le contiene ancora: emSign ECC Root CA - G3 e AAA Certificate Services.
| Data (2026) | Evento |
|---|---|
| 17 ottobre | Un ricercatore riporta le chiavi. Chrome e Firefox bloccano i 16 certificati. |
| 18 ottobre | eMudhra revoca gli otto intermedi. I cross-sign di Sectigo vengono revocati il 19 ottobre. |
| 20 ottobre | Microsoft distribuisce il blocco attraverso gli aggiornamenti automatici dell'elenco di fiducia di Windows. |
| Entro il 22 ottobre | Apple distribuisce il blocco su macOS, iOS e iPadOS. |
Nessuno dei certificati TLS di questi intermedi appare nei registri di Certificate Transparency (CT). I browser che applicano CT non sono quindi mai stati aperti ad attacchi. La maggior parte degli altri client, curl tra essi, ignora CT. Un attaccante deve anche trovarsi sul percorso di rete, ad esempio attraverso una rete Wi-Fi non autorizzata, un router o proxy compromesso, o DNS manomesso.
Cosa rimane esposto
I blocchi di Apple e Microsoft proteggono solo il software che verifica attraverso il sistema operativo o controlla la revoca. Il software con il proprio file di radici continua ad accettare catene falsificate fino a quando qualcuno non aggiorna quel file.
| Percorso di fiducia | Coperto dai blocchi del fornitore | Peggior caso se lasciato così com'è | Chi lo risolve |
|---|---|---|---|
| Browser e app che verificano attraverso il sistema operativo (Safari, Mail, Windows Schannel, Go su macOS e Windows) | Sì, una volta installato l'aggiornamento del sistema operativo | Nessuno | Niente oltre agli aggiornamenti del sistema operativo |
| Il pacchetto CA dell'agente Factorial IT | No | Un server impostore Factorial IT raccoglie i risultati delle query e la chiave del nodo del dispositivo, e invia le proprie query | Factorial IT |
Strumenti da riga di comando di macOS (curl, git, python3, perl, ruby, openssl leggono /etc/ssl/cert.pem) |
No: Apple non ha aggiornato questo file | Le password e i token API letti in transito; curl | sh installatori sostituiti da malware |
Tu |
Pacchetto di sistema Linux (ca-certificates) |
Dopo l'aggiornamento del pacchetto solo. Il 21 ottobre, Rocky Linux 9 e Fedora 44 stabile continuavano a spedire la radice. | Ogni strumento OpenSSL e GnuTLS sul dispositivo può essere impersonato: backup, webhook, agenti di monitoraggio, client di database | Tu |
| Dispositivi Windows che hanno perso l'aggiornamento di Microsoft (offline, solo WSUS, o bloccati da Group Policy) | No | Certificati TLS falsificati accettati; malware firmato con i due intermedi di firma del codice supera i controlli di firma | Tu |
| Node.js ed Electron | No: le build ufficiali integrano uno snapshot di radice fissato al rilascio | Le chiavi API e le chiamate servizio-a-servizio vanno all'attaccante, anche su un dispositivo patchato | Tu |
certifi e pip installati con pip |
No: ognuno porta le proprie radici | Stesso problema di Node.js | Tu |
| Binaries Go su Linux | No: Go legge il pacchetto di sistema lì | CLI cloud, kubectl e terraform inviano le loro credenziali a un'API impostore |
Tu |
| Container, server e immagini CI | No: ogni immagine porta il proprio pacchetto | Stesso problema del pacchetto di sistema Linux, in ogni immagine costruita prima della correzione | Tu |
I pacchetti che installi con apt o dnf non sono a rischio, poiché sono firmati GPG.
Cosa Factorial IT risolve per te
L'agente Factorial IT porta il proprio pacchetto CA: /opt/orbit/certs.pem su macOS e Linux, e C:\Program Files\Orbit\certs.pem su Windows. Il suo componente osquery si basa su questo file, non sul trust store del sistema operativo, per comunicare con il tuo server Factorial IT. Il file viene scritto una sola volta, quando l'agente è installato, e mai aggiornato. Ecco perché i blocchi del fornitore non lo raggiungono mai.
Factorial IT rimuove entrambe le radici da questo file su ogni dispositivo registrato. Non toccarlo tu stesso: gli script di rimedio qui sotto notano che è già pulito e lo lasciano in pace.
Su Linux, l'aggiornamento dell'agente si basa sul pacchetto di sistema, quindi l'aggiornamento di ca-certificates lo copre anche. Su macOS e Windows, l'aggiornamento verifica attraverso il sistema operativo, quindi i blocchi di Apple e Microsoft lo proteggono già.
Come usare
Scegli una delle due strade per i trust store che Factorial IT non gestisce:
- Con un agente personalizzato. Segue il percorso manuale per tuo conto e attende l'approvazione di un amministratore prima di ogni cambiamento. Vedi Correggi con un agente personalizzato qui sotto.
- Manualmente. Esegui tu stesso i rapporti di rilevamento e gli script di rimedio. Vedi Correggi manualmente qui sotto.
Qualunque sia il percorso scelto, termina aggiornando i runtime che portano le proprie radici, quindi controlla il risultato come descritto in Verifica.
Correggi con un agente personalizzato
Il modello dell'agente Chiudi l'esposizione della CA eMudhra viene eseguito ogni due ore e avanza a fasi. Non esegue mai uno script di rimedio fino a quando un amministratore non approva il suo ticket.
- Vai su AI Agents > Agents, clicca su Browse templates, filtra per Equipment, e apri Chiudi l'esposizione della CA eMudhra.
- Negli istruzioni, trova
PILOT DEVICESe scrivi un gruppo di dispositivi o nomi di dispositivi dopoPilot:. Se lo lasci vuoto, l'agente suggerisce fino a tre Mac, tre dispositivi Linux e tre dispositivi Windows che necessitano ancora della correzione. - Clicca su Crea. L'agente inizia al suo prossimo trigger. Per vedere una corsa prima, apri l'agente e clicca su Dry run: ogni azione è registrata invece di essere eseguita.
- L'agente apre un singolo ticket, compromissione CA eMudhra: cosa resta da correggere, e invia un'email agli amministratori una sola volta. Rispondi a quel ticket per approvare il pilota, e successivamente il rollout.
| Fase | Cosa fa l'agente | Cosa ha bisogno da te |
|---|---|---|
| Inventario | Aggiunge il kit di rimedio eMudhra di Factorial IT: tre rapporti che ogni computer esegue ogni ora e, nella libreria di script, uno script di controllo di sola lettura, gli script di rimedio di macOS e Linux di Fleet, lo script di Windows di Factorial IT e lo script di Windows di Fleet per gli amministratori da eseguire manualmente. Apre il suo ticket con i dispositivi raggruppati per rilevamento. | Niente. I primi risultati arrivano entro un'ora. |
| Pilota | Esegue lo script di rimedio di ciascuna piattaforma sui dispositivi pilota e pubblica ogni risultato sul ticket. | Un'approvazione sul ticket |
| Rollout | Esegue su ogni dispositivo Mac e Linux con un rilevamento di sistema e ogni dispositivo Windows che non è stato raggiunto dal blocco di Microsoft, quindi controlla che i loro prossimi rapporti siano puliti. | Un'approvazione sul ticket |
| Persone | Apre un ticket a nome di ogni persona i cui runtime possono aggiornare solo loro (Node.js, Python certifi, binaries Go), e dice loro cosa aggiornare. |
Un'approvazione prima che scriva a loro |
| Fatto | Chiude il suo ticket quando non c'è più nulla da correggere e dice che l'agente può essere messo in pausa. | Metti in pausa l'agente |
Oltre alle fasi, l'agente:
- Avvisa subito gli amministratori, sul ticket e via email, se un dispositivo contiene uno degli intermedi compromessi.
- Elenca i Mac che non possono raggiungere i server di aggiornamento di Apple e i dispositivi Windows dove una Group Policy blocca l'aggiornamento di Microsoft.
- Non esegue mai lo script di Windows di Fleet, perché Microsoft Defender lo blocca. Se un antivirus rifiuta una delle sue esecuzioni, informa gli amministratori. Possono quindi scaricare lo script dalla libreria di script e eseguirlo ovunque il loro antivirus lo consente.
- Lascia il pacchetto dell'agente Factorial IT a Factorial IT. Non ripristina mai un backup, e non blocca, cancella o riavvia un dispositivo.
Una volta completato il lavoro, il kit rimane dove si trova.
Correggi manualmente
Passo 1: esegui i rapporti di rilevamento
Fleet fornisce un rapporto di rilevamento per ogni sistema operativo. Nella console di Fleet, crea un rapporto e incolla il SQL per ogni sistema operativo qui sotto. Puoi anche gestire tutti e tre in GitOps con emudhra-ca-compromise.reports.yml, che li esegue una volta al giorno.
Rapporto macOS
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.```html
- 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
-- Explicit block added by remediate-emudhra-ca-compromise-windows.ps1. "Untrusted Certificates" is the English
-- display name of the Disallowed store. Microsoft's own CTL block does not show up here.
SELECT 'disallowed_store_block', COUNT(DISTINCT sha1) || ' of 16 compromised intermediates',
'LocalMachine\Untrusted Certificates',
CASE WHEN COUNT(DISTINCT sha1) = 16 THEN 'OK_EXPLICITLY_DISTRUSTED'
ELSE 'NOT_PRESENT run the remediation script for an explicit block' END
FROM certificates
WHERE store_location = 'LocalMachine'
AND store = 'Untrusted Certificates'
AND sha1 IN ('a99b289464f3b44343270a7a1e910f02370483fe','1396be1372bc93dfa2a433ca964dba91548a6e57',
'5f014e0db3bb8f950e0598ab280846d383fc57be','5dfa19197d1c1cf629af7c0cd865543c5050227c',
'f33acd1f5d31aa81ac18c72c928446226d3d5914','19069bd6533bff93fb67c71fb3376b4ea7402c3b',
'8ad23bc78845d6faae1d534bac89f0e36ba55a11','4b0944c14f8c2ccba4e4f32104ad920fa15ee331',
'7fcc31aab874ce6c8ee8584f54cfd08646b54117','305fc1e253dcab71b95d4995dae3cb09d562f22a',
'c988f3d0cc1629ffc43165d6464c9b6ef73d6e48','8588708e875a1f8aa83524f3559080f7e17068c7',
'd33195a244046a3263fb5e0e83c6803a5b2e7bc3','ee26d7ae3cc71718f6e07d7d0095076f0c158f63',
'1f4a5d178f8b6a8ef0f6784155bd5fea91158b12','7fde64753a957b98f172fd2ab0d922551909c7ba')
UNION ALL
-- Microsoft's 2026-10-20 block ships through the Disallowed CTL auto-update (CTL Updater), not Windows Update.
SELECT 'ctl_autoupdate_policy', name, 'data=' || data,
CASE WHEN name = 'DisableRootAutoUpdate' AND data = '1' THEN 'BLOCK_WILL_NOT_ARRIVE auto root update disabled by policy'
WHEN name = 'EnableDisallowedCertAutoUpdate' AND data = '0' THEN 'BLOCK_WILL_NOT_ARRIVE disallowed CTL update disabled by policy'
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-only, or policy)' 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, 'REVIEW Go>=1.27.3/1.26.10, Node>=22.23.4/24.22.1/26.12.1 (binaries built earlier stay vulnerable)'
FROM programs
WHERE name LIKE 'Go Programming Language%' OR name = 'Node.js'
UNION ALL
-- fleetd ships its own CA bundle. osqueryd uses it (not the Windows store) for TLS to Fleet.
-- Windows osquery cannot parse PEM files, so match one unique line from each root
-- (fleetd bundles wrap at 76 columns). The join skips hosts without the file.
SELECT 'fleetd_osquery_ca_bundle',
CASE WHEN l.line LIKE 'CBeQyh%' THEN 'emSign ECC Root CA - G3' ELSE 'AAA Certificate Services' END,
l.path, 'EXPOSED osqueryd-to-Fleet TLS trusts this root; run the remediation script'
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')
UNION ALL
SELECT 'fleetd_agent', 'orbit ' || version, 'channel=' || orbit_channel || ' scripts_enabled=' || scripts_enabled,
'INFO orbit is Go; on Windows it verifies TLS through the OS, so the Microsoft block applies'
FROM orbit_info
UNION ALL
-- Go tools installed with go install (each user's go\bin).
SELECT 'go_binary', name || ' ' || version, installed_path || ' ' || go_version,
CASE WHEN CAST(substr(go_version, 5) AS INTEGER) >= 28
OR (CAST(substr(go_version, 5) AS INTEGER) = 27 AND CAST(substr(go_version, 8) AS INTEGER) >= 3)
OR (CAST(substr(go_version, 5) AS INTEGER) = 26 AND CAST(substr(go_version, 8) AS INTEGER) >= 10)
THEN 'FIXED_GO'
ELSE 'REBUILD with Go>=1.27.3/1.26.10' END
FROM go_binaries
UNION ALL
SELECT 'host', name, version || ' build ' || build, 'INFO'
FROM os_version;Ogni rapporto restituisce quattro colonne (finding, item, detail e status) e una riga per segnale. Se un finding non ha righe, non è stato trovato.
| Finding | Cosa significa |
|---|---|
compromised_intermediate_present |
One dei 16 certificati revocati si trova in un archivio locale. Indaga chi l'ha messo lì. |
root_in_ca_bundle / root_in_pem_bundle
|
Un file CA di sistema continua a fidarsi di una root compromessa. Gli strumenti da riga di comando sono esposti. |
fleetd_osquery_ca_bundle |
Il bundle dell'agente IT Factorial continua a fidarsi di una root compromessa. Factorial IT lo pulisce. |
apple_block_applied / disallowed_ctl_sync
|
Se il blocco Apple o Microsoft è stato applicato. STALE o NOT_SYNCED significa che non è stato applicato. |
disallowed_store_block |
Solo Windows: quanti dei 16 certificati lo script di remediation ha esplicitamente distrutto. |
ctl_autoupdate_policy |
Le Group Policy bloccano gli aggiornamenti automatici di disaffido di Microsoft. |
ca_certificates_pkg, homebrew_ca_certificates, python_certifi, toolchain
|
Versioni di pacchetti e runtime, da confrontare con le versioni fisse in Aggiorna i runtime che portano le proprie radici. |
go_binary |
Uno strumento Go in un go/bin dell'utente costruito con Go più vecchio di 1.27.3 o 1.26.10. |
root_in_keychain / root_in_cert_store, fleetd_agent, host
|
Solo contesto. Apple e Microsoft forniscono entrambe le radici su ogni dispositivo e bloccano invece gli intermedi, quindi queste righe rimangono dopo la correzione. |
Se una riga fleetd_osquery_ca_bundle è ancora presente su un dispositivo che è stato online per un giorno intero, dobbiamo controllarla. Invia un'email a support@factorial.it con il nome del dispositivo.
Passo 2: eseguire gli script di remediation
Fleet mantiene uno script di remediation per ogni OS:
| Script | Cosa cambia |
|---|---|
| remediate-emudhra-ca-compromise-macos.sh | Rimuove entrambe le radici da /etc/ssl/cert.pem e aggiorna i formulae ca-certificates e certifi di Homebrew come proprietario di Homebrew. |
| remediate-emudhra-ca-compromise-linux.sh | Aggiorna ca-certificates (apt, dnf, yum, zypper, apk). Dove la distribuzione non ha ancora una correzione, disaffida le radici nativamente: una voce ! in /etc/ca-certificates.conf su Debian, Ubuntu e Alpine, un file di blacklist p11-kit su Fedora, RHEL, Arch e openSUSE. |
| remediate-emudhra-ca-compromise-windows.ps1 | Aggiunge i 16 intermedi all'archivio Certificati non attendibili della macchina, per i dispositivi che l'aggiornamento di Microsoft non può raggiungere. Microsoft Defender lo blocca: usa invece lo script IT Factorial per Windows qui sotto. |
Gli script lasciano intatto il bundle dell'agente IT Factorial una volta che Factorial IT lo ha pulito. Puoi eseguirli più di una volta senza danni. Prima di modificare un file, salvano un backup *.pre-emudhra di esso. Codici di uscita: 0 significa che il dispositivo è protetto, 2 significa che qualcosa necessita di attenzione e 1 significa un errore. Quando un'esecuzione risulta Fallita, il suo output spiega perché.
- Scarica ciascuno script da GitHub con Scarica file raw. Poi, nella console IT Factorial, vai su Gestione Dispositivi > Script > Libreria e trascinalo in Aggiungi uno script. Il nome e la piattaforma sono già compilati per te.
- Clicca Esegui script > Target per gruppo di dispositivi, scegli un piccolo gruppo come i dispositivi del team IT e leggi l'output in Cronologia Esecuzioni.
- Esegui nuovamente ciascuno script, questa volta con Target tutti i dispositivi.
- Controlla un dispositivo contro gli host di test pubblici e riesegui i rapporti, come descritto in Verifica.
Se Microsoft Defender è attivo. Defender ferma lo script di Windows di Fleet prima che inizi, sia che tu lo avvii con Esegui script o manualmente. Lo script contiene i certificati compromessi, quindi l'esecuzione fallisce con ScriptContainedMaliciousContent. Su quei dispositivi hai due opzioni: eseguire lo script IT Factorial per Windows qui sotto, oppure lasciare che l'aggiornamento automatico di fiducia di Microsoft corregga il dispositivo. Per la seconda opzione, porta il dispositivo online e rimuovi la Group Policy nominata nella riga ctl_autoupdate_policy del rapporto Windows.
Script IT Factorial per Windows
distrust-emudhra-intermediates-windows.ps1 recupera ciascuno dei 16 intermedi da crt.sh tramite il suo SHA-256, controlla i byte e lo aggiunge a Certificati non attendibili. Poiché non contiene certificati, Microsoft Defender lo lascia eseguire. Il dispositivo deve essere in grado di raggiungere crt.sh. Codici di uscita: 0 quando tutti e 16 sono disattesi, 2 quando alcuni non possono essere scaricati (le righe WARN forniscono il motivo) e 1 in caso di errore. Salvalo con quel nome di file e aggiungilo alla libreria di script insieme agli altri.
# distrust-emudhra-intermediates-windows.ps1
# Aggiunge i 16 intermediari eMudhra compromessi (ottobre 2026) allo store dei Certificati Non Affidabili di questa macchina,
# il blocco che Microsoft distribuisce attraverso il suoi aggiornamenti automatici di fiducia, per un dispositivo che non l'ha ricevuto.
# Non includere certificati: ognuno è scaricato da crt.sh per SHA-256 ed aggiunto solo quando i suoi byte corrispondono.
# Uscita: 0 = tutti 16 sono non affidabili, 2 = alcuni non possono essere scaricati o aggiunti (leggi le linee WARN), 1 = errore.
$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 {
$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 harisposto bytes diversi per $Fingerprint (tentativo $attempt)")
} catch {
[Console]::WriteLine("WARN crt.sh: $($_.Exception.Message) per $Fingerprint (tentativo $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 "PRESENT $fingerprint"; continue }
$cert = Get-Certificate $fingerprint
if ($null -eq $cert) { continue }
$store.Add($cert)
$present[$fingerprint] = $true
$added++
Write-Output "ADDED $fingerprint $($cert.Subject)"
}
$missing = @($Sha256 | Where-Object { -not $present.ContainsKey($_) }).Count
Write-Output "VERIFY $($Sha256.Count - $missing) di $($Sha256.Count) intermediari compromessi in Certificati Non Affidabili ($added aggiunti)"
if ($missing -gt 0) { exit 2 }
exit 0
} finally {
$store.Close()
}
Buono sapere dopo aver eseguito gli script
- Riavvia i servizi a lungo termine sui server Linux. La maggior parte degli strumenti legge solo il bundle CA all'avvio.
-
Esegui nuovamente il report macOS dopo ogni aggiornamento macOS. Un aggiornamento può ripristinare
/etc/ssl/cert.pemallo stato originale. -
Fai attenzione se Homebrew viene saltato. Se
brewnon può essere eseguito come proprietario di Homebrew, ad esempio perché la licenza Xcode non è stata accettata, lo script macOS di Fleet salta Homebrew silenziosamente e termina comunque con0. Il report macOS continua a mostrare la sua rigahomebrew_ca_certificates. Eseguisudo xcodebuild -license acceptsu quel Mac, quindi esegui nuovamente lo script. La copia che l'agente personalizzato inserisce nella libreria Script stampa un avviso e termina con2invece.
Ripristina una modifica
- Su macOS e Linux, copia ciascun backup
*.pre-emudhrasopra il file da cui è stato preso. Su Linux, rimuovi anche i fileemudhra-*.pemaggiunti alla cartella di blocco p11-kit, ripristina/etc/ca-certificates.conf.pre-emudhrase esiste e eseguiupdate-ca-certificatesoupdate-ca-trust. - Su Windows, apri
certlm.msce rimuovi le 16 voci aggiunte da Certificati Non Affidabili.
Non ripristinare mai il bundle dell'agente IT di Factorial. Farlo renderebbe nuovamente fidati i root compromessi.
Automatizza la correzione con le politiche di Fleet
Nella console di Fleet, crea una politica per ogni OS e imposta la sua automazione Esegui script sullo script di rimedio corrispondente. I dispositivi che non superano la politica si correggono automaticamente. Fleet mantiene tutte e tre le politiche in GitOps in emudhra-ca-compromise.policies.yml. Se un dispositivo continua a fallire, lo script si è rifiutato di modificare il bundle dell'agente, e l'output dello script fornisce il motivo.
Politica macOS. Viene superata quando /etc/ssl/cert.pem e il bundle dell'agente non contengono più nessun root:
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'));Politica Linux. Viene superata quando nessun store di certificati e non il bundle dell'agente contiene nessun root:
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'));Politica di Windows. Passa quando il pacchetto dell'agente non contiene né root. Windows osquery non può leggere i file PEM, quindi la query cerca una riga che appare solo in ciascun root:
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'));
Aggiorna i runtime che portano le proprie radici
Questi strumenti vengono forniti con la propria copia delle radici, quindi solo un nuovo rilascio li corregge. Aggiornali su workstation, server e immagini dei container. Poi ricostruisci le tue immagini e qualsiasi binario che compili tu stesso.
| Software | Corretto in |
|---|---|
| Node.js | 22.23.4, 24.22.1, 26.12.1 |
| Electron (e le app desktop costruite su di esso) | 42.11.16, 43.8.1, 44.9.1 |
| Go (ricostruisci ogni binario costruito con una toolchain più vecchia) | 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 |
Su Linux, la correzione arriva nel pacchetto ca-certificates:
| Distribuzione | Versione ca-certificates corretta |
|---|---|
| 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 installato dalla distribuzione, come python3-certifi su Debian e Ubuntu, utilizza il pacchetto di sistema. Per l'elenco aggiornato del software corretto, vedere il sito di divulgazione.
Verifica
Due host di test pubblici presentano certificati da un intermediario compromesso: uno si collega al root emSign, l'altro al cross-sign di Sectigo. Un client protetto rifiuta entrambi.
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/Se ricevi un errore di certificato, il client è protetto. Se ricevi 200, continua a fidarsi della catena contraffatta. Successivamente, leggi di nuovo i rapporti, o il ticket dell'agente: i risultati del pacchetto di sistema e il risultato del pacchetto dell'agente Factorial dovrebbero essere stati rimossi.
Riferimento: certificati compromessi
Le due radici da rimuovere dai pacchetti CA:
| Root | SHA-1 | Incluso in |
|---|---|---|
emSign ECC Root CA - G3 |
3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1 |
Apple, Chrome, Microsoft, Mozilla |
AAA Certificate Services (Sectigo) |
d1eb23a46d17d68fd92564c2f1f1601764d8e349 |
Apple, Microsoft (rimossa da Chrome e Mozilla) |
Due ulteriori radici rilasciano direttamente gli intermediari. Solo il negozio di Microsoft li contiene, e Microsoft blocca gli intermediari stessi:
| Root | SHA-1 |
|---|---|
emSign Root TLS CA - G3 |
39d3236e4a609ab6190cbfa1ad02b3cc61dfc2c3 |
emSign Root CS CA - G3 |
1f74b6010a219fd9ca058d07aa053d15efd9300d |
I 16 intermediari compromessi:
| Intermediario | Uso | Emesso da | 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 | Firma del codice | emSign Root CS CA - G3 | d33195a244046a3263fb5e0e83c6803a5b2e7bc3 |
| EM OV CS CA - G3B | Firma del codice | AAA Certificate Services | ee26d7ae3cc71718f6e07d7d0095076f0c158f63 |
| EM OV CS CA - G3C | Firma del codice | emSign Root CS CA - G3 | 1f4a5d178f8b6a8ef0f6784155bd5fea91158b12 |
| EM OV CS CA - G3C | Firma del codice | AAA Certificate Services | 7fde64753a957b98f172fd2ab0d922551909c7ba |
Impronte SHA-256, numeri di serie e identificatori di chiave. I due certificati di un intermediario utilizzano la stessa chiave, quindi condividono anche il suo identificatore di chiave soggetto (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
Fonti
- compromesso del CA intermedio emudhra: sito di divulgazione, elenco dei certificati, host di test e versioni corrette
- Mozilla Bugzilla 2083449: rapporto sull'incidente e causa principale
- Fleet: trova e risolvi i trust store che il tuo browser non copre: rilevamento, script di remediation e risultati di laboratorio
- Google e Mozilla: risposta del browser
- Documentazione CLI di Node.js e Go crypto/x509: come ogni runtime sceglie le proprie radici
Consigli e migliori pratiche
- Lascia il pacchetto dell'agente a Factorial IT. Non modificarlo né ripristinarlo. Gli script lo saltano già una volta che è pulito.
- Inizia con un gruppo pilota. Esegui ogni script su un numero ristretto di dispositivi, leggi l'output e poi distribuisci a tutti i dispositivi.
- Tieni il sistema operativo aggiornato. I browser e le app che verificano tramite il sistema operativo sono sicuri solo una volta installato l'aggiornamento di Apple o Microsoft.
-
Non dimenticare i runtime e le immagini. Node.js, Electron, binari Go,
certifie immagini container rimangono esposti anche su un dispositivo corretto. Aggiornali e ricostruisci. -
Controlla di nuovo dopo gli aggiornamenti di macOS. Un aggiornamento può ripristinare
/etc/ssl/cert.pem, quindi esegui il rapporto di macOS dopo ciascuno di essi. - Riavvia i servizi sui server Linux. La maggior parte degli strumenti legge il pacchetto CA solo all'avvio.
-
Tratta un intermedio trovato su un dispositivo come un incidente. Una riga
compromised_intermediate_presentsignifica che qualcuno o qualcosa ha messo quel certificato lì.
Risoluzione dei problemi e FAQ
Risoluzione dei problemi
-
Lo script di Windows di Fleet fallisce con
ScriptContainedMaliciousContent. Microsoft Defender lo ha bloccato, perché lo script contiene i certificati compromessi. Esegui invece lo script Factorial IT per Windows, oppure collega il dispositivo online e rimuovi la Group Policy nominata nella rigactl_autoupdate_policy. -
Lo script Factorial IT per Windows termina con
2. Alcuni certificati non sono stati scaricati. Leggi le righeWARNe verifica che il dispositivo possa raggiungerecrt.sh. -
Lo script di macOS termina con
0mahomebrew_ca_certificatesè ancora presente. Homebrew è stato saltato, solitamente perché la licenza di Xcode non è stata accettata. Eseguisudo xcodebuild -license acceptsu Mac e ripeti lo script. -
Una riga
fleetd_osquery_ca_bundlerimane dopo un'intera giornata online. Invia un'email a support@factorial.it con il nome del dispositivo. - Una policy di Fleet continua a fallire su un dispositivo. Lo script ha rifiutato di cambiare il pacchetto dell'agente. La sua output spiega perché.
-
Il rapporto di Windows mostra
NOT_SYNCEDoBLOCK_WILL_NOT_ARRIVE. Il blocco di Microsoft non è arrivato al dispositivo: è offline, utilizza solo WSUS, o una Group Policy impedisce l'aggiornamento automatico. Esegui lo script di remediation, oppure risolvi la causa. -
Il rapporto di macOS mostra
STALE_NO_APPLE_BLOCK. Il Mac non ha ricevuto il blocco di Apple. È probabilmente offline o non può raggiungere i server di aggiornamento di Apple. -
Un host di test restituisce
200. Quel client continua a fidarsi della catena contraffatta. Controlla quale trust store utilizza e risolvilo con i passaggi sopra.
FAQ
-
Devo fare qualcosa per l'agente Factorial IT?
No. Factorial IT rimuove entrambe le radici dal pacchetto dell'agente su ogni dispositivo registrato, e i nuovi pacchetti di registrazione arrivano senza di esse.
-
I miei dispositivi sono aggiornati. Sono al sicuro?
I browser e le app che verificano tramite il sistema operativo lo sono. Gli strumenti da linea di comando su macOS, il pacchetto di sistema Linux, Node.js, Electron,certifi, binari Go su Linux e immagini container non lo sono, fino a quando non li correggi.
-
I miei utenti potrebbero essere stati attaccati tramite i loro browser?
No, non tramite browser che applicano la Trasparenza dei Certificati: nessun certificato TLS di questi intermediari appare nei log CT. Un attaccante dovrebbe anche essere sulla rete.
-
I pacchetti installati con
aptodnfsono a rischio?
No. Sono firmati GPG.
-
È sicuro eseguire gli script di remediation due volte?
Sì. Mantengono un backup*.pre-emudhradi ogni file che cambiano, quindi puoi anche ripristinare.
-
Perché le righe
root_in_keychaineroot_in_cert_storerimangono dopo la correzione?
Sono solo contestuali. Apple e Microsoft mantengono entrambe le radici su ogni dispositivo e bloccano invece gli intermediari.
-
Il agente personalizzato riavvierà o cancellerà i dispositivi?
No. Non ripristina mai un backup, non blocca, cancella o riavvia un dispositivo, e aspetta l'approvazione di un amministratore prima di ogni fase.
-
Cosa succede al kit di remediation quando il lavoro è finito?
Rimane in posizione. L'agente chiude il suo ticket e ti informa che può essere messo in pausa.