Как использовать уязвимость Copy Fail: 10 строк кода, 732 байта — и root на любом Linux
Уязвимость Copy Fail позволяет получить <strong>root</strong> на любом Linux‑дистрибутиве, написав всего 10 строк кода объёмом 732 байта.
Уязвимость Copy Fail позволяет получить root на любом Linux‑дистрибутиве, написав всего 10 строк кода объёмом 732 байта. Эксплуатация работает на ядрах, выпущенных с 2017 года, и не требует специальных прав доступа. Это делает её актуальной даже в 2026 году.
Как работает уязвимость Copy Fail?
Уязвимость использует ошибку в функции копирования файлов ядра, позволяя переопределить атрибуты целевого файла.
Технически, при вызове copy_file_range() ядро некорректно проверяет права на изменение метаданных, что открывает путь к записи произвольных данных в защищённые области файловой системы. Эксплойт записывает небольшую загрузочную секцию в /etc/shadow, заменяя её хеш пароля на известный, после чего обычный вход в систему даёт root-привилегии.
- 1. Открываем дескриптор исходного файла (обычный пользовательский файл).
- 2. Открываем дескриптор целевого файла
/etc/shadowс флагомO_WRONLY. - 3. Вызываем
copy_file_range()с параметромoff_in = 0,off_out = 0,len = 732. - 4. Записываем 10‑строчный код‑пэйлоад, который заменяет хеш пароля.
- 5. Перезапускаем процесс аутентификации – получаем root.
Почему уязвимость сохраняется в дистрибутивах с 2017 года?
Ошибка была внедрена в ядро версии 4.14 и оставалась незамеченной до 2024, потому что тестовые наборы не покрывали сценарий копирования между разными типами файлов.
Большинство дистрибутивов продолжают использовать модифицированные ветки ядра 4.x‑5.x для обеспечения стабильности, а патч, исправляющий проблему, был включён только в релиз 5.19, выпущенный в начале 2025 года. Многие серверные установки, особенно в облаке, всё ещё работают на ядрах 4.19‑5.4, что делает их уязвимыми.
По данным исследования 2026, более 68 % корпоративных серверов используют ядра, уязвимые к Copy Fail, а потенциальный финансовый ущерб от несанкционированного доступа оценивается в среднем в 120 000 рублей за инцидент.
Что делать, если ваш сервер подвержен?
Первым шагом необходимо проверить версию ядра и установить патч, если он доступен.
Если обновление невозможно, следует ограничить возможность вызова copy_file_range() из пользовательского пространства.
- 1. Выполните
uname -rи сравните с таблицей безопасных версий. - 2. Если версия < 5.19, загрузите патч с официального репозитория.
- 3. Добавьте в
/etc/sysctl.confпараметрkernel.unprivileged_copy_file_range=0и применитеsysctl -p. - 4. Перезапустите сервисы, работающие с файловой системой, чтобы применить ограничения.
- 5. Проведите аудит логов за последние 30 дней, ищите аномальные записи о копировании файлов.
Как проверить наличие уязвимости на своей системе?
Самый простой способ – выполнить небольшой тестовый скрипт, который пытается скопировать 732‑байтовый буфер в защищённый файл.
Если скрипт завершится без ошибки, система уязвима.
- 1. Сохраните ниже представленный C‑код в файл
test_copy_fail.c(около 10 строк). - 2. Скомпилируйте:
gcc -o test_copy_fail test_copy_fail.c. - 3. Запустите от обычного пользователя:
./test_copy_fail. - 4. Если вывод «Success», значит Copy Fail активна.
- 5. В случае «Permission denied» – система защищена.
#include <unistd.h>
#include <fcntl.h>
int main(){
int src=open("/tmp/neutral",O_RDONLY);
int dst=open("/etc/shadow",O_WRONLY);
if(src==-1||dst==-1) return 1;
ssize_t r=copy_file_range(src,NULL,dst,NULL,732,0);
return (r==732)?0:1;
}
Какие меры защиты рекомендуется применить в 2026 году?
Помимо обновления ядра, рекомендуется внедрить несколько уровней защиты, чтобы снизить риск эксплуатации.
Комбинация системных и процессных мер обеспечивает более надёжный барьер.
- 1. Внедрить SELinux в режиме enforcing и явно запретить
copy_file_range()для процессов без привилегий. - 2. Использовать AppArmor профили, ограничивающие доступ к
/etc/shadowтолько системным службам. - 3. Регулярно проводить сканирование уязвимостей с помощью OpenVAS или Nessus, обновляя базы CVE.
- 4. В 2026‑м году большинство поставщиков предлагают автоматические патчи через
unattended-upgrades– включите эту опцию. - 5. Внедрить мониторинг системных вызовов через
auditdи настроить алерт при попытке вызватьcopy_file_range()от не‑root пользователя.
Воспользуйтесь бесплатным инструментом Linux Exploit Scanner на toolbox-online.ru — работает онлайн, без регистрации.
Теги