Исследователь Anthropic нашёл 23-летнюю уязвимость в ядре Linux с помощью Claude Code

Heap buffer overflow в NFS-драйвере скрывался 23 года. Простой скрипт с Claude Code нашёл его за часы — и ещё сотни потенциальных багов.

Обложка: Исследователь Anthropic нашёл 23-летнюю уязвимость в ядре Linux с помощью Claude Code

Heap buffer overflow в NFS-драйвере ядра Linux скрывался с сентября 2003 года — 23 года. Исследователь Anthropic Nicholas Carlini нашёл его за часы с помощью Claude Code и bash-скрипта на 7 строк. Об этом он рассказал на конференции по безопасности ИИ [un]prompted 2026.

Ключевые выводы
  • Claude Code нашёл heap buffer overflow в NFS-драйвере Linux, скрытый с сентября 2003 года
  • Баг позволяет перезаписать память ядра по сети через два NFS-клиента, без аутентификации
  • Метод поиска — примитивный bash-скрипт: цикл по файлам ядра с промптом «найди уязвимость»
  • Старые модели (Opus 4.1, Sonnet 4.5) находили лишь малую часть; прорыв — на Opus 4.6
  • У Carlini сотни непроверенных находок — узкое место теперь не ИИ, а люди

Как Claude Code искал баги

Годами поиск уязвимостей в ядре Linux требовал написания специализированных фаззеров или ручного аудита. Carlini сделал иначе — написал bash-скрипт, который перебирает файлы исходного кода ядра и передаёт каждый в Claude Code с промптом: «Ты участвуешь в CTF (соревнование по безопасности). Найди уязвимость. Подсказка: смотри файл X».

			find . -type f -print0 | while IFS= read -r -d '' file; do
  claude \
    --dangerously-skip-permissions \
    --print "You are playing in a CTF. \
    Find a vulnerability. \
    hint: look at $file \
    Write the most serious \
    one to the /output dir"
done
		

Флаг --dangerously-skip-permissions отключает запросы на подтверждение действий — иначе Claude Code будет спрашивать разрешение на каждое чтение файла, и автоматический перебор тысяч файлов станет невозможным. Результаты записываются в директорию /output, после чего человек проверяет находки вручную.

Уязвимость в NFS: 1056 байт в 112-байтный буфер

Самая показательная находка — баг в драйвере NFSv4 (протокол сетевой файловой системы версии 4). Уязвимость требует понимания протокола NFS на уровне взаимодействия нескольких клиентов — именно поэтому Carlini выбрал её для демонстрации. Фаззеры такие баги находят плохо: нужна не случайная мутация данных, а понимание логики протокола.

Атака использует два NFS-клиента, работающих в связке:

  1. Клиент A устанавливает соединение с NFS-сервером и захватывает блокировку файла с owner ID длиной 1024 байта — необычно длинное, но допустимое значение
  2. Клиент B подключается к тому же серверу и пытается захватить ту же блокировку
  3. Сервер отказывает клиенту B и формирует ответ с отказом. В ответ включается owner ID из шага 1 — все 1024 байта
  4. Проблема: буфер для ответа — всего 112 байт (константа NFSD4_REPLAY_ISIZE). Итоговое сообщение — 1056 байт. Ядро записывает 1056 байт в 112-байтный буфер — перезаписывая соседние структуры в куче

Результат — атакующий перезаписывает память ядра байтами, которые он контролирует через поле owner ID. Это классический heap buffer overflow: перезапись соседних структур в куче может привести к выполнению произвольного кода с привилегиями ядра или к утечке данных из памяти ядра по сети.

23 года в коде

Баг появился в ядре Linux в сентябре 2003 года — в коммите, реализующем кеш повторов для NFSv4. Автор патча указал размер буфера в 112 байт как «достаточный для OPEN — крупнейшей из операций мутации». Но когда позже добавили поддержку LOCK с произвольной длиной owner ID, буфер не увеличили. Баг старше самого Git — система контроля версий появилась только в 2005 году.

Прорыв на Opus 4.6

Carlini пробовал воспроизвести результаты на более ранних моделях. Opus 4.1 (вышел восемь месяцев назад) и Sonnet 4.5 (шесть месяцев назад) находили значительно меньше уязвимостей. Качественный скачок произошёл на Opus 4.6, выпущенном около двух месяцев назад. На текущий момент Carlini подтвердил пять уязвимостей в ядре Linux — в подсистемах nfsd, io_uring, futex и ksmbd.

Узкое место — не ИИ, а люди

У меня столько багов в ядре Linux, что я не успеваю их отправлять — потому что ещё не проверил. Я не буду слать мейнтейнерам потенциальный шлак. Но это значит, что у меня несколько сотен крашей, которые они ещё не видели, потому что у меня не хватает времени их проверить.
Nicholas CarliniResearch Scientist, Anthropic

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

Часто задаваемые вопросы
1
Какие версии Linux затронуты?

Уязвимость в NFS-драйвере присутствует во всех версиях ядра Linux начиная с сентября 2003 года, где включён NFSv4. Патч уже принят в основную ветку ядра.

2
Можно ли эксплуатировать баг удалённо?

Да. Атака работает по сети — достаточно двух NFS-клиентов, подключённых к уязвимому серверу. Аутентификация на уровне NFS не требуется для запуска атаки.

3
Claude Code находит баги лучше специализированных фаззеров?

Carlini не сравнивал напрямую, но отметил, что конкретно этот класс багов (логические ошибки в протоколах) фаззеры находят плохо — нужно понимание протокола, а не случайный ввод. ИИ-модели сильны именно в этом.

4
Как защититься?

Обновить ядро Linux до последней стабильной версии. Если вы используете NFS — проверить, что патч nfsd: fix heap overflow in NFSv4.0 LOCK replay cache применён.

5
Это касается только Linux?

Carlini исследовал только ядро Linux, но подход универсален. Любой крупный C/C++ проект с 20+ годами истории — потенциальная цель для аналогичного аудита с помощью ИИ.

Выводы

23-летний баг в ядре Linux, найденный за часы bash-скриптом — это сигнал о смене парадигмы в поиске уязвимостей. ИИ-модели достигли уровня, на котором они находят баги, недоступные десятилетиям ручного и автоматического аудита. Вопрос — кто найдёт их первым: исследователи или атакующие.

Если вы работаете с NFS — обновите ядро. Если поддерживаете C/C++ кодовую базу с долгой историей — попробуйте натравить на неё ИИ-аудит. Результаты могут удивить.

Источники: mtlynch.io | Nicholas Carlini