Solução
Nome | Valor |
---|---|
Vulnerabilidade | Injection |
CWE | CWE-74 |
OWASP Top Ten | A03_2021-Injection |
Concatenar o input do usuário na string de validação do Laravel, permite que o usuário insira novas regras de validação no campo. E isso pode permitir que um atacante:
- Obtenha informações sobre o banco de dados, por exemplo
sobre colunas ocultas para o usuário em uma determinada
tabela (ex.: uma coluna
is_admin
que controla internamente se o usuário tem acesso a um painel administrativo); - Altere a validação do campo para permitir um valor que deveria ser inválido.
No primeiro caso, obter essa informação pode ser útil para ajudar a explorar uma outra vulnerabilidade de validação possível no Laravel (que será abordado no próximo exercício).
Exemplo:
{
"email": "a|exists:users,is_admin"
}
Ao usar a regra de validação exists
dessa
forma, podemos mapear na tentativa e erro as tabelas e
colunas que existem no banco de dados. Pois caso a tabela ou
coluna não exista, um erro será disparado e você receberá um
status code 500 como resposta.
Leia o código fonte do Laravel para entender como essas strings de validação são tratadas internamente. Link direto: