Considere a instrução abaixo em uma aplicação Java: Query H...
Query HQLQuery = session.createQuery(" FROM contas WHERE custID=' " +
request . getParameter("id") + " ' ");
Se um atacante modificar o valor do parâmetro id em uma requisição do seu navegador para enviar ' or '1'='1 estará ocorrendo
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - SQL Injection.
O tema da questão aborda um tipo de ataque conhecido como SQL Injection, que é uma técnica de injeção de código SQL malicioso através de entradas de usuário que são mal elaboradas ou não são devidamente tratadas pela aplicação. Este problema ocorre quando a aplicação cria consultas SQL de forma dinâmica utilizando a entrada do usuário sem antes validar ou escapar devidamente os dados recebidos.
É importante ter conhecimentos sobre segurança da informação, especialmente no que tange a práticas de desenvolvimento seguro de aplicações, para entender e resolver essa questão.
Na instrução mostrada na questão, o código concatena diretamente o valor obtido pelo método request.getParameter("id")
na consulta HQL (Hibernate Query Language) sem realizar qualquer sanitização ou parametrização da entrada. Se um atacante enviar o valor ' or '1'='1
, o resultado da concatenação seria uma consulta HQL que sempre retornaria verdadeira, pois '1'='1
é uma condição sempre verdadeira. Isso poderia levar a um vazamento de informações sensíveis ou outros ataques mais graves, como manipulação de dados.
Por que a alternativa B está correta?
A alternativa B é a correta porque descreve exatamente o tipo de ataque que está sendo realizado: SQL Injection. Esse tipo de ataque visa explorar a vulnerabilidade presente na aplicação Java mencionada no enunciado, que compõe dinamicamente uma consulta SQL/HQL sem tratar adequadamente os dados de entrada, permitindo que o atacante insira comandos SQL de forma maliciosa que serão executados pelo banco de dados. Este é um dos tipos mais perigosos e comuns de ataques a aplicações web, e é essencial que os desenvolvedores estejam cientes dessas ameaças e saibam como mitigá-las, por exemplo, usando consultas preparadas (prepared statements) ou outras formas de sanitização de entrada.
As outras alternativas descrevem outros tipos de ataques que não estão relacionados ao cenário descrito na questão:
- Cross-Site Request Forgery (CSRF) é um ataque que força um usuário final a executar ações indesejadas em uma aplicação web em que está autenticado.
- Cross-Site Scripting (XSS) é um ataque que envolve a injeção de scripts maliciosos em páginas web vistas por outros usuários.
- Quebra de Autenticação Indireta se refere a vulnerabilidades que permitem o comprometimento da sessão do usuário.
- Referência Insegura e Direta a Objetos é uma vulnerabilidade onde um aplicativo fornece acesso direto a objetos com base na entrada do usuário.
Reforçando, a questão destaca a importância de tratar adequadamente todas as entradas dos usuários, especialmente aquelas que serão usadas em consultas ao banco de dados, para prevenir ataques de SQL Injection, que podem ter consequências muito graves para a segurança da informação.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Gabarito: B.
Injeção de código - as falhas de Injeção, tais como injeção de SQL, de SO (Sistema Operacional) e de LDAP, ocorrem quando dados não confiáveis são enviados para um interpretador como parte de um comando ou consulta. Os dados manipulados pelo atacante podem iludir o interpretador para que este execute comandos indesejados ou permita o acesso a dados não autorizados.
Bibliografia para a questão : https://www.owasp.org/index.php/Top10#OWASP_Top_10_for_2013
(Na versão em Português, um resumo dos "Riscos de Segurança Top 10" pode sem encontrado na pág. 7)
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo