You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[P1][security][integrity] raiz de confianca da ancora de integridade tem de ser a assinatura do release, nao estado local #2168
Classe: a detecção de adulteração (#856, #1262) hoje decide "validado" a partir de estado que existe só na própria máquina (âncora local, metadados do pacote instalado). Um mecanismo de integridade cuja raiz de confiança é local não prova nada contra quem controla a máquina, e o caminho de recuperação manual criado no #1262 confia nesse mesmo estado. Esta issue troca a raiz de confiança. Detalhes de abuso ficam fora desta issue (repo público).
Requisito: upgrade legítimo NUNCA aparece como adulteração, e adulteração real NUNCA vira "validado" por comando do usuário.
Critérios de aceite
ADR em docs/adr/ definindo o desenho: o release publica um manifesto de integridade (hashes dos módulos críticos) assinado por chave do projeto; a chave pública vai embutida no pacote; a verificação roda offline na inicialização. Usar chave de assinatura que o projeto já tem; nenhuma chave nova sem ordem do operador. O ADR diz quem assina e em que passo do release (chaves privadas não ficam no CI sem decisão do operador).
Estado validated / expected só quando os módulos instalados batem com um manifesto cuja assinatura verifica. Sem assinatura válida, ou hash divergente: tampered, mesmo após qualquer comando de recuperação.
O comando manual --reconcile-integrity-anchor deixa de poder produzir validated sozinho: removido, ou condicionado à mesma verificação de assinatura. A âncora local passa a ser só registro forense (eventos append-only), não árbitro.
Upgrade de qualquer versão anterior para a nova: sem INTEGRITY TAMPER DETECTED e sem -alpha, sem nenhum comando do usuário.
Testes adversariais no repo: módulo crítico alterado após a instalação → tampered, inclusive depois do comando de recuperação; manifesto adulterado ou com assinatura inválida/ausente → tampered; downgrade → tampered; upgrade legítimo → validated. Nenhuma asserção existente enfraquecida.
Documentar o limite honesto: o que o mecanismo prova e o que não prova (quem controla a máquina inteira, incluindo a chave pública embutida, ainda pode contornar; a raiz externa é a chave publicada fora do pacote). Sem afirmar mais do que o código prova.
Activity
Gate-Change-Approved-By: @FabioLeitao (#2170) | fix(integrity): manif…
Gate-Change-Approved-By: @FabioLeitao (#2170) | fix(integrity): manif…
test(integrity): reconcile CLI message is integrity event recorded af…
Gate-Change-Approved-By: @FabioLeitao (#2170) | fix(integrity): manif…
Merge pull request #2170 from DataBoar/fix/2168-signed-integrity-mani…