- Сразу в глаза бросается следующая строчка кода:
saved_path = str(saved_path)[:100]- Это даёт нам возможность сохранить файл пути, отличному от formatter'а.
- Благодоря этому мы можем создать файл по любому пути - например, в
/app/formatters. saved_pathвсегда начинается сuploads/+ рандомный UUID и-.- Соответсвтвенно, нам нужен
formatterдлиной 100 - 8 - 36 - 1 = 55 символов. - После 55 символов мы можем изменить путь для
check_output, у меня за это отвечает/../yaml - В итоге, мы получаем
../../../../../../../../../../../app/formatters/payload/../yaml.
- Программа делает все formatter'ы исполняемыми при запуске
- Соответсвенно, нам нужно перезагрузить контейнер, либо крашнуть воркер.
- Вспоминаем про существование
/sbin/rebootи то, что у нас есть path injection.