Из-за пути, которым Apache Web сервер обрабатывает DOS сценарии, возможно выполнить удаленные команды на Web сервере используя символ ('|').
Когда запрос о пакетном DOS файле (.bat или .cmd) послан Apache Web серверу, сервер
вызовет интерпретатор оболочки (cmd.exe по умолчанию) и выполнит сценарий с параметрами, посланными пользователем. Поскольку надлежащая проверка правильности
на вводе не сделана, возможно послать символ ('|') с командами, добавленными в конец к этому запросы, и сервер их выполнит.
В заданной по умолчанию инсталляции Apache 2.0.x поставляется с сценарием /cgi-bin/test-cgi.bat, который также подвержен этой уязвимости.
Отмечу, что любой '.bat ' или '.cmd ' сценарий позволит
выполнять команды таким образом.
Пример:
1.
http://TARGET/cgi-bin/test-cgi.bat?|copy+..\conf\httpd.conf+..\htdocs\httpd.conf
Этот запрос копирует файл httpd.conf, в корень Web сервера, где он может
быть просмотрен любым пользователем.
2. http://TARGET/cgi-bin/test-cgi.bat?|echo+Foobar+>>+..\htdocs\index.html
- добавит в конец строку "Foobar" к index.html файлу, постоянно находящемуся в корне Web сервера.
3. http://TARGET/cgi-bin/test-cgi.bat?|dir+c:+>..\htdocs\dir.txt
- создаст файл, содержащий листинг диска C:, и поместит файл в корень Web сервера, где любой пользователь
сможет его прочитать.
Примечание:
1) Url-Decoding вообще в Apache не предусмотрен ,
однако все дело портит символ '+', который заменяет пробел.
2) Прямой вывод в STDOUT наиболее вероятно приведет к сообщению об ошибке. Поэтому
для просмотра результатов команды
рекомендуем переадресацию вывода к файлу в
корне Web сервера.
Уязвимость найдена в Apache WIN32 до версии 1.3.23, и Apache WIN32 до 2.0.28-BETA.