Voltar

Responder à violação do CA eMudhra

Em outubro de 2026, oito autoridades de certificação intermediárias (CAs) da eMudhra foram encontradas com chaves privadas que qualquer um pode descobrir. Use este guia para encontrar os repositórios de confiança em seus dispositivos que ainda confiam nas raízes comprometidas e para limpá-los.


 

Funcionalidade

Visão geral

Navegadores e sistemas operacionais bloquearam os oito intermediários em poucos dias. Qualquer coisa que tenha sua própria cópia das raízes confiáveis não recebeu esse bloqueio: ferramentas de linha de comando, tempos de execução e agentes continuam confiando em certificados forjados até que seu arquivo raiz mude.

Factorial IT remove as duas raízes comprometidas do pacote CA do agente Factorial IT em cada Mac, Windows e dispositivo Linux registrado. Novos pacotes de registro vêm sem elas. Um dispositivo que está offline recebe a correção assim que se reconecta. Não há nada que você precise fazer sobre o agente.

Todo outro repositório de confiança pertence ao sistema operacional, às ferramentas de suas equipes ou aos seus próprios aplicativos, então o tempo é seu. Você tem duas opções:

  • Um agente personalizado, Fechar a exposição da CA eMudhra, que pede a um administrador antes de cada mudança.
  • Manual, com os relatórios de detecção e scripts de remediação do Fleet.

 

O que aconteceu

Em abril de 2025, a eMudhra criou as oito chaves privadas como inteiros menores que 256, quando deveriam ser números aleatórios de 384 bits. Cada chave pode, portanto, ser reconstruída em milissegundos. Com uma chave, qualquer um pode assinar um certificado para qualquer nome de host. Seis dos intermediários emitem certificados TLS; os outros dois assinam código.

Cada intermediário existe duas vezes: uma vez emitido pelas raízes emSign da eMudhra e uma vez como um cross-sign do root AAA Certificate Services da Sectigo. No total, 16 certificados devem ser desconsiderados. Duas raízes também devem ser removidas de qualquer arquivo CA que ainda as contenha: emSign ECC Root CA - G3 e AAA Certificate Services.

Data (2026) Evento
17 de outubro Um pesquisador relata as chaves. Chrome e Firefox bloqueiam os 16 certificados.
18 de outubro A eMudhra revoga os oito intermediários. Os cross-signs da Sectigo são revogados em 19 de outubro.
20 de outubro A Microsoft envia o bloqueio através das atualizações automáticas da lista de confiança do Windows.
Até 22 de outubro A Apple envia o bloqueio no macOS, iOS e iPadOS.

Nenhum dos certificados TLS desses intermediários aparece nos registros de Transparência de Certificado (CT). Navegadores que impõem CT, portanto, nunca estiveram abertos a ataques. A maioria dos outros clientes, incluindo curl, ignora CT. Um atacante também precisa estar no caminho da rede, por exemplo, através de uma rede Wi-Fi maliciosa, um roteador ou proxy sequestrado, ou DNS adulterado.

 

O que permanece exposto

Os bloqueios da Apple e da Microsoft protegem apenas o software que verifica através do OS ou verifica a revogação. O software com seu próprio arquivo de raízes continua aceitando cadeias forjadas até que alguém atualize esse arquivo.

