Исследователь Anthropic нашёл 23-летнюю уязвимость в ядре Linux с помощью Claude Code
Heap buffer overflow в NFS-драйвере скрывался 23 года. Простой скрипт с Claude Code нашёл его за часы — и ещё сотни потенциальных багов.
Новости TprogerHeap 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».
Флаг --dangerously-skip-permissions отключает запросы на подтверждение действий — иначе Claude Code будет спрашивать разрешение на каждое чтение файла, и автоматический перебор тысяч файлов станет невозможным. Результаты записываются в директорию /output, после чего человек проверяет находки вручную.
Уязвимость в NFS: 1056 байт в 112-байтный буфер
Самая показательная находка — баг в драйвере NFSv4 (протокол сетевой файловой системы версии 4). Уязвимость требует понимания протокола NFS на уровне взаимодействия нескольких клиентов — именно поэтому Carlini выбрал её для демонстрации. Фаззеры такие баги находят плохо: нужна не случайная мутация данных, а понимание логики протокола.
Атака использует два NFS-клиента, работающих в связке:
- Клиент A устанавливает соединение с NFS-сервером и захватывает блокировку файла с owner ID длиной 1024 байта — необычно длинное, но допустимое значение
- Клиент B подключается к тому же серверу и пытается захватить ту же блокировку
- Сервер отказывает клиенту B и формирует ответ с отказом. В ответ включается owner ID из шага 1 — все 1024 байта
- Проблема: буфер для ответа — всего 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, что я не успеваю их отправлять — потому что ещё не проверил. Я не буду слать мейнтейнерам потенциальный шлак. Но это значит, что у меня несколько сотен крашей, которые они ещё не видели, потому что у меня не хватает времени их проверить.
ИИ-модели уже могут массово находить уязвимости в зрелом коде. Но между «нашёл краш» и «подтвердил эксплуатируемую уязвимость» — ручная работа исследователя. Скорость обнаружения выросла на порядки, а скорость валидации осталась прежней. Carlini ожидает «огромную волну» обнаруженных уязвимостей в ближайшие месяцы — по мере того как исследователи и атакующие осознают возможности новых моделей.
Часто задаваемые вопросы
Какие версии Linux затронуты?
Уязвимость в NFS-драйвере присутствует во всех версиях ядра Linux начиная с сентября 2003 года, где включён NFSv4. Патч уже принят в основную ветку ядра.
Можно ли эксплуатировать баг удалённо?
Да. Атака работает по сети — достаточно двух NFS-клиентов, подключённых к уязвимому серверу. Аутентификация на уровне NFS не требуется для запуска атаки.
Claude Code находит баги лучше специализированных фаззеров?
Carlini не сравнивал напрямую, но отметил, что конкретно этот класс багов (логические ошибки в протоколах) фаззеры находят плохо — нужно понимание протокола, а не случайный ввод. ИИ-модели сильны именно в этом.
Как защититься?
Обновить ядро Linux до последней стабильной версии. Если вы используете NFS — проверить, что патч nfsd: fix heap overflow in NFSv4.0 LOCK replay cache применён.
Это касается только Linux?
Carlini исследовал только ядро Linux, но подход универсален. Любой крупный C/C++ проект с 20+ годами истории — потенциальная цель для аналогичного аудита с помощью ИИ.
Выводы
23-летний баг в ядре Linux, найденный за часы bash-скриптом — это сигнал о смене парадигмы в поиске уязвимостей. ИИ-модели достигли уровня, на котором они находят баги, недоступные десятилетиям ручного и автоматического аудита. Вопрос — кто найдёт их первым: исследователи или атакующие.
Если вы работаете с NFS — обновите ядро. Если поддерживаете C/C++ кодовую базу с долгой историей — попробуйте натравить на неё ИИ-аудит. Результаты могут удивить.
Источники: mtlynch.io | Nicholas Carlini