
Описание и LPE PoC уязвимости чтения и записи за пределами буфера (OOB) в ядре Linux.
Статья и Proof-of-Concept локального повышения привилегий для уязвимости OOB чтения и записи в ядре Linux.
Статью об этой уязвимости можно найти здесь в моем блоге, а также мое введение в nf_tables здесь.
Эксплойт, предоставленный в этом репозитории, не следует ожидать, что он успешно выполнится на уязвимых версиях ядра без дополнительной настройки. Существует множество смещений, которые различаются между сборками ядра, а также, конечно, разные ROP-гаджеты.
Иногда даже сам способ эксплуатации уязвимости может потребовать изменений из-за различий между сборками ядра. Примером является другая статья об этой уязвимости Дэвида Боумена (@pqlqpql), которую можно найти здесь, где он эксплуатирует уязвимость с помощью UDP-пакетов — нацеливаясь на стек при обработке UDP-пакета — что не могло быть выполнено в моей сборке ядра из-за значительных различий в раскладке стека. Вместо этого я использовал метод, нацеленный на стек при обработке TCP ACK пакета.
Если вы хотите протестировать это самостоятельно, я рекомендую прочитать мою статью и следовать пути определения смещений, какие хуки использовать и т.д.
Точная версия ядра, из которой я построил ядро, на которое я нацеливался в статье, была 5.12.0, коммит 9f4ad9e425a1d3b6a34617b8ea226d56a119a717.
Для сборки эксплойта необходимы библиотеки libmnl и libnftnl, а также библиотека POSIX потоков (pthread).
Сборка проста:
gcc -lmnl -lnftnl -lpthread exploit.c -o exploit
Уязвимость возникает из-за nft_validate_register_store, введённой в коммите 345023b0db315648ccc3c1a36aee88304a8b4d91 в версии 5.12 и исправлена в коммите 6e1acfa387b9ff82cfc7db8cc3b6959221a95851 в версии 5.17.
Это Proof-of-Concept и статья об уязвимости предназначены только для образовательных целей. Я не несу юридической ответственности за любое возможное использование этого кода.