Por que o IIS no Windows Server 2012 não é capaz de acessar variáveis de ambiente do sistema?

1

Eu tenho um aplicativo da Web ASP.NET Core em execução no Windows Server 2012 R2 e no IIS 8.5. O IIS usa um par de variáveis de configuração web.config para iniciar o aplicativo. Esta é a linha web.config relevante:

<aspNetCore processPath="dotnet" arguments=".\MyWebsite.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />

A variável processPath é o comando a ser executado e a variável arguments especifica os argumentos a serem transmitidos. dotnet.exe é instalado ao adicionar o tempo de execução do ASP.NET Core ao servidor. Está localizado no diretório C:\Program Files\dotnet . Esse caminho está na variável PATH do sistema do servidor e o contexto do usuário que executa o comando (o usuário do conjunto de aplicativos IIS) tem permissão de leitura / execução para esse caminho.

Quando executo meu aplicativo, recebo um erro do IIS 502.5. Os logs do Windows relatam o seguinte:

Application 'MACHINE/WEBROOT/APPHOST/MYWEBSITE' with physical root 'C:\Sites\MyWebsite\' failed to start process with commandline 'dotnet .\MyWebsite.dll', ErrorCode = '0x80004005 : 80008083.

No entanto, se eu alterar o web.config para especificar o caminho completo para o executável (por exemplo, C:\Program Files\dotnet\dotnet.exe em vez de dotnet ), o aplicativo será executado corretamente.

Portanto, minha suposição é que, por algum motivo, o IIS não pode acessar a variável de ambiente do sistema PATH . Alguém pode sugerir uma resolução? Eu reiniciei o servidor desde a instalação do tempo de execução do ASP.NET Core.

    
por getsetcode 24.10.2017 / 11:55

1 resposta

3

Quando um aplicativo carrega uma biblioteca de vínculo dinâmico ou pode ser executado sem especificar um caminho completo, o Windows tenta localizar o binário pesquisando um conjunto bem definido de diretórios. Isso inclui o caminho local, o caminho ativo e a variável PATH (falando de aplicativos que respeitam isso, como o CMD).

Se um invasor obtiver o controle de um dos diretórios, como em um caminho de site no IIS, ele poderá forçar o aplicativo a carregar uma cópia mal-intencionada do arquivo em vez do esperado. Esses ataques são conhecidos como "pré-carregamento de ataques" e são comuns a todos os sistemas operacionais que suportam carregamento dinâmico e / ou bibliotecas e binários compartilhados.

O efeito de tais ataques pode ser que um invasor possa executar código no contexto do usuário (processo) que está executando o aplicativo. Quando o pool de aplicativos está sendo executado como administrador, isso pode levar a uma elevação de privilégio local.

É por isso que muitos processos do sistema não usam ou não usam mais o conteúdo do PATH para procurar por seus binários.

Mais sobre isso: Carregamento seguro de bibliotecas para evitar ataques de pré-carregamento

    
por 24.10.2017 / 16:02