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.