Назад | Перейти на главную страницу

Почему IIS в Windows Server 2012 не может получить доступ к системным переменным среды?

У меня есть веб-приложение ASP.NET Core, работающее на Windows Server 2012 R2 и IIS 8.5. IIS использует пару переменных конфигурации web.config для запуска приложения. Это соответствующая строка web.config:

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

В processPath переменная - это команда для запуска, а arguments переменная определяет передаваемые аргументы. dotnet.exe устанавливается при добавлении среды выполнения ASP.NET Core на сервер. Он находится в каталоге C:\Program Files\dotnet. Этот путь находится в системе сервера PATH переменная и пользовательский контекст, выполняющий команду (пользователь пула приложений IIS), имеют разрешение на чтение / выполнение для этого пути.

Когда я запускаю свое приложение, я получаю ошибку IIS 502.5. Журналы Windows сообщают следующее:

Приложению MACHINE / WEBROOT / APPHOST / MYWEBSITE с физическим корнем C: \ Sites \ MyWebsite \ не удалось запустить процесс с командной строкой dotnet. \ MyWebsite.dll, ErrorCode = '0x80004005: 80008083.

Однако, если я изменю web.config, указав полный путь к исполняемому файлу (т.е. C:\Program Files\dotnet\dotnet.exe скорее, чем dotnet), тогда приложение работает нормально.

Итак, я предполагаю, что по какой-то причине IIS не может получить доступ к переменной системной среды PATH. Кто-нибудь может предложить решение? Я перезапустил сервер после установки среды выполнения ASP.NET Core.

Когда приложение загружает библиотеку динамической компоновки или исполняемый файл без указания полного пути, Windows пытается найти двоичный файл путем поиска в четко определенном наборе каталогов. Это включает в себя локальный путь, активный путь и переменную PATH (говоря о приложениях, которые уважают это, например, CMD).

Если злоумышленник получает контроль над одним из каталогов, например, на пути к веб-сайту в IIS, он может заставить приложение загрузить вредоносную копию файла вместо ожидаемой. Эти атаки известны как «атаки с предварительной загрузкой» и являются общими для всех операционных систем, которые поддерживают динамическую загрузку и / или разделяемые библиотеки и двоичные файлы.

Эффект от таких атак может заключаться в том, что злоумышленник может выполнить код в контексте пользователя (процесса), который запускает приложение. Когда пул приложений запускается от имени администратора, это может привести к локальному повышению привилегий.

Вот почему многие системные процессы не используют или больше не используют содержимое PATH для поиска своих двоичных файлов.

Подробнее об этом: Безопасная загрузка библиотек для предотвращения атак предварительной загрузки