Uma "Nova" Classe de Injection Attack
Autor: Nilton Felipe de Oliveira Braz | Publicado: 2012-02-22T16:26:00-08:00



Hoje em dia, muitos componentes de aplicações web são executadas no computador do usuário (como JavaScript), e não apenas no servidor do aplicativo provedor (como Servlets). Com o passar do tempo, houve a necessidade das aplicações web fornecerem uma variedade maior de serviços aos seus usuários, sendo ao mesmo tempo funcionais, interativos e faceis de usar. Por esta razão, mesmo a aplicação mais “simples” pode, eventualmente, obter e processar uma grande quantidade de parâmetros diferentes HTTP. Isso pode resultar na exposição do S.O a uma grande variedade de vulnerabilidades de validação de entrada ou injeção, como por exemplo Cross-site Scripting, injeção de SQL e injeção de comandos. 
O HTTP Parameter Pollution é um ataque de injeção relativamente antigo e com pouco grau de risco, até então,&nbsp; e só recentemente começou a atrair atenção no mundo da segurança web.



Esta vulnerabilidade foi apresentada pela primeira vez por Stefano di Paola e Carettoni Luca em 2009, na conferência OWASP que acontece na Polônia. HTTP Parameter Pollution tira proveito do fato de que o HTTP permite serem utilizados mais de uma vez os mesmos parâmetros, o que expõe alguns aplicativos da web para usuários mal-intencionados. HPP é uma técnica considerada simples, porém bastante eficaz e afeta tanto o lado do cliente quanto o lado do servidor web. Quando explorada, o impacto de um ataque de injeção de HPP depende da funcionalidade do aplicativo web. Apesar de sua simplicidade, o HTTP Parameter Pollution pode ser muito perigoso e pode comprometer sites e aplicativos web considerados seguros.


Abaixo explicaremos em detalhes como um HTTP Parameter Pollution pode ser lançado no front-end (cliente) ou o back-end (servidor) do aplicativo web. 

HTTP Parameter Pollution:

O HTTP Parameter Pollution, como o nome próprio nome já diz, polui os parâmetros HTTP de uma aplicação web com o intuito de rodar um job malicioso ou obter um comportamento diferente do previsto para a aplicação web.

Esta técnica é considerada simples, mas muito eficaz. Além disso, a principal razão este ataque pode ser realizado é porque a entrada não é obter higienizado adequadamente. HPP injeta codigos delimitadores de seqüência em parâmetros de consulta existentes ou outros HTTP (GET / POST / Cookie), que torna-se fácil a substituição dos valores dos parâmetros que já existem para injetar um novo parâmetro ou explorar diretamente as variáveis de acesso. Este ataque afeta todas as tecnologias web, seja em execução do lado do cliente ou do lado do servidor.

Geralmente, um invasor pode usar vulnerabilidades HPP para:

&nbsp;&nbsp;&nbsp;&nbsp; - Substituir parâmetros existentes codificados HTTP;
&nbsp;&nbsp;&nbsp;&nbsp; - Alterar ou modificar o comportamento normal do aplicativo;
&nbsp;&nbsp;&nbsp;&nbsp; - Acessar e explorar variáveis potenciais que não estão sendo controladas adequadamente;
&nbsp;&nbsp;&nbsp;&nbsp; - Ignorar regras WAFS ou mecanismos de validação de entrada;

Assim, se uma aplicação web é vulnerável a ataques HPP, a segurança da aplicação web está comprometida, dando um atacante uma maneira fácil de realizar atividades maliciosas ou ilegais.
Tecnologias Web
HTTP permite a apresentação do mesmo parâmetro mais de uma vez. A manipulação do valor de cada parâmetro depende de como cada tecnologia analisa estes parâmetros. Então, o que acontece se o mesmo parâmetro é fornecido mais de uma vez?Dominar a linguamgem que você quer atacar é algo que eu não preciso nem mencionar =)

