ИИ написал полный эксплоит для ядра FreeBSD — от уязвимости до root-шелла за 4 часа

Исследователи из Calif и Anthropic показали, как Claude за 4 часа разработал два рабочих remote kernel RCE для FreeBSD (CVE-2026-4747). ИИ решил 6 нетривиальных задач — от отладки стека до перехода из ядра в userland. Оба эксплоита дали root с первой попытки.

Обложка: ИИ написал полный эксплоит для ядра FreeBSD — от уязвимости до root-шелла за 4 часа

Фаззеры находят баги в ядрах операционных систем уже больше десяти лет. Но написать полноценный эксплоит, который превращает крэш в удалённый root-шелл, — это всегда считалось задачей исключительно для людей. Теперь эта граница сдвинулась.

Команда безопасности Calif опубликовала разбор того, как Claude (Anthropic) за ~4 часа написал два рабочих эксплоита для CVE-2026-4747 — уязвимости переполнения стека в модуле ядра FreeBSD. Оба эксплоита сработали с первой попытки и дали полный root-доступ к удалённой машине.

Саму уязвимость тоже обнаружил ИИ: в официальном бюллетене FreeBSD указан «Nicholas Carlini using Claude, Anthropic». При этом человек направлял процесс через 44 промпта, но большую часть технической работы — от анализа крэш-дампов до написания ROP-цепочек — Claude выполнял самостоятельно.

Ключевые выводы

— Claude написал полный remote kernel RCE для FreeBSD (CVE-2026-4747) за ~4 часа при минимальном участии человека (44 промпта)

— Уязвимость — переполнение стека в kgssapi.ko (модуль Kerberos-аутентификации для NFS), оценка CVSS 8,8 (HIGH)

— ИИ самостоятельно решил 6 нетривиальных задач: от настройки тестовой среды до перехода из режима ядра в пользовательский

— Оба эксплоита сработали с первой попытки, результат — uid=0 (root)

— FreeBSD уже выпустил патч 26 марта 2026 года (FreeBSD-SA-26:08)

Уязвимость CVE-2026-4747 в ядре FreeBSD

CVE-2026-4747 — переполнение стека (CWE-121) в модуле ядра kgssapi.ko (реализует RPCSEC_GSS — механизм аутентификации NFS-клиентов через Kerberos). Функция gss_validate() копирует данные из входящего сетевого пакета в стековый буфер без проверки границ.

Переполнение буфера происходит до проверки учётных данных NFS-клиента — но для полноценной атаки нужен сетевой доступ к NFS-серверу. Это отражено в оценке CVSS 8,8 (HIGH) по данным NVD: вектор атаки сетевой, сложность низкая, требуются минимальные привилегии (PR:L).

Дополнительный фактор: конкретная функция в kgssapi.ko скомпилирована так, что стековые канарейки (stack canaries — специальные значения для детекции переполнения) не защищают целочисленный буфер в данном случае. Переполнение остаётся незамеченным. Затронуты все версии FreeBSD, патчи доступны для stable/15, stable/14 и stable/13.

Кто стоит за исследованием

Публикация — совместная работа Calif (калифорнийская компания по безопасности, основанная Thai Duong — соавтором атак BEAST и CRIME на TLS) и Nicholas Carlini из Anthropic (PhD UC Berkeley, лауреат best paper на IEEE S&P, USENIX Security и ICML). Уязвимость обнаружил Carlini с помощью Claude, а команда Calif разработала эксплоит тоже с помощью Claude.

Как Claude написал эксплоит: 6 задач за 4 часа

Команда Calif дала Claude доступ к оболочке, отладчику GDB, утилите ROPgadget (поиск «гаджетов» — коротких фрагментов кода в ядре, которые можно использовать для построения цепочки команд) и эмулятору QEMU. Задача: разработать рабочий эксплоит для CVE-2026-4747. За ~4 часа машинного времени Claude решил 6 нетривиальных задач.

1. Настройка тестовой среды

Claude развернул виртуальную машину FreeBSD с NFS, Kerberos и уязвимым модулем ядра. Модель учла, что VM нужно минимум 2 процессора — FreeBSD создаёт 8 NFS-потоков на каждый CPU.

2. Многопакетная доставка шеллкода

Шеллкод (432 байта) не помещается в один сетевой пакет. Claude разработал стратегию из 15 раундов:

  1. Первый раунд: сделать область памяти ядра исполняемой через pmap_change_prot
  2. 14 следующих раундов: записать шеллкод порциями по несколько десятков байт за пакет
  3. Последний пакет запускает записанный шеллкод

3. Чистый выход из потока

Каждое переполнение захватывает один NFS-поток ядра. Claude использовал kthread_exit() для корректного завершения каждого захваченного потока — чтобы сервер оставался работоспособным для следующего раунда.

4. Отладка смещений стека

Начальные смещения из дизассемблера оказались неверными. Claude отправил De Bruijn-паттерны — специальные последовательности, в которых каждая подстрока уникальна, что позволяет по крэш-дампу точно определить, какой байт попал на адрес возврата. Классический приём пентестеров, который Claude применил без подсказки.

5. Переход из ядра в пользовательский режим

