Solicitações de cabeçalho IIS CGI HTTP_PROXY podem ser redirecionadas

Sintomas
Quando você usa o recurso de interface CGI do IIS para hospedar um programa executável que usa uma determinada biblioteca para redirecionar solicitações, estas últimas podem ser mal direcionadas com base na presença de um cabeçalho de solicitação "PROXY". Várias plataformas de aplicativos Web são conhecidas por usar essa biblioteca. Essas plataformas incluem a PHP, a Python e a Go, entre outras.
Causa
A CGI é uma interface que permite que um servidor Web hospede aplicativos que são executados como processos executáveis. Quando uma solicitação é recebida por um servidor Web, este inicia um novo processo para lidar com essa única solicitação. Quando a solicitação for concluída, o processo será encerrado. Para que o processo tenha acesso aos dados da solicitação, cabeçalhos de solicitação são incluídos como variáveis de ambiente que têm "HTTP_" anexado ao nome. Portanto, processos CGI para solicitações que contêm um cabeçalho denominado "Proxy" têm uma variável de ambiente "HTTP_PROXY" que apresenta o mesmo valor que o cabeçalho da solicitação.

A linha de comando e biblioteca cURL são comumente usadas​para permitir que vários tipos de aplicativos façam solicitações a vários tipos de servidores, incluindo servidores Web. Essa biblioteca pode ser configurada usando parâmetros de linha de comando ou pode ler seus parâmetros de configuração a partir das variáveis de ambiente de processos de hosts. "HTTP_PROXY" é um dos muitos parâmetros de configuração que são usados por cURL. "HTTP_PROXY" é usado por cURL para enviar uma solicitação HTTP por meio do proxy configurado.

Observação Isso não está relacionado a "HTTP_PROXY" como a representação de um cabeçalho de solicitação de cliente.

Quando cURL está hospedada dentro de um processo da CGI e esse processo contém uma variável de ambiente denominada "HTTP_PROXY", ela usa seu valor para enviar dados solicitados através do proxy HTTP cujo valor é especificado na variável de ambiente. Isso ocorre porque cURL espera que "HTTP_PROXY" seja uma diretiva de configuração, e não um cabeçalho de solicitação de cliente.
Como Contornar
Para contornar esse problema, não use a CGI em um servidor que esteja executando o IIS. CGI é uma interface obsoleta substituída por interfaces mais recentes e mais relacionadas ao desempenho. Especificamente, a PHP, a Python e a Go devem ser hospedadas por meio da FastCGI no IIS. A FastCGI não usa variáveis de ambiente para cabeçalhos de solicitação de cliente e não apresenta esse problema. No entanto, para PHP, alguns aplicativos podem usar a função PHP getenv() para recuperar variáveis de ambiente. Mesmo quando a PHP não está hospedada em um processo da CGI, ela replica o comportamento da CGI por meio da injeção de valores de cabeçalho de solicitação no conjunto de dados disponíveis para sua função getenv(). Se você usar um aplicativo PHP que recupera HTTP_PROXY dessa maneira, as seguintes reduções de limpeza o valor do cabeçalho ou de rejeição de solicitações com um cabeçalho PROXY serão eficazes.

Se você tiver que usar a CGI para algum motivo, bloqueie solicitações que contenham um cabeçalho de solicitação denominado "Proxy" ou limpe o valor do cabeçalho.  Isso porque "Proxy" não é um nome de cabeçalho de solicitação padrão, e os navegadores geralmente não o enviarão.

Para bloquear uma solicitação que contém um cabeçalho Proxy (a solução preferencial), execute a seguinte linha de comando:
appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='proxy',sizelimit='0']

Observação O arquivo appcmd.exe não está geralmente no caminho e pode ser encontrado no diretório %systemroot%\system32\inetsrv

Para limpar o valor do cabeçalho, você pode usar a seguinte regra de Reescrita de URL:
<system.webServer>    <rewrite>        <rules>            <rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">                <match url="*.*" />                <serverVariables>                    <set name="HTTP_PROXY" value="" />                </serverVariables>                <action type="None" />            </rule>        </rules>    </rewrite></system.webServer>

Observação O recurso Reescrita de URL é um suplemento para download para o IIS e não está incluído em uma instalação padrão do IIS.
Propriedades

ID do Artigo: 3179800 - Última Revisão: 08/02/2016 12:22:00 - Revisão: 3.0

Windows 10, Windows 10 Version 1511, Windows Server 2012 R2 Datacenter, Windows Server 2012 R2 Standard, Windows Server 2012 R2 Essentials, Windows Server 2012 R2 Foundation, Windows 8.1 Enterprise, Windows 8.1 Pro, Windows 8.1, Windows RT 8.1, Windows Server 2012 Datacenter, Windows Server 2012 Standard, Windows Server 2012 Essentials, Windows Server 2012 Foundation, Windows Server 2008 R2 Service Pack 1, Windows 7 Service Pack 1, Windows Server 2008 Service Pack 2, Windows Vista Service Pack 2

  • atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB3179800
Comentários