
Александр Попов опубликовал интересные результаты экспериментов с объектом ядра Linux pipe_buffer - одной из самых мощных целей при эксплуатации уязвимостей ядра.
Почему он так интересен атакующему? Повреждение отдельных полей pipe_buffer потенциально позволяет:
В ходе экспериментов автор обнаружил несколько любопытных особенностей.
Например, после достижения лимита /proc/sys/fs/pipe-user-pages-soft ядро начинает создавать новые pipe с уменьшенным буфером. Это может неожиданно повлиять на heap spray и размещение объектов в slab-кешах.
Ещё интереснее другое: оказалось, что для получения примитива чтения и записи памяти ядра может быть достаточно повредить только указатель pipe_buffer.page. Причина кроется в механизме кеширования освобождённых страниц через pipe_inode_info.tmp_page.
Есть и неприятный побочный эффект: закрытие повреждённого pipe может вернуть атакованную страницу аллокатору страниц, что приведёт к непредсказуемому повреждению памяти ядра. Практичное решение из PoC - просто не закрывать такой pipe
Отличный материал для тех, кто изучает Linux Kernel Exploitation, устройство slab allocator и внутреннюю механику pipe.
![]()
Some notes on the security properties of the pipe_buffer kernel object
Many exploits of Linux kernel vulnerabilities use the pipe_buffer kernel object to build strong exploit primitives. When I was experimenting with my personal project kernel-hack-drill, I discovered some interesting properties of pipe_buffer, which may not be described in public articles (at...a13xp0p0v.github.io