← Все задачи / Барлық тапсырмалар

The Steppe Stack Vuln

Track 3 Web 250 pts
Файлы / Файлдар: см. раздел Files прямо в задаче irange.

SteppeStack v3.x — Класс уязвимостей multipart-парсера

Фреймворк SteppeStack (популярен в Казахстане у небольших веб-студий) содержит
класс уязвимостей в своём multipart-парсере, проявляющийся при одновременном
выполнении трёх условий:

  1. Endpoint принимает загрузку multipart/form-data.
  2. Заголовок Content-Type содержит параметр boundary БЕЗ пробела между
    boundary= и значением. Пример:
    Content-Type: multipart/form-data; boundary=----X
  3. Хотя бы одно имя поля формы содержит прямой слэш (/).

Когда выполняются все три условия, парсер «схлопывает» путь из имени поля в
путь файла, записывая его в директорию загрузок с управляемым атакующим
именем (эффект path-traversal).

Уязвимый паттерн (в исходном коде)

def handle_upload(request):
    field = request.POST.get('file')  # уязвимо: имя поля попадает в путь
    name = field.name
    open(UPLOAD_DIR + name, 'wb').write(field.read())

Эксплуатация

Отправьте multipart-загрузку, в которой имя поля формы содержит ../../.
Парсер передаёт имя в конструкцию пути файла без нормализации.

Где искать уязвимый экземпляр

В файле kyzylordatech-cms/views/upload.py.


SteppeStack v3.x — multipart-парсердің осалдығының класы (KK)

SteppeStack фреймворкі (Қазақстанда шағын веб-студияларда танымал) өзінің
multipart-парсерінде келесі үш шарт бір уақытта орындалғанда көрінетін
осалдықтар класын қамтиды:

  1. Endpoint multipart/form-data жүктемесін қабылдайды.
  2. Content-Type тақырыбында boundary= мен оның мәні арасында БОС орынсыз
    boundary параметрі бар. Мысал:
    Content-Type: multipart/form-data; boundary=----X
  3. Кем дегенде бір өріс атауында тура қиғаш сызық (/) бар.

Үш шарт орындалғанда парсер өріс атауындағы жолды файл жолына «жинақтайды»
және оны жүктемелер каталогына шабуылдаушы басқаратын атпен жазады
(path-traversal әсері).

Осал үлгі (бастапқы кодта)

def handle_upload(request):
    field = request.POST.get('file')  # осал: өріс атауы жолға өтеді
    name = field.name
    open(UPLOAD_DIR + name, 'wb').write(field.read())

Пайдалану

Өріс атауында ../../ бар multipart-жүктемесін жіберіңіз. Парсер атауды
нормалаусыз файл жолын құрастыруға береді.

Осал нұсқаны қайдан іздеу керек

kyzylordatech-cms/views/upload.py файлынан.

Формат флага / Жалауша форматы: flag{...}

Подсказки / Кеңестер

Платные подсказки. Открывайте, если действительно нужно. / Ақылы кеңестер. Шынымен қажет болса ашыңыз.

Подсказка 1 / Кеңес 1 (−15)

RU: Задача о распознавании уязвимости в коде, специфичном для казахстанских проектов — что-то, чего не видят generic-сканеры.

KK: Қазақстандық жобаларға тән кодтағы осалдықты тану туралы тапсырма — generic сканерлер көрмейтін нәрсе.

Подсказка 2 / Кеңес 2 (−40)

RU: Не CVE в библиотеках, не XSS/SQLi-шаблоны. Класс — domain-specific input validation: проблемы валидации специфичных KZ-форматов (IIN, BIN, географические коды, документы).

KK: Кітапханалардағы CVE емес, XSS/SQLi үлгілері емес. Класс — domain-specific input validation: KZ-арнайы форматтарды (IIN, BIN, географиялық кодтар, құжаттар) тексеру мәселелері.

← Все задачи / Барлық тапсырмалар