Algumas tecnologias web analisam a primeira ou a última ocorrência do parâmetro, outras&nbsp; concatenam todas as entradas e os outras vão criar uma matriz de parâmetros. Abaixo temos&nbsp; uma tabela mostrando como cada tecnologia web analisa diferentes valores dos mesmos parâmetros no lado do servidor.
[Referência: HTTP Parameter Pollution&nbsp; OWASP EU09 apresentação Polônia; https://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf]

Os seguintes exemplos mostram como a tecnologia de uma aplicação web está analisando os mesmos parâmetros em uma consulta. O primeiro exemplo fala de como os parâmetros são acionadas podem ser mostrados abaixo usando o Google. No Google você pode ter a seguinte consulta:

http://www.google.com/search?q=web&amp;q=application&amp;q=security









Como mostrado na imagem acima, 'q' o mesmo parâmetro está sendo usado três vezes. Neste caso, o Google concatena os três valores com um espaço no meio, assim o resultado final vai ser "a segurança de aplicações web".

Um segundo exemplo é com o motor de busca Yahoo!. A consulta a seguir tem sido utilizado:

http://search.yahoo.com/search;? _ylt = Ajxtx6DKiSkS1pjEfg6zSMWbvZx4 p = web &amp; p = application &amp; p = segurança

Tendo os mesmos três parâmetros como no exemplo anterior, é mostrado que o Yahoo! só analisa o último parâmetro, assim, o resultado final será "segurança".




Isso mostra claramente como cada tecnologia é diferente ao analisar os parâmetros de valor. A forma como cada tecnologia&nbsp; analisa os parâmetros não é errado, desde que o desenvolvedor esteja ciente disso. Se o desenvolvedor não tem conhecimento desse comportamento ou parâmetro, isso pode ser perigoso para a aplicação web. As tecnologias de web&nbsp; têm várias funções seguras que lhes permitem proteger-se por ser capaz de controlar e manipular esses tipos de parâmetros de entrada.Client-side e Server-SideHTTP Poluição do parâmetro pode ser classificado em duas categorias - do lado do cliente ou do lado do servidor. Cada tecnologia&nbsp; analisar os parâmetros de maneira diferente, assim ataques diferentes podem ser realizados. Isto, dependendo da maneira como ele está sendo acionado, permite ataques do lado do cliente ou do lado do servidor. Além disso, em cada caso, os parâmetros são manipulados de acordo para realizar atividades de hacking no front-end (cliente) ou o back-end (servidor) do aplicativo web.HTTP Parameter Pollution do lado do clienteO ataque HTTP Parameter Pollution (HPP) do lado do cliente&nbsp; tem a ver com o cliente ou o ambiente do usuário, o que significa que as ações do usuário (ou seja, acessar um link em um navegador) são afetados e desencadear uma ação maliciosa ou acidental, sem o conhecimento do usuário. Ataques HPP do lado do cliente pode ser refletido HPP (como uma injeção de parâmetros adicionais para links de URL e / ou outros atributos src ), armazenados HPP (que pode ser funcional em todas as etiquetas com os dados, src e atributos href) e formas de ação com o método POST. Outro ataque HPP do lado do cliente é o ataque baseado em DOM que tem a ver principalmente com a análise de parâmetros inesperados e a realização de client-side HPP usando JavaScript.Obviamente, a habilidade ou capacidade de injeção depende dos atributos do vínculo e suas funcionalidades. No entanto, o objetivo principal é gerar ataques HPP no lado do cliente.Um exemplo de um típico HPP ataque do lado do cliente inclui um site que é vulnerável a HPP e um grupo de vítimas que irão interagir com o site vulnerável. Um atacante, após a identificação de um site vulnerável, irá criar um elo vulnerável com seus parâmetros HTTP poluídas e vai enviar este link ou torná-lo acessível ao público através e-mails ou redes sociais para as vítimas ingênuas e inocentes para clicar. Depois das vítimas clicarem, o comportamento malicioso desejado será realizado, afetando os usuários e os aplicativos da Web (provedores de aplicativos).O cenário a seguir é um site de serviço de webmail, onde um usuário pode ver e apagar os seus e-mails. A URL do site webmail é:http://host/viewemail.jsp?client_id=79643215O link para visualizar um e-mail éVer  O link para excluir um e-mail é: Delete Quando o usuário clica em um dos links acima, a ação apropriada será executada. Os dois links são construídos a partir da URL. A identificação será solicitada e será incorporada / adicionada no link href juntamente com a ação conforme abaixo:ID = request.getParameter ("client_id")href_link = "viewemail.jsp? client_id =" + ID + "&amp; action = abc"Esta aplicação web, e mais precisamente o client_id, é vulnerável a HPP. Como vemos abaixo, um atacante cria uma URL e injeta 'action' outro parâmetro precedido por uma consulta codificando o delimitador de cadeia (por exemplo 26%) após o parâmetro client_id. Este parâmetro tem o valor 'delete':3Ddelete% http://host/viewemailn.jsp?client_id=79643215% 26actionApós a criação do link malicioso, a página agora contém dois links que são injetados com um parâmetro de ação a mais conforme abaixo: View  Excluir Como foi mostrado, o JSP irá analisar os dois parâmetros identicos (action) e irá retornar o primeiro valor. O request.getParameter consulta JSP ("action") irá retornar 'delete' em ambos os casos. Assim, mesmo o usuário clicando em qualquer um dos dois links, exibir ou excluir, a ação excluir sempre será executada.Este é um exemplo simples de como um invasor pode explorar um site com a vulnerabilidade de HTTP Parameter Pollution&nbsp; e fazer com que o código malicioso&nbsp; seja&nbsp; executado sem ser detectado.HTTP Parameter Pollution do lado do ServidorJá o HPP no lado do servidor, o ambiente de back-end da aplicação web é afetado. Um&nbsp; individuo mal intensionado usando ataques HPP irá tentar explorar a lógica da aplicação web vulnerável, enviando por exemplo uma trigger ou URL poluída por exemplo, para acessar o banco de dados de uma aplicação web.UHE do lado do servidor também pode ser usada para contornar diversas regras de firewalls de aplicativos web (WAFs). Alguns WAFs validam apenas uma ocorrência único parâmetro, como o primeiro ou o último. Em um caso em que os concatena de tecnologia da web o valor de vários parâmetros que são os mesmos, tais como ASP.NET / IIS, em seguida, um atacante pode dividir o código malicioso para essas ocorrências, assim, ignorando o mecanismo de segurança ou regras do firewall de aplicação web.A reescrita de URL pode ocorrer com HPP. Por exemplo, um invasor pode injetar uma string de consulta codificada, a fim de fazer com que a URL seja reescrita. Um exemplo pode ser visto abaixo:Seqüência codificada:% http://host/xyz 26page% 3deditURL reescrita:http://host/page.php?page=view&amp;page=xyz&amp;action=edit&amp;id=0Como mencionado antes, a capacidade da injecção depende dos atributos da ligação e suas funcionalidades expostas.Ataques HPP do lado do servidor podem também ser utilizadas para vários canais de poluição e para ignorar tokens CSRF.A fim de melhor entender o ataque HPP lado do servidor, o exemplo a seguir visa tentar explicar como esse ataque pode ignorar as regras de firewall da aplicação web ou filtros baseados em assinatura usando concatenação de parâmetros com os mesmos valores. A seguinte URL / pedido é enviado para o servidor:http://testaspnet.vulnweb.com/test/vuln.cgi?par1=val1&amp;par2=val2O servidor web vai analisar a consulta acima e vai dividi-lo em pares (nome / valor), a fim de ser manipulado ou usado pelo aplicativo web. Assim, a aplicação web terá par1 e par2 com valores val1 e val2 respectivamente. Se a aplicação web é vulnerável a ataques de HPP, um atacante poderia explorá-la e apresentar um conteúdo malicioso. Tomemos o caso seguinte:http://testaspnet.vulnweb.com/test/vuln.cgi?par1=val1&amp;par1=val2Você pode ver que há dois parâmetros par1, cada um contendo dois valores diferentes. Neste caso, como é a aplicação vai rodar isso?&nbsp; Depende da tecnologia, como pode ser visto no parágrafo de Technologias Web, logo acima. Por causa dos diferentes métodos de manipulação de parâmetros, os hackers podem controlá-los, a fim de evitar os mecanismos de segurança e atacar a aplicação web.Em outro exemplo, onde a tecnologia é web ASP.NET / IIS, um hacker pode enviar o seguinte pedido para o servidor:http://testaspnet.vulnweb.com/test/vuln.cgi?par1 =  ...Desde ASP.NET / IIS concatena os valores dos mesmos parâmetros, o resultado final será 
. Consequentemente, um atacante pode expandir isso em um ataque de script cross-site completo.Se houver um Web Application Firewall instalado na frente deste aplicativo, ele irá verificar cada ocorrência do parâmetro separadamente, em cima das regras para ataques de injeção. Como resultado, o firewall da aplicação web irá verificar o primeiro parâmetro par1 = Este é um exemplo de como um atacante pode contornar alguns firewalls de aplicações web usando regras HPP, permitindo que novos ataques sejam efetuados.Contramedidas / prevençãoA fim de evitar estes tipos de vulnerabilidades, uma validação de entrada extensa e adequada deverá ser executada. Existem métodos seguros para cada linguagem&nbsp; web. Além disso, a conscientização sobre o fato de que clientes e usuários podem fornecer mais do que um parâmetro deve ser levantada.ConclusãoUm ataque de injeção antigo e que não atraiu a atenção da comunidade de segurança, nos faz refletir o fato de que este tipo de ataque de injeção nunca deve ser subestimado. A falta de&nbsp; padronização dos métodos&nbsp; que cada tecnologia web engloba, juntamente com a complexidade e prazos curtos de entrega, podem nos levar a vulnerabilidades como essa. Ficou claro que tal vulnerabilidade, apesar de sua simplicidade, pode ser muito perigosa e pode comprometer os sistemas de segurança do seu site. Testes adequados devem ser realizados a fim de determinar se o seu site é vulnerável a ataques HPP, dessa forma você pode limitar as possibilidades e diminuir as oportunidades de exploração.