### Resumo O caminho de criação de host da interface da web `nebula- mgmt` ignora tanto a configuração de segurança `enrollment_token_ttl` em todo servidor como a reequipação por rede `network_config.enrollment_token_ttl`. Os caminhos de criação e regeneração de tokens de host da API usam o resolvedor TTL configurado, mas os códigos rígidos `POST /ui/hosts `agow.Add( 24 * time.Hour)` para os tokens de inscrição de agentes recém- inventados. Em implantações que intencionalmente reduzem a vida útil dos símbolos de registro, qualquer operador autentificado que possa criar um host através da Internet UI pode ainda confeccionar um símbolo de registro de portador válido para aproximadamente 24 horas. ### Detalhes As fichas de inscrição são credenciais de portador para o público ` POST / api/v 1 Endpoint do /enroll`: a posse de um token válido permite inscrever o host pendente e receber um certificado/ configuração da Nebulosa assinado para aquele host. A configuração do servidor documenta um botão de segurança para a sua vida útil padrão e por rede sobrepõe:.

- ` internal/ config/ server.go: 82 ` define `InscriçãoTokenTTL` como a vida padrão para os tokens de inscrição recém-confeccionados. - `internal/config/ server.go: 83 ` documentos por rede sobrepõe em ` network_config` sob `enrollment_token_ttl`. O servidor API implementa e usa consistentemente este resolvedor. - ` internal/ api/ server.go: 77 ` define `tokenTTLFor`, com precedência de `enrollment_token_ttl` por rede, em seguida, o servidor padrão, então 24 h repliback. - ` internal/ api/ server.go: 82 ` lê ` network_config.enrollment_token_ttl`. - ` internal/ api/ server.go: 89 ` cai de volta para o servidor configurado padrão. - ` internal/ api/hosts.go: 190 ` através de ` internal/ api/hosts.go: 196 ` use `agow.Add(s.tokenTTLFor(r.Context(), host.NetworkID) ' para criação de host API.

O caminho de irmão da Internet UI não chama o resolvedor e, em vez disso, sempre define um 24 - expiração da hora: - ` internal/ web/ handlers.go: 874 ` ments o símbolo bruto para ` POST /ui/ hosts`. - `internal/ web/ handlers.go: 879 ` define ` ExpiraAt: now.Add( 24 * tempo.Hora)`.

Isto cria comportamento inconsistente entre API e criação de host da Web UI e evita uma política de vida útil de token configurada pelo operador. O problema é alcançável por um operador Web UI autenticado que pode criar hospedeiros. Os administradores podem criar hosts em qualquer rede; os operadores não- administradores podem criar hosts em redes cuja CA eles possuem. Evidência de versão afetada: o recurso TTL configurable para inscrição foi introduzido pelo commit ` 6 c 344 a 6 ` (`feat( api): configurable inscrições-token TTL + endpoint regenerar (# 75 ) (# 79 )`), e ` git tag -- contém 6 c 344 a 6 -- sort=version: refname` retorna `v 0.3.0 ` através de ` v 0.3.8 `. Verificações de padrões em todas as etiquetas de lançamento mostraram o resolvedor de configuração/API do TTL e a interface de interface da Web 24 -hardcode está presente em cada ` v 0.3.x` liberação de `v 0.3.0 ` to ` v 0.3.8 `, e não são significativamente aplicáveis a ` v 0.1.x`/`v 0.2.0 ` porque o botão de política TTL não estava presente lá. A checkout atual no commit `d 92 dd 9 a 60 de 291 e 2 bc 1 Caf 73 b 4 e 9 a 99567 b 31 ec 0 ` (`git descrever`: `v 0.3.8 - 1 - gd 92 dd 9 a`) permanece afetado.

### PoC Safe local PoC executar a partir de uma checkout limpa no commit `d 92 dd 9 a 60 de 291 e 2 bc 1 Caf 73 b 4 e 9 a 99567 b 31 ec 0 ' on 2026 - 06 - 12. O PoC é um teste de Go temporário que usa apenas SQLite e `httptest` em memória; ele não inicia um servidor real e não contata serviços externos. 1. Crie um arquivo de teste temporário `internal/web/security_audit_poc_test.go` no pacote `web`. 2. No teste, crie uma interface de usuário da Web na memória com `newTestWeb(t)`, crie uma rede `audit- poc-net` com CIDR ` 10.77.0.0 / 24 `, e definir ` network_config.enrollment_token_ttl` para ` 30 m`. 3. Faça login como administrador de teste semeado através do ajudante normal da Web UI e obtenha um token CSRF a partir de `GET /ui/hosts/now`. 4. Enviar ` POST /ui/hosts` com ` network_id=audit-poc-net`, `name=audit-poc-host`, `nebula_ips= 10.77.0.10 `, `role=host` e `kind=agente`. 5. Analise o token de inscrição de uma só vez na página de detalhe do hospedeiro devolvido e leia a linha de tokens com `GetEnrollmentToken`. 6. Compare a caducidade observada com a configurada 30 - sobreposição de rede de minutos.

````bash go test./interno/web -execução 'TestSecurityAuditPOC' -count= 1 - v ```. Saída vulnerável observada deste ambiente: ``` Texto ===RUN TestSecurityAuditPOC_UIHostCrearIgnoraRedeInscriçãoTokenTTL POC_UI_TTL_BYPASS observated_token_ttl= 24 h 0 m 0 s configured_ network_ttl= 30 m expira_at= 2026 - 06 - 13 T 14: 51: 45 Z --- PASS: TestSecurityAuditPOC_UIHostCreateIgnora a Rede de InscriçãoTokenTTL ( 0.05 s) ```.

O controle significativo é o irmão da API: ` internal/ api/hosts.go: 190 ` através de ` internal/ api/hosts.go: 196 ` uses ` s.tokenTTLFor(...)`, e testes existentes em `internal/api/hosts_token_ttl_test.go` verifiquem os tokens de registro criados/regenerados por API, honram os TTLs por defeito do servidor e por rede. A revisão de variação também encontrou o token regenerado da API, o reincorpore da API e a minagem de token assinada do rekey-poll usa o resolver em vez de um hardcoded 24 valor h. Após gravar a saída, o arquivo de teste temporário foi removido e `git status -- short ' retornado limpo. O PoC foi re- executado após a redação deste relatório e produziu a saída acima. ### Impacto Um operador de internet UI autenticado pode contornar uma política de vida de inscrição configurada e obter um token válido para aproximadamente 24 horas mesmo quando a implantação ou rede está configurada para uma vida útil muito mais curta, como 30 minutos. Como os tokens de inscrição são credenciais de titular para o objetivo de inscrição público, a validade mais longa do que a pretendida aumenta a janela na qual um token copiado, registrado, compartilhado ou exposto pode ser usado para inscrever o hospedeiro pendente e obter seu certificado/ configuração da Nebulosa. Isto enfraquece a confidencialidade e a integridade para as implementações dependendo de vidas de token curtas para reduzir a exposição de tokens de registro.

Remediação sugerida: refatorizar o caminho de criação de host da Web UI para usar a mesma resolução TTL que o caminho da API, ou mover o resolvedor para um pacote/ serviço compartilhado usado tanto pela API como pela Web UI. Adicione um teste de regressão em `internal/web` que define `network_config.enrollment_token_ttl = " 30 m"`, cria um host de agente através de ` POST /ui/hosts`, e afirma que o token de inscrição persistida expira dentro do configurado 30 - janela de minutos em vez de 24 horas. Registro de aconselhamento: GHSA- g 4 x 6 - jcvr- 9 m 3 g. Identificadores relacionados: CVE- 2026 - 55513.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 14 T 20: 26: 21.000 Z e lista a sua última modificação como 2026 - 07 - 14 T 20: 26: 21.000 Z. Gravidade: MODERAR. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N.

Software afetado e informações de versão: Vá com o pacote github.com/forgekeep/nebula-mesh — ECOSISTEM: introduzido 0.3.0, corrigido 0.5.0. Classificação e evidência: identificadores de fraqueza CWE- 613. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.