..-------------------------------..
..    Again Wind0ws fucking?     ..
.._______________________________..


Content:
I - Локальное переполнение буфера в explorer.exe
  |- введение
  |- описание уязвимости
  |- заключение
II - Ошибки в выполнение команд “dir” и “del”
III– Ошибки в организации файловых систем NTFS (compressed volume) и FAT32
IV -The End!?

__________________________________________________________________________

I- Введение:

   Для начала хочу немного погрузиться  в  историю. Если точнее - в Апрель
   2000 года. Тогда в багтреке  промелькнуло сообщение о  новой уязвимости
   в explorer.exe. При  попытке  доступа  к  файлу,   расширение  которого
   больше  160  символов,  происходило   переполнение  буффера.  Самое  же
   неприятное заключалось в том, что злоумышленник мог попытаться передать
   такой  файл на  ftp-сервер, работающий под управлением Win98, тем самым
   аварийно завершив работу удалённой машины.

   Помню,  что после этого ещё было  сообщение о  переполнении буффера при
   доступе к директории, содержащей  в себе  большое количество  вложенных
   папок.  Все известные  уязвимости, связанные  с  организацией  файловой
   системы,  были  исправлены  в  последующих  версиях  семейства Windows.
   Программисты  Microsoft  создали   ограничения  на   длину  названия  и
   расширения файлов, папок и ярлыков.


|- Описание уязвимости:

   Совсем недавно я занимался поиском  новых методов  переполнения буффера
   при  попытке  доступа к  файлу/папке/ярлыку  с  большим именем. Я хотел
   обойти ограничения программистов Microsoft. Потратив большое количество
   времени,  я всё  же  добился  своего (кто  ищёт, тот всегда  найдёт ;).
   Конечно  далеко  не идеальный вариант, к тому же до сих пор не до конца
   исследованый мной (времени не хватает).

   Всё описанное ниже я тестировал  на Windows XP [ENG] [Version 5.1.2600]
   без SP,  Windows  XP [RU]  [version 5.1.2600] + SP1, и на Win2k [ENG] +
   SP 1,2 (по идее на WinMe и Win98,95 также должно работать).

   При   многократном  посещении  какого-либо  сетевого ресурса (например,
   \\server\soft),  создаётся  так  называемый “Сетевой ярлык”.  К примеру,
   при  использовании   команды  “explorer  \\server\music”  будет  создана
   одноименная  ссылка. Теперь, для полноценного понимания сути уязвимости
   нам понадобиться ещё один сервер (желательно находящийся в твоей сети).
   На  нем  должна  существовать  скрытая  папка (в нашем случае это будет
   xxx$).

   ----------------------------------------------------------------
   !!!! ВАЖНО !!!! Сервер должен работать под линуксом !!!!!
   (непонятно почему, но если машина работает под Win, то ничего не 
   происходит ;-/
   ----------------------------------------------------------------

   Предположим,что путь к этой папке будет выглядеть так: "\\server\xxx$".
   Для  доступа  к  этому  ресурсу мы будем использовать команду “explorer
   [путь]”. Теперь запускаем "cmd.exe"  и набираем:

---
> explorer \\Server\xxx$%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20
---

   Число  последовательностей  “%20” - около  270 [примерно 850 символов].
   Точное-необходимое количество мне было лень высчитывать – я не мазохист
   ;) Теперь жмём “enter”, после чего сразу вылетает ошибка:

    _________________________
   |Windows Explorer         |
   |Can't access this folder |
   |Path is too long.        |
   |_________________________|


   Explorer.exe  ругнулся на слишком  длинный  путь.  Но не смотря на  это
   попытался  открыть   эту   директорию!   Теперь  идём   сюда: "explorer
   \\server\".  В  результате  мы увидим новую сетевую папку, но  на самом
   деле это всего лишь ярлык на ресурс к которому мы только что попытались
   получить   доступ.   Её   название   будет   выглядеть   примерно  так:
   “xxx$%20%20%20%20%20%20%20…”   (Explorer  отображает   неполный  путь).
   Теперь  при попытке доступа к этому  ярлыку (например, если попробовать
   выделить  его  правой  кнопкой  мыши),  explorer.exe   начнёт  сыпаться
   критическими  ошибками.  Подробнее,  можешь  ознакомиться с ними, нажав
   “Debug” :) Вот  так вот всё непросто и во многом непонятно. Я попытался
   максимально  подробно  всё  расписать. Если  же кто-то не понял,  или у
   кого-то  не  получилось,  то  можете  взглянуть  на наглядный  пример –
   видео-ролик:

   http://sunlimited.ru/defaced/files/example.avi  [4.62 Mb] - качество не
   идеальное, но всё же.


Заключение:

   - Скорее   всего  эта  уязвимость   может  рассматриваться  только  как
     локальное переполнение буффера в  Explorer.exe. Способа использования
     её как удалённую я не нашёл.

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

   - \\server\xxx$ взят лишь для примера (так  как видео я  снимал  именно
     для  этого  имени). На  самом  же  деле  не обязательно  обращаться к
     скрытой папке,  да и  тем более существующей :)

   Команда должна выглядеть так: 
   “explorer \\[сервер]\[любая папка]%20%20….[около 850 символов]

   - Я не очень понимаю почему переполнение буффера происходит тогда,когда
     пользователь  обращается  к  этому ярлыку, а не во время его создания
     explorer'ом.  Также   пока   остаётся   загадкой   то,  почему данная
     уязвимость   не   работает   при  доступе  к  компьютеру,  на котором
     установлена  любая  OS  из  семейства  Win.  Всё это будет выяснено в
     ближайшее время.

   - Об этой уязвимости не будет сообщено в багтрек по разным причинам.



II - Ошибки в выполнение команд “dir” и “del”:

   Тестировалось  на Windows XP [ENG] [Version 5.1.2600]  без SP,  Windows
   XP [RU] [version 5.1.2600] + SP1, Win2k [ENG] + SP 1,2.

   При  работе с  cmd.exe я  заметил то, что почти  все  команды проверяют
   длину данных,  которые  передал  пользователь (в качестве параметра или
   названия  файла/папки  к примеру). При попытке послать, например, такой
   запрос:

   “md f:\%20%20%20%20…..[примерно 270 раз]”

   cmd.exe ругнётся: “The full path of [название папки] is too long”. Но в
   результате  тестирования  оказалось,  что   не  все  отвечают  подобным
   образом.

   dir \\Server\xxx$%20%20%20%20%20 [около 850 символов]
   del \\Server\%20%20%20%20 [около 850 символов]

   При выполнении  этих  двух команд  cmd.exe просто вылетает не сказав ни
   слова :) Хочу  заметить, я  не  считаю  это потенциальной  уязвимостью,
   однако  это  весьма   интересное  явление.   Не  очень  понятно  почему
   программисты  MS  так вольно  обошлись  с  этими командами. А ведь даже
   маленькая  и  на первый  взгляд несерьёзная ошибка может обойтись очень
   дорого ;)



III– Ошибки в организации файловых систем NTFS (compressed volume) и FAT32

   Тестировалось  в  WinXP  Home/Proffesional  [ENG]   and  [RU]   version
   5.1.2600 + SP1 на файловых системах NTFS (compressed volume) и FAT32.

   Ошибка возникает  при создании директории с именем какого-либо девайса,
   например:

   C:\>mkdir aux 
   [Неверно задано имя папки.]

   А вот если мы добавим слэш:

   C:\>mkdir aux\

   То  директория  с  заданым именем будет создана. Но при работе  с такой
   папкой через Explorer.exe никакие операции выполнить  будет  невозможно
   [переименовывание,  удаление и т.д.].  Аналогично дело обстоит со всеми
   остальными  dos-девайсами.  Всего  их  11  штук,  поэтому  если в корне
   создать  11  директорий  с  такими  именами,  то  жить  будет  не очень
   удобно ;)

   Девайсы: con, prn, aux, com1, com2, com3, com4, nul, lpt1, lpt2, lpt3

   Удалять их нужно точно так же - со слэшем:

   C:\>rmdir aux\

   Это  тоже  не  очень  значительная  ошибка,  но как и любая другая, она
   заслуживает внимания. Может быть использована в программах-заподлянках.



IV - The End!?

   После  “вынужденного”   присоединения  MS  к  сообществу   OpenSources,
   количество  описаний  подобных  ошибок  в  багтреках  резко  возрастёт.
   Всё  тайное  станет явным ;) И,  возможно,  после  многократных патчей,
   семейство  Win  станет  достаточно  крепким  и надёжным :]  Большинство
   подобных  ошибок  уже  исправлено, но всегда есть возможность придумать
   новые пути к достижению цели.  
   
   Всё, на этом мы хотим закончить наш скромный обзор ;)