Skip to content

ACS: FLAG_SECURE, release assinado, botão da UBS, RF08, MFA (TOTP) e mTLS no broker - #36

Merged
hbgit merged 43 commits into
developfrom
fix/app_acs
Oct 2, 2026
Merged

hbgit merged 43 commits into
developfrom
fix/app_acs

Conversation

@hbgit

@hbgit hbgit commented Oct 2, 2026

Copy link
Copy Markdown
Owner

O que muda

Fecha as pendências do app do ACS que o PROGRESS.md listava como abertas (plano docs/superpowers/plans/2026-10-02-pendencias-do-acs-flag-secure-ubs-rf08-mfa-assinatura-mtls.md) e a revisão/fechamento do app ACS do mesmo dia.

  • FLAG_SECURE: a janela do ACS bloqueia captura de tela, gravação e miniatura dos recentes.
  • Release: a build de release exige chave própria (key.properties ou SINALACS_KEYSTORE_*); com a de debug só com -Psinalacs.allowDebugSigning=true. Também barra o APK que levaria a chave privada de desenvolvimento do broker.
  • Botão da UBS (RF13): liga para o telefone da UBS (ubs.myContact, coluna nova nullable ubs.contactPhone); a consulta não bloqueia o botão do SAMU.
  • RF08: microárea persistida na base SQLCipher (v6), por dono, validade de 72 h, só no lugar de falha recuperável de rede. Decisão de LGPD em spec/lgpd_design.md §5.11.
  • MFA (RF07, LGPD-RT06): TOTP no loginInstitutional, replay barrado inclusive em requisições simultâneas, ativação por matrícula+senha+código, REQUIRE_ACS_MFA (ligado fora de development). App com campo de código e tela de ativação. A expiração da sessão reautentica por cima do painel, sem perder alertas, fila nem formulário.
  • mTLS no broker: require_certificate true mantendo senha e ACL; backend e ACS apresentam certificado de cliente. Só a stack local: o provisionamento por aparelho em produção continua aberto.
  • Fixes de QA do script de GPS e do conferidor de contagem, e a revisão do app (fonte ampliada WCAG 1.4.4, allowBackup=false, rajada de 100 visitas, tema).

Testes

  • Backend dart test: 497 passando. App ACS flutter test: 272 passando; flutter analyze limpo.
  • No emulator-5554: e2e.sh --emulator, acs_full_e2e.sh (login real, RF08 cifrado no disco, MFA, 100 visitas em ~100 ms), GPS (concedida e negada), acs_secure_window.sh, acs_release_signing.sh, mtls_invariants.sh.
  • Nenhum teste do CI foi rodado em runner (a branch não tinha PR até agora).

Atenção na revisão

  • Sem refresh token, o ACS com MFA refaz matrícula+senha+código a cada 15 min (o painel é preservado). Decisão de produto em aberto.
  • Ao logar como outro usuário na reautenticação, a fila de visitas pendentes do anterior é reaproveitada (preexistente; o servidor recusa paciente de outra microárea).
  • FLAG_SECURE deixa screencap/screenrecord do ACS pretos (afeta video/capture); documentado.
  • Continua aberto: bloqueio progressivo de TOTP, certificado por aparelho em produção, keystore de release no CI, telefone da UBS pelo backoffice, iOS.
  • Migrações do servidor só aditivas (colunas nullable em ubs e user_credentials).

hbgit added 30 commits October 1, 2026 19:08
…teste; corrige setState no dispose do painel
…rto no drive e com caso hermético de >2 toques
… no máximo 2 pedidos antes e comentários sem USER_FIXED
hbgit added 13 commits October 2, 2026 11:26
…06), com replay barrado

- Totp (RFC 6238, SHA-1, 6 dígitos, 30 s, janela ±1) com os vetores da RFC
  e comparação sem saída antecipada.
- Segredo cifrado com a chave dos dados clínicos (HealthCipherTotpVault);
  quatro colunas nullable em user_credentials (migração aditiva).
- auth.loginInstitutional ganha totpCode; MfaRequiredException e
  MfaEnrollmentRequiredException; auth.beginTotpEnrollment e
  auth.confirmTotpEnrollment, públicos por desenho e sujeitos ao bloqueio.
- O passo aceito só avança no UPDATE: o mesmo código não entra duas vezes.
- REQUIRE_ACS_MFA: ligado fora de development; false na stack local e no e2e.
- Teste de integração prova begin → confirm → login e o replay contra Postgres.
- TotpStore.registerStep/enable/saveSecret devolvem se a linha mudou; o
  UPDATE condicional decide quem ganha, e quem perde é recusado (RFC 6238
  §5.2): login com código já validado conta falha e audita denied_totp_replay.
- enable só ativa o segredo pendente que o código conferiu; saveSecret não
  sobrescreve MFA já ativa.
- Begin bem-sucedido auditado como mfa_enrollment_started; mensagem própria
  para store de TOTP ausente.
- Integração com concorrência real: N logins (ou confirmações) simultâneos com
  o mesmo código abrem exatamente uma sessão (ou ativam uma vez).
…gue recusa do broker de falha de infraestrutura
… alertas, formulário nem fila; ajustes de documentação
@gitguardian

gitguardian Bot commented Oct 2, 2026

Copy link
Copy Markdown

⚠️ GitGuardian has uncovered 4 secrets following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secrets in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
37823983 Triggered Generic Password d6718dd backend/sinalacs_server/test/unit/institutional_auth_mfa_test.dart View secret
37801164 Triggered Generic Password 8961705 scripts/qa/otp_relay_test.py View secret
37823984 Triggered Generic High Entropy Secret abb8438 apps/acs/test/support/fakes.dart View secret
37823984 Triggered Generic High Entropy Secret abb8438 apps/acs/test/support/fakes.dart View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secrets safely. Learn here the best practices.
  3. Revoke and rotate these secrets.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@hbgit
hbgit merged commit 3f6b2f6 into develop Oct 2, 2026
10 checks passed
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