Solução

Quando se fala de segurança é muito importante lembrar que, no fim das contas, estamos tentando proteger pessoas. Por isso, nossa aplicação não deve aumentar os riscos de segurança que os seus usuários estão correndo.

A falha de segurança está na regra 1 dos endpoints, que diz:

  1. Todo parâmetro DEVE ser passado como query parameter. O input do usuário não deve ser lido de nenhum outro lugar;

É importante levar em consideração que nenhum software/desenvolvedor considera a URL de um site como um dado sensível, e que os query parameters fazem parte da URL de um site. Com isso em mente, nota-se que existe um risco dos dados sensíveis (como uma senha) serem negligenciados.

E isso realmente acontece. Ao enviar um dado sensível usando query parameters, esse dado será armazenado em texto plano no mínimo em dois lugares:

  1. No histórico de navegação do navegador do usuário;
  2. Nos logs de acesso do servidor (nesse caso, nos logs do nginx).

Ou seja, a senha do usuário que tanto devemos proteger acaba sendo armazenada de maneira desprotegida.