Caminho de confiança Coberto pelos bloqueios dos fornecedores Pior caso se deixado como está Quem corrige
Navegadores e aplicativos que verificam através do OS (Safari, Mail, Windows Schannel, Go no macOS e Windows) Sim, uma vez que a atualização do OS esteja instalada Nenhum Nada além de atualizações de OS
O pacote CA do agente Factorial IT Não Um servidor impostor Factorial IT coleta resultados de consulta e a chave do nó do dispositivo, e envia suas próprias consultas Factorial IT
Ferramentas de linha de comando do macOS (curl, git, python3, perl, ruby, openssl lêem /etc/ssl/cert.pem) Não: a Apple não atualizou este arquivo Senhas e tokens de API lidos em trânsito; instaladores curl | sh trocados por malware Você
Pacote de sistema Linux (ca-certificates) Apenas após a atualização do pacote. Em 21 de outubro, Rocky Linux 9 e Fedora 44 estáveis ainda enviaram a raiz. Cada ferramenta OpenSSL e GnuTLS no dispositivo pode ser impersonada: backups, webhooks, agentes de monitoramento, clientes de banco de dados Você
Dispositivos Windows que perderam a atualização da Microsoft (offline, apenas WSUS, ou bloqueados por Política de Grupo) Não Certificados TLS forjados aceitos; malware assinado com os dois intermediários de assinatura de código passa nas verificações de assinatura Você
Node.js e Electron Não: builds oficiais incorporam um snapshot de raiz fixo na liberação Chaves de API e chamadas de serviço para serviço vão para o atacante, mesmo em um dispositivo corrigido Você
certifi e pip instalados com pip Não: cada um carrega suas próprias raízes Mesma situação do Node.js Você
Binários Go no Linux Não: Go lê o pacote do sistema lá CLIs de nuvem, kubectl, e terraform enviam suas credenciais para uma API impostora Você
Containers, servidores e imagens de CI Não: cada imagem carrega seu próprio pacote Mesma situação que o pacote de sistema Linux, em cada imagem construída antes da correção Você

Pacotes que você instala com apt ou dnf não estão em risco, porque são assinados com GPG.

 

O que Factorial IT corrige para você

O agente Factorial IT traz seu próprio pacote CA: /opt/orbit/certs.pem no macOS e Linux, e C:\Program Files\Orbit\certs.pem no Windows. Seu componente osquery depende deste arquivo, não do repositório de confiança do OS, para se comunicar com seu servidor Factorial IT. O arquivo é escrito uma vez, quando o agente é instalado, e nunca é atualizado. É por isso que os bloqueios do fornecedor nunca o alcançam.

Factorial IT remove ambas as raízes deste arquivo em cada dispositivo registrado. Não toque nele você mesmo: os scripts de remediação abaixo notam que ele já está limpo e o deixam em paz.

No Linux, o atualizador do agente depende do pacote do sistema, então atualizar ca-certificates cobre isso também. No macOS e Windows, o atualizador verifica através do OS, então os bloqueios da Apple e da Microsoft já o protegem.

 

Como usar

Escolha uma das duas opções para os repositórios de confiança que Factorial IT não gerencia:

  1. Com um agente personalizado. Ele segue o caminho manual em seu nome e espera pela aprovação de um administrador antes de cada mudança. Veja Corrigir com um agente personalizado abaixo.
  2. Manual. Você executa os relatórios de detecção e scripts de remediação você mesmo. Veja Corrigir manualmente abaixo.

Qualquer que seja o caminho que você escolher, termine atualizando os tempos de execução que carregam suas próprias raízes, e depois verifique o resultado conforme descrito em Verificar.

 

Corrigir com um agente personalizado

O modelo de agente Fechar a exposição da CA eMudhra é executado a cada duas horas e avança em etapas. Ele nunca executa um script de remediação até que um administrador aprove seu ticket.

  1. Vá para Agentes de IA > Agentes, clique em Navegar por modelos, filtre por Equipamento, e abra Fechar a exposição da CA eMudhra.
  2. Nas instruções, encontre PILOT DEVICES e escreva um grupo de dispositivos ou nomes de dispositivos após Pilot:. Se você deixar em branco, o agente sugere até três Macs, três dispositivos Linux e três dispositivos Windows que ainda precisam da correção.
  3. Clique em Criar. O agente começa em seu próximo acionamento. Para ver uma execução primeiro, abra o agente e clique em Execução a seco: cada ação é registrada em vez de realizada.
  4. O agente abre um único ticket, Compromisso da CA eMudhra: o que resta corrigir, e envia um e-mail aos administradores uma vez. Responda a esse ticket para aprovar o piloto e, posteriormente, a implantação.
