Claude Code нашёл в ядре Linux уязвимость, скрывавшуюся 23 года

2026-04-04 373 комментарии
Исследователь Anthropic обнаружил с помощью Claude Code переполнение буфера кучи в драйвере NFSv4.0 ядра Linux. Баг позволял по сети читать память ядра и существовал с 2003 года

В ядре Linux 23 года скрывалась уязвимость — переполнение буфера кучи (heap buffer overflow) в драйвере сетевой файловой системы NFSv4.0. Нашёл её не человек, а ИИ-инструмент Claude Code с минимальным участием оператора. Об этом рассказал исследователь Anthropic Николас Карлини (Nicholas Carlini) на конференции по ИИ-безопасности [un]prompted.

comss img 2026 04 04 140955

Баг попал в код ядра ещё в 2003 году — до появления git. Через него атакующий может по сети читать содержимое памяти ядра. Всего Карлини обнаружил и передал разработчикам ядра пять уязвимостей, а сотни потенциальных багов ждут ручной проверки.

Как работал поиск

Карлини не писал сложных сканеров. Он запустил простой bash-скрипт, который перебирает файлы в дереве исходного кода ядра и на каждой итерации просит Claude Code найти уязвимость в конкретном файле:

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

В промпте модели сообщается, что пользователь участвует в соревновании capture the flag по кибербезопасности. Цикл по файлам не даёт модели находить одну и ту же ошибку повторно — на каждом шаге Claude Code сосредоточен на новом участке кода.

Claude Code — инструмент командной строки от Anthropic. Позволяет делегировать языковой модели задачи по анализу, написанию и отладке кода прямо из терминала.

Что не так с NFS-драйвером

Для доклада Карлини выбрал уязвимость в драйвере сетевой файловой системы (NFS) — не простой типовой баг, а ошибку, для обнаружения которой нужно понимать логику протокола NFSv4.

Атака требует двух NFS-клиентов, действующих совместно. Клиент A подключается к серверу, открывает файл и захватывает блокировку (LOCK) с идентификатором владельца длиной 1024 байта. Значение необычно большое, но по протоколу допустимо.

Клиент B подключается к тому же серверу, открывает тот же файл и тоже запрашивает блокировку. Сервер отказывает — блокировку уже держит клиент A. При формировании ответа об отказе ядро пишет данные в буфер размером 112 байт. Но ответ включает идентификатор владельца (до 1024 байт), и общий размер сообщения достигает 1056 байт. Итог: 1056 байт записываются в 112-байтный буфер, а атакующий контролирует содержимое через поле идентификатора из шага с клиентом A.

NFS (Network File System) — сетевая файловая система, разработанная Sun Microsystems в 1984 году. Позволяет работать с файлами на сервере так же, как с локальными. Широко применяется в Linux-инфраструктуре.

Переполнение буфера кучи (heap buffer overflow) — уязвимость, при которой программа записывает в динамически выделенную область памяти больше данных, чем вмещает буфер. Перезаписанные соседние структуры ядра могут дать атакующему контроль над выполнением кода.

Почему баг прожил 23 года

Ошибка появилась в сентябре 2003 года. Автор коммита реализовал идемпотентный кеш повтора для состояний NFSv4 OPEN и задал размер статического буфера в 112 байт (константа NFSD4_REPLAY_ISIZE). Этого хватало для операции OPEN — самой крупной на тот момент. Когда позже добавили операцию LOCK с переменной длиной владельца, размер буфера никто не пересмотрел.

Коммит старше самого git: система контроля версий Линуса Торвальдса появилась только в 2005 году, поэтому прямая ссылка на изменение невозможна. ASCII-диаграммы протокола взаимодействия клиентов с сервером, кстати, Claude Code сгенерировал сам — как часть отчёта об ошибке.

У нас теперь есть несколько переполнений буфера кучи в ядре Linux, эксплуатируемых по сети. Я никогда в жизни не находил ни одного такого. Это очень, очень, очень сложная задача. А с языковыми моделями у меня их набралось несколько.

— Николас Карлини, [un]prompted 2026

Пять исправленных уязвимостей

Автор оригинальной статьи Майкл Линч (Michael Lynch) изучил репозиторий ядра Linux и нашёл пять уязвимостей, которые Карлини исправил или передал разработчикам ядра (часть — буквально на прошлой неделе):

Помимо этих пяти, у Карлини накопились сотни потенциальных багов, до которых не дошли руки. Узкое место — ручная валидация: исследователь принципиально не отправляет непроверенные отчёты.

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

— Николас Карлини, [un]prompted 2026

Модели становятся сильнее


comss img 2026 04 04 140401

Все найденные уязвимости — результат работы Claude Opus 4.6, которую Anthropic выпустила менее двух месяцев назад. Карлини попробовал повторить поиск на предыдущих моделях: Opus 4.1 (вышла восемь месяцев назад) и Sonnet 4.5 (шесть месяцев назад) нашли лишь малую часть того, что обнаружила Opus 4.6.

Заключение

Переполнение буфера в кеше повтора NFSv4.0 — ошибка, которая 23 года пряталась в одной из самых тщательно проверяемых кодовых баз в мире. Её обнаружение языковой моделью с помощью тривиального скрипта ставит практический вопрос: те же инструменты доступны и атакующим. Карлини ожидает волну обнаруженных уязвимостей в ближайшие месяцы — по мере того как и исследователи, и злоумышленники освоят возможности новых моделей.

© .
Комментарии и отзывы

Нашли ошибку?

Новое на сайте