Skip to content

[P2][security][ux] main.py: bind não-loopback sem auth deve RECUSAR startup (não só warn) sem opt-in explícito #1135

Description

@FabioLeitao

U: U2 — endurecimento de postura default; sem deadline externo hard, mas é a diferença entre "avisou" e "protegeu" no primeiro deploy exposto.
G: G2 — postura default insegura quando o operador expõe o serviço sem habilitar auth.

Contexto (auditoria 2026-07-02)

Os três mecanismos de auth (API key global, WebAuthn, RBAC) são opt-in. Hoje, um bind em host não-loopback sem nenhum deles habilitado apenas emite um warning (should_warn_insecure_api_bind) e sobe assim mesmo. O default seguro (bind 127.0.0.1) protege o caso comum, mas o "warn-e-sobe" transfere para o operador leigo a chance de expor o dashBOARd sem auth sem perceber.

Fix recomendado

  • Fazer o startup recusar (não apenas avisar) quando o host for não-loopback e nenhum mecanismo de auth estiver habilitado, exigindo uma flag explícita de opt-in (reutilizar a semântica do --allow-insecure-http já existente).
  • Documentar o passo "habilite auth ou passe o opt-in" com destaque no QUICKSTART/TECH_GUIDE.

Não fazer

  • Não mudar o default da imagem Docker (loopback + flag é intencional — fora de escopo).
  • Não afetar o bind loopback (deve continuar subindo sem fricção).

Critérios de aceite

  • Startup recusa bind não-loopback sem auth e sem opt-in explícito.
  • Flag de opt-in documentada no QUICKSTART/TECH_GUIDE.
  • Testes dos 3 cenários (loopback sem auth = sobe; não-loopback sem auth sem flag = recusa; não-loopback com flag/ou com auth = sobe).
  • check-all verde.

Milestone sugerido: v1.8.0.
Liga: #1136 (gate de /docs /redoc /openapi.json — mesma auditoria).

Opened by Claude (readonly auditor) — Cursor implements.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions