Обхід каталогів
Змініть ім'я файлу, вийдіть за межі папки, прочитайте що завгодно.
Що таке Обхід каталогів?
Обробник додає ім'я файлу із запиту до фіксованого каталогу й читає те, на що вказує результат. Додайте кілька сегментів ../ — і результат опиниться поза папкою, яку мав на увазі розробник. Ви заміните ім'я рахунку на ../../../etc/passwd у білінговому ендпоінті й отримаєте системний файл облікових записів. Потім виправите це: приведете шлях до канонічного вигляду через path.resolve і перед читанням перевірите, що результат усе ще лежить у потрібній папці. Видалення .. із рядка — це не та сама перевірка.
Що ви дізнаєтесь у Обхід каталогів
- Розпізнавайте обхід каталогів як наслідок додавання даних від користувача до шляху файлової системи без канонікалізації чи перевірки меж каталогу
- Читайте код обробника й знаходьте небезпечний шаблон: шлях, що збирається простим додаванням рядків
- Розумійте, чому фільтр, що відкидає .., обходять закодовані сегменти й абсолютні шляхи
- Застосовуйте виправлення «спершу канонікалізація, потім перевірка»: обчисліть шлях і перед читанням перевірте, що він залишається всередині потрібного каталогу
- Перевіряйте кожне читання чи запис файлу, шлях до якого будується з даних запиту
Обхід каталогів — Кроки навчання
-
Знайдіть функцію завантаження
Halvora — це білінгова платформа, і кожен клієнт може завантажити власні рахунки на оплату зі сторінки самообслуговування. У Боба є звичайний обліковий запис Halvora. Він відкриває функцію завантаження рахунків, щоб побачити, як вона працює, перш ніж утручатися.
-
Завантажте звичайний рахунок
Спершу подивіться, як функція працює у звичайному режимі. Боб завантажує один зі своїх рахунків. Файл зберігається в теці завантажень, а вкладка «Network» браузера записує запит, який надіслала сторінка, — саме те, що розробник бачить у DevTools.
-
Ім'я файлу — це просто параметр
Сервер повернув рахунок. Одна деталь у запиті підказує Бобові, як атакувати цю функцію.
-
Змініть запит і надішліть його повторно
Кнопка завантаження Бобові не потрібна. Він редагує записаний запит напряму: замість імені рахунку підставляє шлях, що виводить за межі каталогу, де лежать рахунки. Кожне ../ піднімає на один каталог угору; якщо їх досить, шлях доходить до кореня файлової системи, а звідти etc/passwd — файл облікових записів, який є на кожній машині з Linux.
-
Файл повертається
У відповіді не рахунок. Це файл облікових записів сервера: сервер прочитав його з диска й повернув через те саме завантаження, яке функція пропонує кожному клієнтові.
-
Перевірка знань
-
Сповіщення про злам
Ви відповідаєте за сервіс завантаження рахунків Halvora. Уночі моніторинг витоку даних зафіксував, що ендпоінт повертає вміст файлу сервера замість PDF. Центр моніторингу безпеки надіслав вам подробиці листом.
-
Відкрийте обробник завантаження
Відкрийте обробник завантаження й подивіться, як він перетворює ім'я файлу на файл на диску.
-
Знайдіть ваду
Код дописує ім'я файлу до папки з рахунками і читає результат напряму. Шлях нічим не обмежений, тож значення із сегментами ../ виходить за межі папки.
-
Перевірка знань
Охоплення стандартів безпеки
OWASP Top 10
- A01:2025 Broken Access Control
- A01:2021 Broken Access Control
CWE
- CWE-22 Improper Limitation of a Pathname to a Restricted Directory
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security