Skip to content

fix(integrity): upgrade legitimo nao acusa tamper (re-baseline automatico com RECORD) - #2165

Merged
FabioLeitao merged 1 commit into
mainfrom
fix/1262-anchor-legit-upgrade
Nov 2, 2026
Merged

FabioLeitao merged 1 commit into
mainfrom
fix/1262-anchor-legit-upgrade

Conversation

@FabioLeitao

Copy link
Copy Markdown
Collaborator

Corrige #1262: um upgrade legitimo do pacote deixava de ser tratado como adulteracao. Hoje, ao atualizar (pip, pipx, pacote nativo), os modulos criticos mudam, a ancora local da versao anterior diverge e o runtime exibe INTEGRITY TAMPER DETECTED e se marca -alpha ate o operador reconciliar na mao. Aconteceu no 1.8.0.

Mudanca (core/integrity_anchor.py): re-baseline AUTOMATICO somente quando as duas condicoes valem juntas:

  1. a versao instalada, lida dos metadados da distribuicao (importlib.metadata), e MAIS NOVA que o release_label da ancora (PEP 440 via packaging.version, nunca por string);
  2. todos os arquivos de CRITICAL_MODULES batem com os hashes do RECORD da distribuicao instalada.
    Quando valem, a ancora e regravada (novo release_label e hashes), registra-se o evento append-only re-baseline-auto-upgrade (versao antiga e nova) e NAO se marca -alpha. Qualquer erro, versao invalida, RECORD ausente ou instalacao sem metadados cai em tampered (falha fechada).

Continua tampered: mesma versao com hash diferente (edicao casual); versao nova com algum modulo fora do RECORD; versao igual ou menor (downgrade); codigo rodando sem metadados de distribuicao. O --reconcile-integrity-anchor --confirm-upgrade-to continua como recuperacao.

Prova executada pelo auditor (nao so os testes): copias do banco de ancora REAL do T14 (release_label 1.7.4.post12) com o pacote 1.8.0.

  • Codigo publicado 1.8.0: tampered / adulterated, 35 modulos divergentes (o bug).
  • Esta branch (wheel construido da branch): validated / expected, 0 divergentes, evento official upgrade 1.7.4.post12 -> 1.8.0: RECORD matched (50 files).
  • Esta branch, modulo critico editado fora do RECORD: tampered. Mesma versao com edicao: tampered. Downgrade: tampered.

Testes: tests/test_integrity_anchor_auto_upgrade.py (5 novos: upgrade legitimo com evento, edicao casual, versao nova com RECORD divergente, downgrade, sem metadados) e tests/test_integrity_anchor.py (so o comentario do cabecalho mudou; nenhuma asserção enfraquecida). Docs: docs/ops/INTEGRITY_CHECK_ALPHA_LOGIC.md e .pt_BR.md dizem o que o mecanismo prova e o que NAO prova.

Limite honesto, ja valido antes e agora tambem: a deteccao e tamper-EVIDENT, nao tamper-PROOF. Quem consegue editar ao mesmo tempo o codigo, o RECORD, a versao da distribuicao e a ancora local ainda consegue re-baselinear. Endurecer isso exige assinatura do digest pelo projeto (chave de CI), fora do escopo desta PR.

Modulo critico de seguranca: pede revisao atenta do operador antes do merge. Nenhum arquivo do diff esta em GATE_FILES (nao precisa de selo). Verificacao local: check-all no host termina com 5 falhas de ambiente (4 de licenciamento, porque o host tem licenca real instalada, e test_main_web_transport_cli, porta 8766 ocupada). O CI, em ambiente limpo, e o gate.

Refs #1262

@FabioLeitao
FabioLeitao merged commit c802fe6 into main Nov 2, 2026
31 checks passed
@FabioLeitao
FabioLeitao deleted the fix/1262-anchor-legit-upgrade branch November 2, 2026 02:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant