Многие FTP клиенты, включая те, которые встроены в Web клиенты, могут быть уязвимы к некоторым методам обхода каталога, которые могут эксплуатироваться злонамеренными FTP серверами. Нападение позволяет серверу перезаписывать или создавать произвольные файлы вне рабочего каталога клиента.
Для успешной эксплуатации уязвимости, FTP сервер должен послать имя файла с последовательностью типа "../" или
"\..\" в ответ на LIST или другой запрос. Клиент также должен загрузить такие файлы в некоторую директорию.
Для проверки клиентов на уязвимость был создан специальный набор тестов. Для этого FTP сервер ftp4all был изменен таким образом, чтобы возвратить имена файлов
в таких формах, которые могли бы заставить FTP клиент записать файлы поверх рабочего каталога.
Были изменены файлы src/ftps/list.c, serverd.c, и transfer.c, так, чтобы они могли производить
изменение имени файла для любого имени, запрашиваемого клиентом.
Когда клиент посылает LIST или NLST команду, тестовый сервер возвращает имена фалов, содержащие следующие последовательности:
- "../" – классический обход
- "/path" – абсолютное имя файла
- "..\" –обход с использованием backslash (Windows системы)
- "C:" – обход, используя имя диска (Windows системы)
- "..." - "triple-dot" (Windows системы, равноценно ../..)
При загрузке групп файлов, используя эти последовательности, FTP клиент выполняет команду "NLST", читает список файлов, возвращенных сервером, и использует полученные имена файлов, чтобы выполнить индивидуальные запросы.
Примечание: Web клиенты могут быть также уязвимы при обработке "ftp://" URL.
Ниже, моделируемый сеанс, который демонстрирует поведение уязвимого клиента.
CLIENT> CONNECT server
220 FTP4ALL FTP server ready. Local time is Tue Oct 01, 2002 20:59.
Name (server:username): test
331 Password required for test.
Password:
230-Welcome, test - I have not seen you since Tue Oct 01, 2002 20:15 !
230 At the moment, there are 0 guest and 1 registered users logged in.
CLIENT> pwd
257 "/" is current directory.
CLIENT> ls -l
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 1
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11 ...\FAKEME5.txt
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11
./../FAKEME2.txt
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11 ../FAKEME1.txt
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11
.\..\FAKEME4.txt
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11 ..\FAKEME3.txt
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11
/tmp/ftptest/FAKEME6.txt
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11
C:\temp\FAKEME7.txt
-rw-r----- 0 nobody nogroup 54 Oct 01 20:10 FAKEFILE.txt
-rw-r----- 0 nobody nogroup 0 Oct 01 20:11 misc.txt
226 Directory listing completed.
CLIENT> GET *.txt
Opening ASCII data connection for FAKEFILE.txt...
Saving as "FAKEFILE.txt"
Opening ASCII data connection for ../../FAKEME2.txt...
Saving as "../../FAKEME2.txt"
Opening ASCII data connection for /tmp/ftptest/FAKEME6.txt...
Saving as "/tmp/ftptest/FAKEME6.txt"
Если клиент уязвим, то он запишет файлы вне корневой директории.
В некоторых случаях, FTP клиент производил ошибку, когда сталкивался с подозрительным именем файла. Таким образом, нельзя было убедиться, был ли клиент уязвим к другим именам файла. В этом случае, во время тестирования сервер посылал одно злонамеренное имя файла одновременно, а клиент запускался несколько раз. Другие возможные варианты последовательностей обхода каталога не проверялись.
Web клиенты могут быть уязвимы к подобному типу нападений от злонамеренных HTTP серверов, при автоматической загрузки Web страницы. Однако, это не было проверено.
В результате проверки нескольких популярных FTP
клиентjd, уязвимость была обнаружена в wget, FTP клиентах встроенных в OpenBSD 3.0, Solaris 2.6-7.0 и CGI IRIX. Ftp клиенты в NT SP5, Red Hat, Debian, XP а также в lftp, NcFTP и Lynx не уязвимы к описанному типу нападений.