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 бесплатных токенов для первых задач и приступить к работе с нейросетями прямо сейчас!