diff --git a/services/rusgram/PATCH.md b/services/rusgram/PATCH.md new file mode 100644 index 0000000..925523b --- /dev/null +++ b/services/rusgram/PATCH.md @@ -0,0 +1,122 @@ +# Rusgram — что запатчено + +Оригинал (для диффа): `services_vulnerable/rusgram` +Пропатчено: `services/rusgram` + +```bash +diff -ru services_vulnerable/rusgram services/rusgram +``` + +Проверено на живом стенде: легальный флоу чекера проходит полностью, +`sploits/rusgram_sploit.py` против пропатченного сервиса собирает **0 флагов** +и не может даже перечислить пользователей. + +--- + +## Изменения по файлам + +### `content/content.py` — закрывает V1 (RCE) и V5 + +* **Белый список шаблонов.** `render_template(path)` теперь вызывается только для + `index.html`, `login.html`, `register.html`, `specific.html`. Всё остальное — 404. + Это корень SSTI: `template_folder='files'` совпадает с каталогом БД, поэтому + файл пользователя рендерился как исходник Jinja-шаблона. +* `get_login()` вынесен из тела вьюхи и больше не падает: нет куки, кука кривого + формата, юзера не существует, database недоступен — всё возвращает `None`. +* `specific.html`: `img` приводится к `int` и проверяется на диапазон 1–16. + Побочно чинит незакавыченную подстановку `{{img['id']}}` внутрь `