Перейти к содержимому
Noroxi

CWE-22 · 10 715 записей

Обход каталога

Почему это происходит?

Имя файла, переданное пользователем, объединяется с разрешённым каталогом, но не проверяется, остаётся ли результат внутри этого каталога.

Как предотвратить

  1. 01После разрешения пути проверяйте, что он остаётся внутри корневого каталога.
  2. 02Отдавайте файлы по идентификатору из базы данных, а не по имени.
  3. 03Запускайте серверный процесс с правом чтения только необходимых каталогов.

Уязвимый и исправленный код

Показательный учебный пример. Выделенные строки показывают, где ошибка и где исправление.

Уязвимый код

ts
const file = path.join(ROOT, req.query.name);res.sendFile(file);

Исправленный код

ts
const file = path.resolve(ROOT, req.query.name);if (!file.startsWith(ROOT + path.sep)) {  return res.sendStatus(400);}res.sendFile(file);

Есть ли этот шаблон в вашем коде?

В рамках услуги «Пентест веб-приложений и API» мы целенаправленно ищем этот класс. Результаты передаются с указанием номеров строк.

CVE этого класса

10 000 записей

Все классы уязвимостей