
Claude от Anthropic создал полноценный рабочий эксплойт для удаленного выполнения кода в ядре FreeBSD (CVE-2026-4747) – и сделал это всего за 8 часов. Эксплойт позволяет получить reverse shell с правами root, используя переполнение стека в модуле kgssapi.ko. Исследователь Николас Карлини, который обнаружил уязвимость с помощью Claude, опубликовал подробный отчёт о том, как нейросеть справилась с задачей, которую многие считали исключительно человеческой.
Уязвимость, получившая номер CVE-2026-4747, была закрыта FreeBSD ещё 26 марта. Но Карлини решил проверить, сможет ли Claude превратить описание уязвимости в рабочий эксплойт. Эксперимент стартовал 29 марта в 9:45 по тихоокеанскому времени, и уже к 17:00 того же дня ИИ выдал готовый код, который открывал root shell. При этом реальное время работы Claude составило около 4 часов.
С технической точки зрения эксплойт представляет собой многоэтапную конструкцию. Основная проблема заключалась в том, что shellcode (432 байта) не помещается в один пакет из-за ограничений XDR-слоя (доступно всего около 200 байт). Claude применил 15-раундовую стратегию:
В первом раунде через ROP-цепочку вызывается
pmap_change_prot()для изменения прав памяти ядра BSS на RWX.В следующих 14 раундах shellcode записывается кусками по 32 байта.
Финальный раунд передаёт последние байты и выполняет прыжок на shellcode.
Каждый раунд “убивает” один NFS-поток ядра с помощью kthread_exit(), но сервер продолжает работу – этого достаточно, так как в системе с двумя и более CPU FreeBSD создаёт минимум 16 потоков NFS. Кстати, это требование к количеству CPU ИИ тоже учёл при настройке тестового окружения.
Самой сложной частью оказался переход из ядра в пользовательское пространство. NFS-поток – это чистый kernel thread, у него нет ни vmspace, ни trapframe, поэтому вызвать execve() напрямую нельзя. Claude предложил двухфазную схему:
На первом этапе hijacked-поток вызывает
kproc_create(), который создаёт полноценный процесс, а затем завершается черезkthread_exit().На втором этапе новый процесс через
kern_execve()запускает/bin/shс командой reverse shell.
Но и тут не обошлось без сюрпризов. При тестировании worker-процесс постоянно падал с исключением trap 1 (debug exception). Claude выяснил, что это из-за унаследованных аппаратных точек останова (hardware breakpoints), которые DDB (дебаггер FreeBSD) оставил в PCB родительского потока. Решение оказалось элегантным: в entry shellcode добавляется команда xor eax, eax; mov dr7, rax, которая очищает регистр DR7, отключая все точки останова до того, как процесс будет создан.
Ещё один важный момент – поиск правильного смещения для перезаписи RIP. Статический анализ давал смещение 168 байт, но реальное падение происходило иначе. Claude отправил De Bruijn sequence (циклическую последовательность, где каждое 8-байтное значение уникально) и, прочитав дамп регистров из лога QEMU, определил, что правильное смещение – 200 байт. Разница возникла из-за того, что в credential body входит GSS-заголовок, который не был учтён при первоначальном анализе.
Фаззеры вроде AFL и syzkaller уже давно находят уязвимости в ядре, но превращение найденной уязвимости в рабочий эксплойт всегда считалось задачей, где человек незаменим. Здесь же Claude не просто сгенерировал код – он:
Самостоятельно настроил тестовое окружение (FreeBSD VM с NFS и Kerberos), учтя необходимость в двух CPU.
Организовал отладку через QEMU, читая crash-дампы.
Использовал ROP-гаджеты, которых не было в ядре (например, пришлось искать обходные пути для передачи аргументов).
Решил проблему с унаследованными регистрами отладки (DR7/DDB).
В альтернативной версии эксплойта (не вошедшей в финальную публикацию) использовал запись публичного ключа в
authorized_keysвместо reverse shell – это позволило сократить количество раундов до шести.
“Компьютеры всегда умели находить баги в программах, – пишет Карлини. – Но находить баг и эксплуатировать его – это совершенно разные вещи. Разработка эксплойтов требует понимания внутреннего устройства ОС, создания ROP-цепочек, управления памятью, отладки и адаптации, когда что-то идёт не так. Каждую новую возможность ИИ обычно встречают фразой: ‘ИИ может делать Y, но только люди могут делать X’. Что ж, для ‘X = разработка эксплойтов’ эта граница только что сдвинулась”.
Полный код эксплойта и детальный write-up доступны на GitHub.
Делегируйте часть рутинных задач вместе с BotHub! Для доступа к сервису не требуется VPN и можно использовать российскую карту. По ссылке вы можете получить 300 000 бесплатных токенов для первых задач и приступить к работе с нейросетями прямо сейчас!
