
Используйте CVE-2026-46333 и CVE-2026-31431 для смены пароля любого пользователя.
[!WARNING] Используйте это только на системах, которыми вы владеете или на тестирование которых у вас есть разрешение. Рекомендуется держать открытой root-оболочку, если у вас не будет возможности перезагрузить систему в случае сбоя, поскольку без root вы можете не суметь очистить кэш страниц для
/etc/shadow.
Используйте CVE-2026-46333 и CVE-2026-31431, чтобы изменить пароль любого пользователя, никогда не повышая привилегии до root.
python passwd.py <username>
Вы также можете запустить команду без аргументов, чтобы увидеть хэши, находящиеся в данный момент в файле shadow.
CopyFail (CVE-2026-31431) и подобные уязвимости позволяют записывать 4 байта в любой файл в ОС, который вы можете читать. Это обычно означает, что вы не можете изменять файлы, которые не можете читать, например правила PAM или файл shadow. Вы можете использовать CopyFail для повышения привилегий до root и после этого изменять любой файл (существует множество PoC, включая мой собственный RootRemover), но что, если мы хотим изменять другие файлы без повышения привилегий?
CopyFail для работы нужен только файловый дескриптор. Большинство PoC открывают файл и используют этот FD, однако мы можем получить его откуда угодно. В дело вступает CVE-2026-46333.
CVE-2026-46333 способна похищать файловый дескриптор файлов, доступных для чтения root, у процессов chage или ssh-keysign. Поскольку нам нужен /etc/shadow, чтобы изменять пароли, мы сосредоточимся на chage. pidfd_getfd используется для похищения файлового дескриптора /etc/shadow, потому что во время его выполнения существует момент, когда UID устанавливается в пользователя, запустившего процесс (что разрешает pidfd_getfd), но благодаря SUID-биту процесс смог открыть /etc/shadow от имени root до понижения привилегий до нашего пользователя.
Этот FD открыт в режиме O_RDONLY, то есть только для чтения, однако, поскольку у нас есть CopyFail, это не имеет значения: мы можем повысить привилегии до записи. Мы можем просто передать FD в CopyFail и использовать эксплойт, как с любым другим читаемым файлом.
passwd.passwd, как только у вас появится известный пароль, исправляет это.