nebulosa- mesh revoga um hospedeiro adicionando a sua impressão digital de certificado a uma lista de blocos por CA e enviando essa lista para todos os outros agentes em cada pesquisa. A Nebulosa do Slack só faz com que o certificado seja revogado através da lista `pki.blocklist` em `config.yml` (sem CRL/OCSP). O próprio código do projeto estabelece isto: `intern/ pki/durations.go: 15 ` — "A revocação via a lista de blocos continua a ser o controle de segurança imediato". O lado servidor é totalmente implementado (computas por lista de blocos de CA via `GetBlocklistForCA`, retorna-o na resposta de atualizações do agente, define `has_updates=true` quando não está vazio). O lado do agente nunca foi implementado:.
1. O agente decodifica o campo JSON `blocklist` para `AtualizaçõesResponse.Blocklist` (`internal/ agent/poller.go: 33 `) e então DESCARRÁ- lo — `poll()` aplica `CertificadoPEM`, `CACertPEM`, `ConfigYAML', mas nunca refere `updates.Blocklist` (`interno/ agent/ poller.go: 300 - 339 `). 2. O gerador de configuração tem um campo NÃO para emitir `pki.blocklist` — `pkiSection` é apenas `ca`/`cert`/`key` (`internal/ configgen/marshal.go: 42 - 46 `) e `GeneratorInput` não tem nenhuma lista de blocos (`internal/configgen/generator.go: 23 - 52 `). Assim mesmo o `config.yml` enviado pelo servidor não pode transportá-lo através do `ConfigYAML`. Resultado: um certificado de hospedeiro bloqueado/descartado/compromitido nunca é rejeitado pelos seus pares. Seu aperto de mão continua sendo bem sucedido durante toda a vida restante do cert — até 30 dias para os hosts de agentes (`DefaultAgentCertDuration`) e 365 dias para hospedeiros móveis (`DefaultMobileCertDuration`). Bloquear um hospedeiro na UI/ API não tem efeito no plano de dados.
### Componentes afetados. - O agente deixa cair a lista de blocos: ` interna/ agente/ poller.go: 33 ` (decodificar o alvo), ` interno/ agente/ poller.go: 300 - 339 ` (poll() aplica cert/CA/config, nunca a lista de blocos). - O gerador não pode emitê- lo: `internal/configgen/marshal.go: 42 - 46 ` (`pkiSection{CA,Cert,Key}`), `interna/ configgen/ generator.go: 23 - 52 ` (`GeneratorInput` não tem lista de blocos), `interna/ api/ enroll.go: 255 - 330 ` (` rendeHostConfig`, fonte do ConfigYAML enviado). - O servidor produz/envia corretamente (prova intenção): `interna/ store/sqlite.go: 2034 ` (`GetBlocklistForCA`), `interna/ api/ updates.go: 182 - 191 ` (`resp.Blocklist`), ` internal/ api/ updates.go: 277 ` (` has_updates` configurado na mudança de blocklist). - Ajudante morto: `internal/ pki/blocklist.go` (`Blocklist` tipo) nunca é usado em código não- teste — nenhuma aplicação do lado do servidor também. ### Reachability (hop by hop). 1. O operador clica em Bloquear no hospedeiro B (ou B está comprometido/descartado). A impressão digital do B entra na tabela por `blocklist` de CA. 2. Todos os outros hospedeiros A sob as mesmas pesquisas da CA ` GET / api/ v 1 /agent/ updates`; servidor retorna `blocklist: [ ,...]` e ` has_ updates= true`. 3. O agente de A decodifica a `Blocklist` em seguida, a descarta; `poll()` não tem um ramo de blocklist. 4. Mesmo em uma re- renderização de configuração, `configgen.Generate` emite `pki: {ca,cert,key}` sem chave `blocklist` (provada pelo PoC). 5. O deemon da Nebulosa de A tem uma lista de blocos vazia e aceita apertos de mão do certificado B ainda válido. B mantém o acesso completo à malha.
A revocação é o único mecanismo em banda que isola um host comprometido/ fora do bordo de uma malha da Nebulosa. Como a lista de blocos nunca atinge o configuração.yml de qualquer peer, um host bloqueado mantém a capacidade de sobreposição completa para cada peer sob seu CA (e serviços internos na malha) até 30 d (agente) / 365 d (móvel). Um atacante que exfiltra `host.key`+`host.crt` pode executar stock slackhq/ nebulosa diretamente, ignorando o agente 403 / 410 respostas de pesquisa, e mantenha- se conectado após o operador revogar o hospedeiro. O estado visível do operador (UI mostra bloqueado, registros de log de auditoria) é enganoso. ### Prova de Conceito (benigno). `internal/configgen/blocklist_poc_test.go` renderiza uma configuração de hospedagem totalmente povoada e afirma que a saída contém a seção `pki` mas NÃO a chave `blocklist`:.
``` $ vai testar./interna/ configuração/ -executar TestPoC_NMESH 001 -v === RUN TestPoC_NMESH 001 _GeneradoConfigOmitsBlocklist CONFIRMED: configuração gerada tem uma seção pki, mas nenhuma chave blocklist pki: ca: /etc/nebula/ca.crt certo: /etc/nebula/host.crt chave: /etc/nebula/host.key... --- PASS ``` A metade do agente é verificada por inspeção: `poll()` tem filiais para CertificatePEM/CACertPEM/ConfigYAML/RekeyRequired, mas nenhum para Blocklist.
NÃO uma duplicada do GHSA- 339 v / CVE- 2026 - 53602 (durabilidade da revocação = um hospedeiro bloqueado recebendo um novo certificado re- emitido; sua correção ` CheckEmissionPermited ' está presente e ortogonal). Este erro é que o certificado EXISTENTE nunca é rejeitado em pares — a camada de distribuição/ aplicação. Verificado contra todos 17 avisos conhecidos; nenhum aplicativo de cover blocklist na geração do agente ou `pki. blocklist`. 1. Adicionar `Blocklist []safeString` para `pkiSection` (yaml `blocklist,omitwake`) e `GeneratorInput`; considere também `pki.disconnect_ invalid: true`. 2. Faça com que o agente aplique `updates.Blocklist` por re- renderização/reescrita `config.yml` + SIGHUP (melhor caminho que `ConfigYAML`). Mais simples: dobre a lista de blocos para o servidor entregue `ConfigYAML` para que ele flua pelo caminho de gravação existente. 3. Adicione um teste de regressão que afirme uma lista de blocos de servidores não vazia gera uma entrada `pki.blocklist` no configurador escrito do agente.yml.
Registro de aconselhamento: GHSA-cm 26 - 5974 - 52 h 8. Identificadores relacionados: CVE- 2026 - 61699. Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 14 T 20: 28: 18.000 Z e lista a sua última modificação como 2026 - 07 - 14 T 20: 28: 18.000 Z.
Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N.
Software afetado e informações de versão: Vá com o pacote github.com/forgekeep/nebula-mesh — ECOSISTEM: introduzido 0, corrigido 0.7.1.
Classificação e evidência: identificadores de fraqueza CWE- 299, CWE- 672. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.