## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-CYBER-JOKER-COPY-FAIL-PYTHON
# copyfail_su.py
Python-порт badsectorlabs/copyfail-go (CVE-2026-31431). Только для Linux; требуется Python 3.10+ (`os.splice`).
## Как это получает root (важно)
Этот инструмент **не** использует трюк с page-cache для `/etc/passwd`.
* Он перезаписывает **page cache setuid-бинарника`su`** встроенным шеллкодом (те же payload'ы, что и в Go `main.go`), а затем **выполняет`su`**.
* Повышение привилегий происходит за счёт запуска **повреждённого кэшированного образа** `su` как setuid-root программы, а не за счёт того, чтобы заставить `getpwnam()` думать, что ваш UID равен `0` через `/etc/passwd`.
Другие публичные Python-PoC для той же CVE могут патчить **`/etc/passwd`** в page cache и затем предлагать вам выполнить `su <user>`. Это **другой целевой файл и другой последующий шаг** , чем в этом скрипте.
## Использование
Только для авторизованного тестирования — используйте только на хостах, которыми вы владеете или на проверку которых у вас есть явное разрешение.
root@kitploit:~
chmod +x copyfail_su.py
# Поток в интерактивном стиле (та же идея, что и copyfail-go без --exec)
./copyfail_su.py --backup /tmp/su.bak
# Запуск другой программы с повышенными привилегиями (передаёт путь как argv для su; использует payload exec-argv1)
./copyfail_su.py --backup /tmp/su.bak --exec /full/path/to/binary
После успешного запуска восстановите настоящий `su`.
## Восстановление без `--backup`
PoC повреждает **page cache** для `/usr/bin/su`. Не считайте файл на диске надёжным, пока не проверите его или не переустановите.
1. **Переустановите пакет, которому принадлежит`/usr/bin/su`** (сначала найдите его, затем переустановите):
* **Семейство RPM:** `rpm -qf /usr/bin/su`, затем `sudo dnf reinstall shadow-utils` (используйте имя пакета из вывода).
* **Debian/Ubuntu:** `dpkg -S /usr/bin/su`, затем `sudo apt install --reinstall <package>`.
2. **Проверка:** `sudo rpm -V <package>` на предмет неожиданных изменений в `/usr/bin/su`, или `debsums` в системах на базе Debian.
3. **Необязательно:** перезагрузка после переустановки, чтобы избежать предположений об устаревшем кэше.
4. **Если вы не можете переустановить от root:** загрузка в режиме восстановления, Live USB или замена `/usr/bin/su` из заведомо рабочего образа того же дистрибутива/версии/архитектуры; убедитесь, что владелец **`root:root`** и режим ().
## Ссылки
* copyfail-go
* copy.fail