Обхід каталогу
Змінити назву файлу, вилізти з папки, почитати будь-що.
Що таке Обхід каталогу?
Обробник приєднує ім’я файлу із запиту до фіксованого каталогу та зчитує все, до чого це розв’язується. Додайте кілька сегментів ../ , і результат залишиться за межами папки, яку мав на увазі розробник. Ви заміните назву рахунку-фактури на ../../../etc/passwd на кінцевій точці виставлення рахунків і отримаєте файл системного облікового запису назад. Потім ви це виправляєте: перетворюєте в канонічну форму за допомогою path.resolve і підтверджуєте, що результат усе ще знаходиться в призначеній папці перед читанням байта. Видалення .. із рядка не є тією самою перевіркою.
Що ви дізнаєтесь у Обхід каталогу
- Розпізнавати обхід каталогу як результат приєднання введення користувача до шляху файлової системи без перевірки канонізації чи обмеження
- Прочитайте обробник і визначте небезпечний шаблон конкатенації шляху
- Зрозумійте, чому рядковий фільтр, який відхиляє .., програє закодованим сегментам і абсолютним шляхам
- Застосуйте виправлення канонізації, а потім перевірте: вирішіть шлях і переконайтеся, що він залишається в межах призначеного каталогу перед читанням
- Аудит кожного файлу для читання або запису, шлях до якого побудовано з даних запиту
Обхід каталогу — Кроки навчання
-
Знайдіть функцію завантаження
Halvora — це білінгова платформа, і кожен клієнт може завантажити власні рахунки-фактури зі сторінки самообслуговування. У Боба звичайний обліковий запис Halvora. Він відкриває функцію завантаження рахунку-фактури, щоб побачити, як вона поводиться, перш ніж торкнутися її.
-
Завантажте звичайний рахунок-фактуру
По-перше, спостерігайте за нормальною поведінкою функції. Боб завантажує один із власних рахунків-фактур. Файл потрапляє в його завантаження, а мережева панель веб-переглядача записує запит, надісланий сторінкою, саме те, що розробник бачить у 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