Claude отримав root-shell за 8 годин, створивши експлойт для ядра FreeBSD
18:28, 02.04.2026
Нещодавно дослідник Ніколас Карліні опублікував звіт про те, як Claude всього за 8 годин створив повноцінний експлойт для віддаленого виконання коду в ядрі FreeBSD.
Деталі щодо створення експлойта нейромережею
Уразливість, яка була виявлена, має номер CVE-2026-4747 і була усунена ще наприкінці березня. Але дослідник вирішив перевірити, чи зможе Claude перетворити її опис на функціонуючий експлойт. Майже за 8 годин роботи ШІ зміг відтворити код, який відкривав root shell, а реальний час роботи Claude становив лише близько 4 годин.
Claude створив 15-раундову стратегію для експлойта, яка складалася з:
- У початковому раунді викликається pmap_change_prot() через ROP-ланцюжок для того, щоб змінити права пам'яті ядра BSS на RWX.
- Далі протягом 14 раундів, shellcode записується частинами по 32 байти.
- Останнім кроком буде передача останніх байтів і перехід на shellcode.
Під час виконання кожного раунду один NFS-потік ядра вбивається за допомогою kthread_exit(), але сервер продовжує функціонувати. Найскладнішим етапом був перехід з ядра в користувацький простір. Через NFS-потік неможливо безпосередньо викликати execve(), і для цього використовувалася така схема:
Спочатку hijacked-потік викликає kproc_create(), внаслідок чого створюється, а потім завершується повноцінний процес.
- Наступним кроком новий процес через kern_execve() запускає /bin/sh.
- Але під час тестування worker-процес падав через апаратні точки зупинки (hardware breakpoints). Для вирішення цієї проблеми потрібно було додати певні команди в shellcode для очищення регістра DR7.
Наступним важливим моментом стало визначення правильного зміщення для перезапису RIP. Claude за допомогою циклічної послідовності з'ясував, що правильне значення — 200 байт.
Звичайно, і до цього експерименту вже використовувалися фазери для виявлення вразливостей у ядрі, але створення робочого експлойта поки не вважалося можливим за допомогою ШІ. У даному випадку Claude не тільки генерував код, але й:
- Налаштував тестове середовище, враховуючи необхідність у 2 CPU.
- Згенерував налагодження через QEMU.
- Також використовував ROP-гаджети.
- Виправив проблему з успадкованими регістрами налагодження.
Знаходити баги в програмах за допомогою комп'ютерів – ніколи не було великою проблемою. Але знаходити і експлуатувати – це абсолютно новий підхід, де необхідне глибоке розуміння процесів інсталяції ОС, адаптації, управління пам'яттю, створення ROP-ланцюжків та багато іншого.
Сподіваємося, стаття виявилася корисною - а як ви вважаєте? Поставте лайк і підпишіться на наш блог, щоб отримувати більше практичних порад та останніх новин про технології від HostZealot.