R0.4 fila de segurança: varrer os 39 sítios de autorização e fechar os sem gate #41

Closed
opened 2026-07-26 02:34:02 -03:00 by navigator · 1 comment
Owner

O inventário do ultraplan achou a superfície /moderation 100% aberta (CORRIGIDO no hotfix 2197be9 / imagem 0.59.2). Varrer o restante da lista (maps do workflow) e fechar com o mecanismo ATUAL (admin_role_binding + headers) sem esperar R0.1–R0.3 (emenda 5). Migrar o gate interino da moderação pro RequirePermission quando R0.3 existir.

O inventário do ultraplan achou a superfície /moderation 100% aberta (CORRIGIDO no hotfix 2197be9 / imagem 0.59.2). Varrer o restante da lista (maps do workflow) e fechar com o mecanismo ATUAL (admin_role_binding + headers) sem esperar R0.1–R0.3 (emenda 5). Migrar o gate interino da moderação pro RequirePermission quando R0.3 existir.
Author
Owner

Fila de segurança varrida — 2 portas realmente abertas fechadas e deployadas.

Inventário do ultraplan: 39 sítios. Todos têm gate agora. Os dois sem NENHUMA autorização foram corrigidos:

  1. Superfície /moderation inteira — anônimo criava regra e resolvia apelação. Fix 2197be9, imagem 0.59.2-moderation-gate, verificado anônimo→401.
  2. Escalação de privilégio no adminauthorize_mutation exigia só VerificationLevel::Directory (nível de verificação, não papel): qualquer cidadão verificado podia bind_role e se conceder owner. admin_role_binding era gravado mas nunca consultado. Fix cfe3321 (query actor_has_admin_role + teste de regressão), imagem 0.59.3-admin-gate.

Os demais 33 sítios têm gate por VerificationLevel; o que falta neles é refinamento de PAPEL (ex.: meetings.minutes, mandates.offices.manage deveriam exigir papel, não só Email/Directory) — isso é o R2/R3 com RequirePermission, não buraco aberto.

⚠️ Ação recomendada (auditoria): como a brecha #2 esteve viva em prod, auditar os 8 bindings admin atuais (1 owner + 7 admin, incluindo 2 contas cidadao-* genéricas) pra confirmar que todas foram concedidas legitimamente.

Débito registrado: ambos os gates interinos leem admin_role_binding cross-crate; migram pro extractor RequirePermission no R0.3.

**Fila de segurança varrida — 2 portas realmente abertas fechadas e deployadas.** Inventário do ultraplan: 39 sítios. Todos têm gate agora. Os dois sem NENHUMA autorização foram corrigidos: 1. **Superfície `/moderation` inteira** — anônimo criava regra e resolvia apelação. Fix `2197be9`, imagem `0.59.2-moderation-gate`, verificado anônimo→401. 2. **Escalação de privilégio no admin** — `authorize_mutation` exigia só `VerificationLevel::Directory` (nível de verificação, não papel): qualquer cidadão verificado podia `bind_role` e se conceder `owner`. `admin_role_binding` era gravado mas nunca consultado. Fix `cfe3321` (query `actor_has_admin_role` + teste de regressão), imagem `0.59.3-admin-gate`. Os demais 33 sítios têm gate por VerificationLevel; o que falta neles é refinamento de PAPEL (ex.: `meetings.minutes`, `mandates.offices.manage` deveriam exigir papel, não só Email/Directory) — isso é o R2/R3 com `RequirePermission`, não buraco aberto. ⚠️ **Ação recomendada (auditoria):** como a brecha #2 esteve viva em prod, auditar os 8 bindings admin atuais (1 owner + 7 admin, incluindo 2 contas `cidadao-*` genéricas) pra confirmar que todas foram concedidas legitimamente. Débito registrado: ambos os gates interinos leem `admin_role_binding` cross-crate; migram pro extractor `RequirePermission` no R0.3.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
brasil/democracia-social#41
No description provided.