Etapa O que o agente faz O que precisa de você
Inventário Adiciona o kit de remediação da eMudhra da Factorial IT: três relatórios que cada computador executa a cada hora e, na biblioteca de scripts, um script de verificação somente leitura, scripts de remediação do macOS e Linux do Fleet, o script do Windows da Factorial IT, e o script do Windows do Fleet para administradores executarem manualmente. Abre seu ticket com os dispositivos agrupados por descoberta. Nada. Os primeiros resultados chegam dentro de uma hora.
Piloto Executa o script de remediação de cada plataforma nos dispositivos piloto e publica cada resultado no ticket. Uma aprovação no ticket
Implantação Executa-os em cada Mac e dispositivo Linux com uma descoberta do sistema e em cada dispositivo Windows que o bloqueio da Microsoft não alcançou, e depois verifica se seus próximos relatórios estão limpos. Uma aprovação no ticket
Pessoas Abre um ticket em nome de cada pessoa cujos tempos de execução apenas elas podem atualizar (Node.js, Python certifi, binários Go), e diz a elas o que atualizar. Uma aprovação antes que escreva para elas
Concluído Fecha seu ticket quando nada mais resta a corrigir e diz que o agente pode ser pausado. Pausar o agente

Além das etapas, o agente:

  • Informa os administradores imediatamente, no ticket e por e-mail, se um dispositivo possui um dos intermediários comprometidos.
  • Lista os Macs que não podem acessar os servidores de atualização da Apple e os dispositivos Windows onde uma Política de Grupo impede a atualização da Microsoft.
  • Nunca executa o script do Windows do Fleet, porque o Microsoft Defender o bloqueia. Se um antivírus rejeitar uma de suas execuções, ele informa os administradores. Eles podem então baixar o script da biblioteca de scripts e executá-lo onde seu antivírus permitir.
  • Deixa o pacote do agente Factorial IT para a Factorial IT. Ele nunca restaura um backup, e nunca bloqueia, apaga ou reinicia um dispositivo.

Uma vez que o trabalho esteja concluído, o kit permanece onde está.

 

Corrigir manualmente

Passo 1: execute os relatórios de detecção

O Fleet fornece um relatório de detecção por sistema operacional. No console do Fleet, crie um relatório e cole o SQL para cada sistema operacional abaixo. Você também pode gerenciar os três em GitOps com emudhra-ca-compromise.reports.yml, que os executa uma vez por dia.

Relatório do 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 é usado pela Apple-shipped curl, git, python3, ruby, perl, openssl. AApple NÃO atualizou isso.
SELECT 'root_in_pem_bundle', common_name, path, 'CLI_TOOLS_STILL_TRUST (curl/git/python3/openssl usam este pacote, sem verificações de revogação)'
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 investigar'
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',
              'c988f3d0cc1629ffc43165d6464c9b6ef73d6e48','8588708e875a1f8aa83524f3559080f7e17068c7',
  
```pt
             'd33195a244046a3263fb5e0e83c6803a5b2e7bc3','ee26d7ae3cc71718f6e07d7d0095076f0c158f63',
               '1f4a5d178f8b6a8ef0f6784155bd5fea91158b12','7fde64753a957b98f172fd2ab0d922551909c7ba')
UNION ALL
-- Apple enviou o bloqueio em 2026-10-19 através da base de dados "Válido" do trustd (não é uma mudança de keychain).
SELECT 'apple_block_applied', 'trustd valid.sqlite3', datetime(mtime, 'unixepoch') || 'Z',
       CASE WHEN mtime >= 1792368000 THEN 'OK_VALID_DB_UPDATED_SINCE_2026-10-19'
           ELSE 'STALE_NO_APPLE_BLOCK (offline ou MobileAsset bloqueado)' END
FROM file
WHERE path = '/private/var/protected/trustd/valid.sqlite3'
UNION ALL
SELECT 'homebrew_ca_certificates', name, version,
       CASE WHEN version >= '2026-09-25_1' THEN 'CORRIGIDO' ELSE 'ATUALIZAR brew upgrade ca-certificates' END
FROM homebrew_packages
WHERE name = 'ca-certificates'
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 'CORRIGIDO' ELSE 'ATUALIZAR certifi>=2026.10.19' END
FROM python_packages
WHERE name = 'certifi'
UNION ALL
SELECT 'toolchain', name, version, 'REVISÃO Go>=1.27.3/1.26.10, Node>=22.23.4/24.22.1/26.12.1 (binários compilados anteriormente continuam vulneráveis)'
FROM homebrew_packages
WHERE name IN ('go', 'node')
UNION ALL
-- fleetd envia seu próprio CA bundle. osqueryd outiliza (não o armazenamento de confiança do OS) para TLS para Fleet.
-- Ele é escrito na hora da instalação e nunca atualizado, então o bloqueio do fornecedor do OS não cobre isso.
SELECT 'fleetd_osquery_ca_bundle', common_name, path,
       'EXPOSTO osqueryd-para-Fleet TLS confia neste root; execute o script de remediação'
FROM certificates
WHERE path = '/opt/orbit/certs.pem'
  AND sha1 IN ('3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1', 'd1eb23a46d17d68fd92564c2f1f1601764d8e349')
UNION ALL
SELECT 'fleetd_agent', 'orbit ' || version, 'canal=' || orbit_channel || ' scripts_enabled=' || scripts_enabled,
       'INFO orbit é Go; no macOS ele verifica TLS através do OS, então o bloqueio da Apple seaplica'
FROM orbit_info
UNION ALL
-- Go ferramentas instaladas com go install (de cada usuário ~/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 'CORRIGIDO_GO'
           ELSE 'RECONSTRUIR com Go>=1.27.3/1.26.10' END
FROM go_binaries
UNION ALL
SELECT 'host', name, version || ' (' || build || ')', 'INFO'
FROM os_version;

Relatório do Linux

SELECT 'root_in_ca_bundle' AS finding, common_name AS item, path AS detail,
       CASE sha1
         WHEN '3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1' THEN 'NÃO_CORRIGIDO emSign ECC Root CA - G3 ainda confiável (ca-certificates corrigido remove isso)'
         WHEN 'd1eb23a46d17d68fd92564c2f1f1601764d8e349' THEN 'AAA Certificate Services confiável: Sectigo caminho de cross-sign aberto (pacotes derivados da Mozilla não distribuem mais; pacote antigo ou adicionado manualmente)'
         ELSE 'emSign Root TLS/CS CA - G3 presente (não no pacote Mozilla; adicionado manualmente)'
       END AS status
FROM certificates
WHERE sha1 IN ('3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1',
               'd1eb23a46d17d68fd92564c2f1f1601764d8e349',
               '39d3236e4a609ab6190cbfa1ad02b3cc61dfc2c3',
               '1f74b6010a219fd9ca058d07aa053d15efd9300d')
UNION ALL
SELECT 'compromised_intermediate_present', common_name, path || ' sha1=' || sha1, 'HIT_IOC investigue'
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
                             'a6255e80a94db7f3967c1bc791df92bcee4beb5f',  -- EM EV TLS CA - G3C
                          '79fae8eccfdb0d758da458d69fb6eddc7c49dee6',  -- EM OV CS CA - G3B
                           'ee6f73298d6fbfa7b31bc39534f61556447866b7') -- EM OV CS CA - G3C
   OR sha1 IN ('a99b289464f3b44343270a7a1e910f02370483fe','1396be1372bc93dfa2a433ca964dba91548a6e57',
 
```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
-- 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 = ```plaintext
'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;

Cada relatório retorna quatro colunas (finding, item, detail, e status) e uma linha por sinal. Se um finding não tiver linha, não foi encontrado.

Finding O que significa
compromised_intermediate_present One dos 16 certificados revogados está em um armazenamento local. Investigue quem o colocou lá.
root_in_ca_bundle / root_in_pem_bundle Um arquivo CA do sistema ainda confia em uma raiz comprometida. Ferramentas de linha de comando estão expostas.
fleetd_osquery_ca_bundle O pacote do agente de TI Factorial ainda confia em uma raiz comprometida. O IT da Factorial limpa isso.
apple_block_applied / disallowed_ctl_sync Se o bloqueio da Apple ou da Microsoft foi aplicado. STALE ou NOT_SYNCED significa que não foi.
disallowed_store_block Apenas Windows: quantos dos 16 certificados o script de remediação explicitamente desconfiou.
ctl_autoupdate_policy A Política de Grupo bloqueia as atualizações automáticas de desconfiança da Microsoft.
ca_certificates_pkg, homebrew_ca_certificates, python_certifi, toolchain Versões de pacotes e runtime, para comparar com as versões fixas em Atualize os runtimes que carregam suas próprias raízes.
go_binary Uma ferramenta Go em um go/bin de usuário construída com Go anterior a 1.27.3 ou 1.26.10.
root_in_keychain / root_in_cert_store, fleetd_agent, host Apenas contexto. A Apple e a Microsoft enviam ambas as raízes em cada dispositivo e bloqueiam os intermediários em vez disso, então essas linhas permanecem após a correção.

Se uma linha fleetd_osquery_ca_bundle ainda estiver lá em um dispositivo que esteve online por um dia inteiro, precisamos verificá-la. Envie um e-mail para support@factorial.it com o nome do dispositivo.

 

Passo 2: execute os scripts de remediação

O Fleet mantém um script de remediação para cada SO:

Script O que muda
remediate-emudhra-ca-compromise-macos.sh Remove ambas as raízes de /etc/ssl/cert.pem, e atualiza os fórmulas ca-certificates e certifi do Homebrew como o proprietário do Homebrew.
remediate-emudhra-ca-compromise-linux.sh Atualiza ca-certificates (apt, dnf, yum, zypper, apk). Onde a distribuição ainda não tem uma correção, desconfiamos das raízes nativamente: uma entrada ! em /etc/ca-certificates.conf no Debian, Ubuntu e Alpine, um arquivo de lista de bloqueio p11-kit no Fedora, RHEL, Arch e openSUSE.
remediate-emudhra-ca-compromise-windows.ps1 Adiciona os 16 intermediários ao armazenamento de Certificados Não Confiáveis da máquina, para dispositivos que a atualização da Microsoft não pode alcançar. O Microsoft Defender bloqueia isso: use o script de TI da Factorial para Windows abaixo em vez disso.

Os scripts deixam o pacote do agente de TI Factorial intocado uma vez que o IT da Factorial o limpou. Você pode executá-los mais de uma vez sem problemas. Antes de editar um arquivo, eles salvam um backup *.pre-emudhra dele. Códigos de saída: 0 significa que o dispositivo está protegido, 2 significa que algo precisa de atenção, e 1 significa um erro. Quando uma execução mostra como Falhou, sua saída explica o porquê.

  1. Baixe cada script do GitHub com Baixar arquivo bruto. Em seguida, no console da Factorial IT, vá para Gerenciamento de Dispositivos > Scripts > Biblioteca e arraste-o para Adicionar um script. O nome e a plataforma são preenchidos para você.
  2. Clique em Executar script > Alvo por grupo de dispositivos, escolha um pequeno grupo como os dispositivos da equipe de TI, e leia a saída em Histórico de Execução.
  3. Execute cada script novamente, desta vez com Alvo todos os dispositivos.
  4. Verifique um dispositivo contra os hosts de teste públicos e execute os relatórios novamente, conforme descrito em Verificar.

Se o Microsoft Defender estiver ativado. O Defender interrompe o script do Windows do Fleet antes que ele comece, seja você o inicie com Executar script ou manualmente. O script contém os certificados comprometidos, então a execução falha com ScriptContainedMaliciousContent. Em tais dispositivos, você tem duas opções: executar o script de TI da Factorial para Windows abaixo, ou deixar a atualização automática de confiança da Microsoft corrigir o dispositivo. Para a segunda, coloque o dispositivo online e suspenda a Política de Grupo mencionada na linha ctl_autoupdate_policy do relatório do Windows.

 

Script de TI da Factorial para Windows

distrust-emudhra-intermediates-windows.ps1 busca cada um dos 16 intermediários de crt.sh pelo seu SHA-256, verifica os bytes e os adiciona aos Certificados Não Confiáveis. Como não contém certificado, o Microsoft Defender permite que ele seja executado. O dispositivo deve ser capaz de acessar crt.sh. Códigos de saída: 0 quando todos os 16 são desconfiados, 2 quando alguns não puderam ser baixados (as linhas WARN dão o motivo), e 1 em caso de erro. Salve-o sob esse nome de arquivo e adicione-o à biblioteca de scripts junto com os outros.

# distrust-emudhra-intermediates-windows.ps1
# Adiciona os 16 intermediários eMudhra comprometidos (outubro 2026) ao armazenamento de Certificados Não Confiáveis desta máquina,
# o bloqueio que a Microsoft distribui através de seu atualização automática de confiança, para um dispositivo que não o recebeu.
# Não embeda nenhum certificado: cada um é baixado do crt.sh por SHA-256 e adicionado só quando seus bytes correspondem.
# Sair: 0 = todos os 16 são desconfiáveis, 2 = alguns não puderam ser baixados ou adicionados (leia as linhas WARN), 1 = erro.

$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 respondeu outros bytes para $Fingerprint (tentativa $attempt)")
        } catch {
           [Console]::WriteLine("WARN      crt.sh: $($_.Exception.Message) para $Fingerprint (tentativa $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 "ADICIONADO     $fingerprint $($cert.Subject)"
    }

    $missing = @($Sha256 | Where-Object { -not $present.ContainsKey($_) }).Count
    Write-Output "VERIFICAR    $($Sha256.Count - $missing) de $($Sha256.Count) intermediários comprometidos em Certificados Não Confiáveis ($added adicionados)"
    if ($missing -gt 0) { exit 2 }
    exit 0
} finally {
    $store.Close()
}

 

Bom saber após executar os scripts
  • Reinicie serviços de longa duração em servidores Linux. A maioria das ferramentas só lê o pacote CA quando inicia.
  • Execute o relatório do macOS novamente após cada atualização do macOS. Uma atualização pode restaurar /etc/ssl/cert.pem ao estado anterior.
  • Fique atento ao Homebrew sendo ignorado. Se brew não puder ser executado como o proprietário do Homebrew, por exemplo, porque a licença do Xcode não foi aceita, o script do macOS do Fleet ignora o Homebrew silenciosamente e ainda sai com 0. O relatório do macOS continua mostrando sua linha homebrew_ca_certificates. Execute sudo xcodebuild -license accept nesse Mac e, em seguida, execute o script novamente. A cópia que o agente personalizado coloca na biblioteca de Scripts imprime um aviso e sai com 2 em vez disso.

 

Reverter uma alteração
  • No macOS e Linux, copie cada backup *.pre-emudhra sobre o arquivo de onde foi retirado. No Linux, remova também os arquivos emudhra-*.pem adicionados à pasta de bloqueio do p11-kit, restaure /etc/ca-certificates.conf.pre-emudhra se existir e execute update-ca-certificates ou update-ca-trust.
  • No Windows, abra certlm.msc e remova as 16 entradas adicionadas de Certificados Não Confiáveis.

Nunca restaure o pacote do agente de TI do Factorial. Fazer isso faria com que ele confiasse novamente nas raízes comprometidas.

 

Automatize a correção com políticas do Fleet

No console do Fleet, crie uma política por sistema operacional e defina sua automação de Executar script para o script de remediação correspondente. Dispositivos que falham na política se consertam automaticamente. O Fleet mantém as três políticas no GitOps em emudhra-ca-compromise.policies.yml. Se um dispositivo continuar falhando, o script se recusou a alterar o pacote do agente, e a saída do script fornece a razão.

Política do macOS. Ela passa quando /etc/ssl/cert.pem e o pacote do agente não contêm mais nenhuma raiz:

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'));

Política do Linux. Ela passa quando nenhum armazenamento de certificados e nem o pacote do agente contêm nenhuma raiz:

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'));

Política do Windows. Ela é aprovada quando o pacote do agente não contém nenhuma raiz. O osquery do Windows não consegue ler arquivos PEM, então a consulta procura uma linha que aparece apenas em cada raiz:

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'));

 

Atualizar os runtimes que carregam suas próprias raízes

Essas ferramentas vêm com sua própria cópia das raízes, então apenas um novo lançamento as corrige. Atualize-as em estações de trabalho, servidores e imagens de contêiner. Depois, reconstrua suas imagens e quaisquer binários que você compilar por conta própria.

Software Corrigido em
Node.js 22.23.4, 24.22.1, 26.12.1
Electron (e os aplicativos de desktop construídos sobre ele) 42.11.16, 43.8.1, 44.9.1
Go (reconstrua cada binário construído com uma ferramenta mais antiga) 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

No Linux, a correção vem no pacote ca-certificates:

Distribuição Versão corrigida do ca-certificates
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 instalado a partir da distribuição, como python3-certifi no Debian e Ubuntu, utiliza o pacote do sistema. Para a lista atualizada de softwares corrigidos, veja o site de divulgação.

 

Verificar

Dois hosts de teste públicos apresentam certificados de um intermediário comprometido: um encadeia para a raiz emSign, o outro para a cross-sign da Sectigo. Um cliente protegido rejeita ambos.

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 você receber um erro de certificado, o cliente está protegido. Se você receber 200, ele ainda confia na cadeia forjada. Depois, leia os relatórios novamente, ou o ticket do agente: as descobertas do pacote do sistema e a descoberta do pacote do agente de TI Factorial devem ter sido removidas.

 

Referência: certificados comprometidos

As duas raízes a serem removidas dos pacotes de CA:

Raiz SHA-1 Incluído em
emSign ECC Root CA - G3 3043fa4ff257dca0c380ee2e58ea78b23fe6bbc1 Apple, Chrome, Microsoft, Mozilla
AAA Certificate Services (Sectigo) d1eb23a46d17d68fd92564c2f1f1601764d8e349 Apple, Microsoft (removido do Chrome e Mozilla)

Duas raízes adicionais emitem os intermediários diretamente. Apenas a loja da Microsoft as contém, e a Microsoft bloqueia os próprios intermediários:

Raiz SHA-1
emSign Root TLS CA - G3 39d3236e4a609ab6190cbfa1ad02b3cc61dfc2c3
emSign Root CS CA - G3 1f74b6010a219fd9ca058d07aa053d15efd9300d

Os 16 intermediários comprometidos:

Intermediário Uso Emitido por 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 Assinatura de código emSign Root CS CA - G3 d33195a244046a3263fb5e0e83c6803a5b2e7bc3
EM OV CS CA - G3B Assinatura de código AAA Certificate Services ee26d7ae3cc71718f6e07d7d0095076f0c158f63
EM OV CS CA - G3C Assinatura de código emSign Root CS CA - G3 1f4a5d178f8b6a8ef0f6784155bd5fea91158b12
EM OV CS CA - G3C Assinatura de código AAA Certificate Services 7fde64753a957b98f172fd2ab0d922551909c7ba

Impressões digitais SHA-256, números de série e identificadores de chave. Os dois certificados de um intermediário utilizam a mesma chave, então eles também compartilham seu identificador de chave do sujeito (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

 

Fontes


 

Dicas e Melhores Práticas

  • Deixe o pacote do agente para Factorial TI. Não edite ou restaure. Os scripts já o ignoram uma vez que está limpo.
  • Comece com um grupo piloto. Execute cada script em um punhado de dispositivos, leia a saída e, em seguida, implemente em todos os dispositivos.
  • Mantenha o sistema operacional atualizado. Navegadores e aplicativos que verificam através do sistema operacional são seguros apenas uma vez que a atualização da Apple ou Microsoft está instalada.
  • Não se esqueça de runtimes e imagens. Node.js, Electron, binários do Go, certifi e imagens de contêiner permanecem expostos mesmo em um dispositivo corrigido. Atualize-os e reconstrua.
  • Verifique novamente após as atualizações do macOS. Uma atualização pode restaurar /etc/ssl/cert.pem, então execute o relatório do macOS após cada uma.
  • Reinicie os serviços em servidores Linux. A maioria das ferramentas lê o pacote CA apenas na inicialização.
  • Trate um intermediário encontrado em um dispositivo como um incidente. Uma linha compromised_intermediate_present significa que alguém ou algo colocou esse certificado lá.

 

Solução de Problemas e FAQ

Solução de Problemas

  • O script do Windows do Fleet falha com ScriptContainedMaliciousContent. O Microsoft Defender bloqueou, porque o script contém os certificados comprometidos. Execute o script do Factorial TI para Windows em vez disso, ou coloque o dispositivo online e levante a Política de Grupo mencionada na linha ctl_autoupdate_policy.
  • O script do Factorial TI para Windows sai com 2. Alguns certificados não puderam ser baixados. Leia as linhas WARN e verifique se o dispositivo pode acessar crt.sh.
  • O script do macOS sai com 0, mas homebrew_ca_certificates ainda está lá. O Homebrew foi ignorado, geralmente porque a licença do Xcode não foi aceita. Execute sudo xcodebuild -license accept no Mac e execute o script novamente.
  • Uma linha fleetd_osquery_ca_bundle permanece após um dia inteiro online. Envie um e-mail para support@factorial.it com o nome do dispositivo.
  • Uma política do Fleet continua falhando em um dispositivo. O script se recusou a mudar o pacote do agente. Sua saída explica o porquê.
  • O relatório do Windows mostra NOT_SYNCED ou BLOCK_WILL_NOT_ARRIVE. O bloqueio da Microsoft não chegou ao dispositivo: ele está offline, usa apenas WSUS, ou uma Política de Grupo impede a atualização automática. Execute o script de remediação ou corrija a causa.
  • O relatório do macOS mostra STALE_NO_APPLE_BLOCK. O Mac não recebeu o bloqueio da Apple. Provavelmente está offline ou não consegue acessar os servidores de atualização da Apple.
  • Um host de teste retorna 200. Esse cliente ainda confia na cadeia forjada. Verifique qual repositório de confiança ele usa e corrija com os passos acima.

 

FAQ

  1. Preciso fazer algo pelo agente do Factorial TI?
    Não. O Factorial TI remove ambas as raízes do pacote do agente em todos os dispositivos registrados, e novos pacotes de registro vêm sem elas.
     
  2. Meus dispositivos estão atualizados. Estou seguro?
    Navegadores e aplicativos que verificam através do sistema operacional estão. Ferramentas de linha de comando no macOS, o pacote do sistema Linux, Node.js, Electron, certifi, binários do Go no Linux e imagens de contêiner não estão, até que você os corrija.
     
  3. Meus usuários poderiam ter sido atacados através de seus navegadores?
    Não através de navegadores que impõem a Transparência de Certificados: nenhum certificado TLS desses intermediários aparece nos logs de CT. Um atacante também precisaria estar no caminho da rede.
     
  4. Os pacotes instalados com apt ou dnf estão em risco?
    Não. Eles são assinados por GPG.
     
  5. É seguro executar os scripts de remediação duas vezes?
    Sim. Eles mantêm um backup *.pre-emudhra de cada arquivo que alteram, então você também pode reverter.
     
  6. Por que as linhas root_in_keychain e root_in_cert_store permanecem após a correção?
    Elas são apenas contexto. A Apple e a Microsoft mantêm ambas as raízes em todos os dispositivos e bloqueiam os intermediários em vez disso.
     
  7. O agente personalizado reiniciará ou limpará dispositivos?
    Não. Ele nunca restaura um backup, bloqueia, limpa ou reinicia um dispositivo, e aguarda a aprovação de um administrador antes de cada etapa.
     
  8. O que acontece com o kit de remediação quando o trabalho é concluído?
    Ele permanece no lugar. O agente fecha seu ticket e informa que pode ser pausado.

Este artigo foi útil?

Give feedback about this article

Não consegue encontrar o que procura?

A nossa equipe de atendimento ao cliente está aqui para ajudar.

Contato

Knowledge Base Software powered by Helpjuice

class="shortcode_"