Атака с обходом каталога
( Атака обхода каталога или обхода пути ) использует недостаточную проверку безопасности или очистку предоставленных пользователем имен файлов, например, символы, обозначающие «переход в родительский каталог», передаются в API файловой системы операционной системы . Затронутое приложение может быть использовано для получения несанкционированного доступа к файловой системе .
Примеры
[ редактировать ]В PHP
[ редактировать ]Типичный пример уязвимого приложения в PHP- коде:
<?php
$template = 'red.php';
if (isset($_COOKIE['TEMPLATE'])) {
$template = $_COOKIE['TEMPLATE'];
}
include "/home/users/phpguru/templates/" . $template;
Атака на эту систему может заключаться в отправке следующего HTTP-запроса:
GET /vulnerable.php HTTP/1.0
Cookie: TEMPLATE=../../../../../../../../../etc/passwd
Затем сервер сгенерирует ответ, например:
HTTP/1.0 200 OK
Content-Type: text/html
Server: Apache
root:fi3sED95ibqR6:0:1:System Operator:/:/bin/ksh
daemon:*:1:1::/tmp:
phpguru:f8fk3j1OIf31.:182:100:Developer:/home/users/phpguru/:/bin/csh
Повторяющийся ../
символы после /home/users/phpguru/templates/
вызвали
include()
перейти в корневой каталог, а затем включить файл паролей Unix /etc/passwd
.
Юникс /etc/passwd
— это обычный файл, используемый для демонстрации обхода каталогов, поскольку он часто используется взломщиками для взлома паролей . Однако в более поздних системах Unix /etc/passwd
файл не содержит хешированных паролей, а вместо этого они расположены в /etc/shadow
файл, который не может быть прочитан непривилегированными пользователями на компьютере. Но даже в этом случае чтение /etc/passwd
по-прежнему показывает список учетных записей пользователей.
Уязвимость Zip Slip
[ редактировать ]Другим примером является уязвимость Zip Slip, которая затрагивает несколько форматов архивных файлов, таких как ZIP . [1]
Вариации
[ редактировать ]Обход каталога в своей простейшей форме использует ../
шаблон. Некоторые распространенные варианты перечислены ниже:
Microsoft Windows
[ редактировать ]Обход каталогов Microsoft Windows и DOS использует ..\
или ../
узоры. [2]
Каждый раздел имеет отдельный корневой каталог (помеченный как C:\
где C может быть любым разделом), и над ним нет общего корневого каталога. Это означает, что для большинства уязвимостей каталогов в Windows атаки ограничиваются одним разделом.
Обход каталога стал причиной многочисленных уязвимостей Microsoft. [3] [4]
Процентное кодирование в URI
[ редактировать ]Некоторые веб-приложения пытаются предотвратить обход каталога, сканируя путь URI запроса на наличие таких шаблонов, как ../
. Эта проверка иногда ошибочно выполняется перед процентным декодированием , что приводит к тому, что URI содержат такие шаблоны, как %2e%2e/
быть принятым, несмотря на декодирование в ../
перед фактическим использованием. [5]
Двойное кодирование
[ редактировать ]Процентное декодирование может случайно выполняться несколько раз; один раз перед проверкой, но еще раз после нее, что делает приложение уязвимым для атак с двойным процентным кодированием. [6] в котором недопустимые символы заменяются их формой с двойным процентным кодированием, чтобы обойти меры безопасности. [7] Например, при атаке с двойным процентным кодированием: ../
может быть заменен его формой с двойным процентным кодированием %252E%252E%252F
. [8] Этот вид уязвимости особенно затронул версии 5.0 и более ранние версии Microsoft от программного обеспечения веб-сервера IIS . [9]
UTF-8
[ редактировать ]Плохо реализованный декодер UTF-8 может принимать символы, закодированные с использованием большего количества байтов, чем необходимо, что приводит к альтернативным представлениям символов, таким как %2e
и %c0%ae
оба представляют .
. Это специально запрещено стандартом UTF-8, [10] но все же приводит к уязвимостям обхода каталогов в таком программном обеспечении, как веб-сервер IIS . [11]
Архивы
[ редактировать ]Некоторые форматы архивов , такие как zip, допускают атаки с обходом каталога: файлы в архиве могут быть записаны так, что они перезаписывают файлы в файловой системе путем обратного отслеживания. Код, извлекающий архивные файлы, можно написать так, чтобы проверять, что пути к файлам в архиве не подвергаются обходу путей.
Профилактика
[ редактировать ]Возможный алгоритм предотвращения обхода каталогов может заключаться в следующем:
- Обработайте запросы URI, которые не приводят к запросу файла, например, выполнение перехвата пользовательского кода, прежде чем продолжить ниже.
- Когда необходимо сделать запрос URI для файла/каталога, создайте полный путь к файлу/каталогу, если он существует, и нормализуйте все символы (например,
%20
преобразовано в пробелы). - Предполагается, что известен полностью определенный, нормализованный путь «Корень документа», и эта строка имеет длину N . Предположим, что никакие файлы за пределами этого каталога не могут быть обслужены.
- Убедитесь, что первые N символов полного пути к запрошенному файлу точно совпадают с «корнем документа».
- Если да, разрешите возврат файла.
- Если нет, верните ошибку, поскольку запрос явно выходит за рамки того, что веб-серверу разрешено обслуживать.
Использование жестко закодированного предопределенного расширения файла для суффикса пути не обязательно ограничивает объем атаки файлами с этим расширением.
<?php
include($_GET['file'] . '.html');
Пользователь может использовать символ NULL (указывающий на конец строки), чтобы обойти все, что находится после $_GET
. (Это зависит от PHP.)
См. также
[ редактировать ]- Chroot-тюрьмы могут подвергаться обходу каталогов, если они созданы неправильно. Возможными векторами атак с обходом каталогов являются открытые файловые дескрипторы каталогов за пределами тюрьмы. — Рабочий каталог еще один возможный вектор атаки.
- Небезопасная прямая ссылка на объект
Ссылки
[ редактировать ]- ^ «Уязвимость скольжения молнии» . Сник .
Уязвимость эксплуатируется с помощью специально созданного архива, содержащего имена файлов обхода каталогов (например, ../../evil.sh). Уязвимость Zip Slip может повлиять на многочисленные форматы архивов, включая tar, jar, war, cpio, apk, rar и 7z.
- ^ «Именование файлов, путей и пространств имен» . Майкрософт.
Функции файлового ввода-вывода в Windows API преобразуют '/' в '\' как часть преобразования имени в имя в стиле NT.
- ^ Бернетт, Марк (20 декабря 2004 г.). «Глубокие дыры в безопасности» . БезопасностьФокус . Архивировано из оригинала 2 февраля 2021 года . Проверено 22 марта 2016 г.
- ^ «Microsoft: уязвимости безопасности (обход каталога)» . Подробности CVE.
- ^ «Обход пути» . ОВАСП .
- ^ «CWE-174: Двойное декодирование одних и тех же данных» . cwe.mitre.org . Проверено 24 июля 2022 г.
Программное обеспечение декодирует один и тот же ввод дважды, что может ограничить эффективность любого механизма защиты, возникающего между операциями декодирования.
- ^ «CAPEC-120: Двойное кодирование» . capec.mitre.org . Проверено 23 июля 2022 г.
Это [двойное кодирование] может позволить злоумышленнику обходить фильтры, которые пытаются обнаружить недопустимые символы или строки, например те, которые могут использоваться в атаках обхода или внедрения. [...] Попробуйте двойное кодирование частей ввода, чтобы попытаться обойти фильтры.
- ^ «Двойное кодирование» . owasp.org . Проверено 23 июля 2022 г.
Например, символы ../ (точка-точка-косая черта) представляют %2E%2E%2F в шестнадцатеричном представлении. Когда символ % кодируется повторно, его представление в шестнадцатеричном коде составляет %25. Результатом процесса двойного кодирования ../ (точка-точка-косая черта) будет %252E%252E%252F.
- ^ «CVE-2001-0333» . Распространенные уязвимости и риски .
- ^ Йерго, Ф. (2003). «RFC 2279 — UTF-8, формат преобразования ISO 10646» . IETF . дои : 10.17487/RFC3629 .
- ^ «CVE-2002-1744» . Распространенные уязвимости и риски .
Ресурсы
[ редактировать ]- Открыть проект безопасности веб-приложений
- Классификация угроз WASC – обход пути
- Эксплуатация и устранение уязвимостей Path Traversal [ постоянная мертвая ссылка ]
- Перечисление общих слабостей CWE — обход пути
Внешние ссылки
[ редактировать ]- DotDotPwn — фаззер обхода каталогов
- Осуждение за использование обхода каталогов.
- «Плохой закон выгоден только плохим парням» . комментарий.zdnet.co.uk . 7 октября 2005 г. Архивировано из оригинала 8 октября 2006 г.
- Ошибка: удаленное выполнение команды IIS %c1%1c
- Информационный бюллетень Cryptogram, июль 2001 г.