willnix

observações técnicas sobre sistemas mal projetados

Arquivos públicos e a ilusão de sigilo

arquivo técnico

Tudo que o navegador carrega é, por definição, público.

Ainda assim, muitos projetos tratam esses recursos como se estivessem escondidos.

Diretórios previsíveis, nomes óbvios, nenhuma separação entre interface e lógica.

Não é uma falha sofisticada. É descuido acumulado.

— willnix

Infraestrutura não falha, pessoas sim

observações recorrentes

Sempre que um sistema cai, a narrativa tenta culpar hardware, software ou ataques externos.

Na prática, quase sempre há uma decisão humana mal documentada no meio do caminho.

Credenciais reutilizadas. Ambientes de teste expostos. Exceções temporárias que se tornam permanentes.

O problema não é técnico. É organizacional.

— willnix

Sobre logs que ninguém lê

anotações técnicas

Sistemas modernos produzem volumes absurdos de logs. O problema não é falta de informação, é excesso.

Já vi ambientes onde alertas críticos coexistiam com mensagens irrelevantes no mesmo fluxo. Tudo acaba sendo ignorado.

Auditorias costumam assumir que alguém está olhando. Normalmente, ninguém está.

O erro não está na tecnologia, mas na crença de que registro implica controle.

— willnix

Quando a senha está no JavaScript

publicado anonimamente · análise técnica

Às vezes, não é preciso força bruta, exploits ou engenharia social. Às vezes, o sistema simplesmente entrega tudo.

Sites estáticos frequentemente usam JavaScript para simular autenticação. O problema começa quando a validação inteira acontece no cliente.

Observação inicial

Qualquer recurso público pode ser requisitado diretamente. HTML, CSS e JavaScript não são protegidos por formulários.

$ curl https://link-do-site.com

A resposta é apenas um HTML comum. Nada inesperado. O detalhe está no final do documento:

<script src="js/auth.js"></script>

O erro conceitual

Se o JavaScript é carregado pelo navegador, então ele também é acessível diretamente.

$ curl https://link-do-site.com/js/auth.js

O conteúdo revela exatamente como a validação funciona. Não há servidor, não há hash, não há verificação real.


if (
  email === "email" &&
  password === "senha"
)

Conclusão

Não houve quebra de criptografia. Não houve invasão de infraestrutura. Apenas leitura de um arquivo público.

Autenticação no front-end não é autenticação. É apenas encenação. E cai entre nós, quem deixa isso acontecer é muito burro! Porém pode acontecer se foi feito pra um teste e esqueceram de modificar isso na hora da produção. Se duvidar, deve ter isso até mesmo em sites governamentais.

— willnix

O mito do acesso restrito

nota curta

Interfaces de login tranquilizam mais do que protegem.

Elas comunicam autoridade, não segurança. A maioria das pessoas para ali.

Sistemas verdadeiramente sensíveis não anunciam que são sensíveis.

O aviso “acesso restrito” costuma ser apenas um pedido educado.

— willnix