Solução

Nome Valor
Vulnerabilidade Type Confusion
CWE CWE-843
OWASP Top Ten A01_2021-Broken_Access_Control

Você sabia que o sistema de tipos de uma linguagem de programação pode afetar a segurança? Pois você acabou de presenciar uma das maneiras como isso pode acontecer.

Type confusion é quando os dados de uma aplicação são interpretados de forma inesperada pelo programador por não ser do tipo que ele estava esperando.

Quando você envia uma string nos campos username e password, a aplicação se comporta como o esperado. Mas se você enviar valores booleanos nestes campos, a engine do PHP irá fazer uma comparação entre um booleano e uma string. Nesse caso a string é convertida para booleano.

Se a string for vazia ela é considerada como false, do contrário true. Então, se você mandar true nos campos username e password, você conseguirá fazer login na aplicação. Porque o PHP estará comparando true com true. Exemplos:

fetch('./login.php', {
    method: 'POST',
    body: JSON.stringify({
        username: true,
        password: true,
    }),
})
    .then(response => response.json())
    .then(response => console.log(response));

Ou usando o curl:

$ curl \
    --data '{"username": true, "password": true}' \
    http://127.0.0.1:8080/login.php

Altere o código desse exercício para garantir que essa vulnerabilidade não aconteça mais.