У меня есть веб-приложение 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 для поиска своих двоичных файлов.
Подробнее об этом: Безопасная загрузка библиотек для предотвращения атак предварительной загрузки