NFS-потоки работают в режиме ядра и не могут напрямую запускать пользовательские программы. Claude нашёл решение через цепочку вызовов ядра FreeBSD:

  1. Создать новый процесс через kproc_create()
  2. Заменить его на /bin/sh через kern_execve()
  3. Сбросить внутренний флаг ядра, помечающий процесс как системный, чтобы он мог выполнять пользовательский код

6. Баг аппаратных точек останова

Дочерний процесс падал с debug exception. Claude отследил проблему: регистр DR7 (управляет аппаратными точками останова на x86) содержал устаревшие значения от отладчика DDB. Решение — очистить DR7 перед форком.

Второй эксплоит — альтернативная стратегия

Claude написал и второй эксплоит, использующий принципиально другой подход. Вместо запуска реверс-шелла (что требует многоэтапной доставки шеллкода и сложного перехода в пользовательский режим) — запись публичного SSH-ключа в .ssh/authorized_keys на сервере. Это проще: нужно записать всего ~400 байт текста в файл, без перехода из ядра в userland. Результат: 6 раундов вместо 15. Оба эксплоита дали полный root-доступ:

			uid=0(root) gid=0(wheel) groups=0(wheel)
		

Почему это важно для индустрии

Компьютеры всегда умели находить баги. Фаззеры вроде AFL и syzkaller обнаруживают уязвимости в ядрах уже больше десяти лет. Но найти баг и написать эксплоит — совершенно разные вещи. Разработка эксплоитов требует понимания внутренностей ОС, создания ROP-цепочек, управления расположением памяти, отладки крэшей и адаптации, когда что-то идёт не так. Это долго считалось рубежом, который могут пересечь только люди.
Thai DuongОснователь Calif, соавтор атак BEAST и CRIME

Ключевое отличие от прошлых демонстраций ИИ в безопасности: Claude не просто сгенерировал код по шаблону. Модель адаптировалась к неожиданным проблемам в реальном времени — исправляла смещения стека через отладочные паттерны, находила баг с аппаратными регистрами, придумала нетривиальный переход из ядра в пользовательский режим. Каждая из этих задач раньше требовала многолетнего опыта в exploit development.

Для защитников это сигнал: окно между раскрытием уязвимости и появлением рабочего эксплоита сжимается с недель до часов. Недавний взлом Axios на npm показал, как быстро атакующие эксплуатируют цепочку поставок. Теперь ИИ может ускорить и разработку эксплоитов для ядер ОС.

Полный лог из 44 промптов и код обоих эксплоитов опубликованы в репозитории califio/publications на GitHub.

MAD Bugs — что дальше

Calif объявил проект MAD Bugs: Month of AI-Discovered Bugs — до конца апреля 2026 года команда планирует опубликовать ещё несколько уязвимостей и эксплоитов, обнаруженных с помощью ИИ. Все находки проходят через ответственное раскрытие — CVE-2026-4747 был запатчен за 5 дней до публикации эксплоита.

Что делать администраторам FreeBSD

Если вы администрируете FreeBSD-серверы с NFS — обновитесь до последних патчей. Проверить, загружен ли уязвимый модуль:

			kldstat | grep kgssapi
		

Если модуль не используется — можно выгрузить его до обновления:

			kldunload kgssapi
		

Подробности — в бюллетене FreeBSD-SA-26:08.

Частые вопросы
1
Что за уязвимость CVE-2026-4747?

Переполнение стека в модуле ядра FreeBSD kgssapi.ko, который реализует Kerberos-аутентификацию для NFS. Позволяет удалённо выполнить произвольный код в ядре при наличии сетевого доступа к NFS-серверу. Оценка CVSS 8,8 (HIGH). Затронуты все версии FreeBSD, патч доступен с 26 марта 2026 года.

2
Какая модель ИИ написала эксплоит?

Claude от Anthropic — в агентном режиме с доступом к терминалу, GDB, ROPgadget и QEMU. Человек направлял процесс через 44 промпта, но основную техническую работу — от анализа крэш-дампов до написания шеллкода — Claude выполнял самостоятельно.

3
Уязвимость уже исправлена?

Да. FreeBSD выпустил патч 26 марта 2026 года — за 5 дней до публикации эксплоита. Бюллетень: FreeBSD-SA-26:08. Обновления доступны для веток stable/15, stable/14 и stable/13.

4
Чем этот случай отличается от прошлых демонстраций ИИ в безопасности?

Claude не просто нашёл баг или сгенерировал шаблонный код. Он разработал полную цепочку эксплуатации: от переполнения стека до root-шелла, решая неожиданные технические проблемы в процессе — отладку смещений, переход из режима ядра в пользовательский, обход аппаратных багов. Раньше это требовало недель работы опытного специалиста.

5
Что такое MAD Bugs?

Month of AI-Discovered Bugs — проект компании Calif, в рамках которого до конца апреля 2026 года публикуют уязвимости и эксплоиты, обнаруженные с помощью ИИ. Все находки проходят ответственное раскрытие — патчи выходят до публикации деталей.

Если вы работаете с безопасностью — следите за проектом MAD Bugs: граница между возможностями ИИ и задачами для людей продолжает сдвигаться.