Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
linux-kernel-codex-harness-v2 — Инструмент исследования уязвимостей ядра Linux с учётом происхождения данных, использованный при расследовании CVE-2026-53075 | Kitploit
Инструменты/GitHubGitHub/foxirain/linux-kernel-codex-harness-v2
Статический анализАнализ уязвимостейРазведка угрозБезопасность ИИ
GitHubfoxirain/linux-kernel-codex-harness-v2

linux-kernel-codex-harness-v2

Инструмент исследования уязвимостей ядра Linux с учётом происхождения данных, использованный при расследовании CVE-2026-53075

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
123 дней назадЕщё не проверено
Поделиться

Kernel Codex Harness v2

한국어 | English

CI

Исследовательский инструмент · Первичный импорт: 3 апреля 2026 г. · Редакция документации v2: 11 июля 2026 г.

Внешний сигнал: от распределения внимания к триажу с учётом происхождения
Используйте воспроизводимые наблюдения для направления внимания модели, затем используйте происхождение репозитория для организации очередей проверки — но никогда для доказательства.

Происхождение проекта — Kernel Codex Harness v1 · Распределение внимания → Kernel Codex Harness v2 · Триаж с учётом происхождения

Статус проекта. Этот репозиторий представляет собой исследовательский харнес с поддержкой LLM, который развивает workflow распределения внимания из v1 до триажа с учётом происхождения для реального исследования уязвимостей ядра Linux. Эта версия использовалась для обнаружения уязвимости, опубликованной как CVE-2026-53075. Это не автоматический детектор уязвимостей, не оценщик новизны, не валидатор эксплойтов и не инструмент гарантии безопасности ядра; окончательная проверка и отчётность выполняются человеком.

Abstract

Аннотация — Если позволить LLM напрямую исследовать такую большую кодовую базу, как ядро Linux, контекст распыляется, а наличие опасных API легко спутать с реальной эксплуатируемостью. Kernel Codex Harness v2 определяет эту проблему как обработку двухэтапного внешнего сигнала. До вызова модели весовые коэффициенты путей, лексические совпадения и кэшированное пересечение с syzbot ранжируют файлы-кандидаты для распределения внимания. После ответа модели Git-ветка, HEAD, состояние dirty и извлечённые из ответа CVE, commit и известные маркеры объединяются для классификации сильных находок в корзины проверки с учётом происхождения. Этот харнес использовался в реальном исследовании ядра Linux и обнаружил дефект проверки прав доступа к целевому сетевому пространству имён PPP, который был опубликован как CVE-2026-53075. Триаж — это эвристика для упорядочивания очереди исследования; в частности, new_candidate означает лишь то, что не было обнаружено известных подсказок или проблем с происхождением, а не доказательство новизны. Все находки требуют повторной проверки человеком на достижимость из userspace, нарушение инвариантов и конкретное воздействие.

Ключевые термины — ядро Linux, исследование уязвимостей, внешний сигнал, происхождение, эвристический триаж, оркестрация LLM, syzbot, Codex.

I. Введение

При проверке безопасности ядра существует два различных типа неопределённости.

  1. С чего начать. Всё дерево исходников слишком велико для одного контекста модели.
  2. Как обрабатывать сильные находки модели. Локальные модификации, существующие исправления, известные CVE или неполное состояние репозитория могут исказить выводы.

Центральной проблемой v1 была первая — распределение внимания. v2 сохраняет этот принцип и расширяет его до триажа с учётом происхождения для второй проблемы. Обе версии использовались в реальных исследованиях: исследование с поддержкой v1 привело к CVE-2026-31720, а исследование с поддержкой v2 — к CVE-2026-53075.

Наблюдения вне модели сужают область исследования, а после ответа модели добавляется проверяемое происхождение репозитория. Ни один из сигналов на любом этапе не доказывает уязвимость или новизну.

II. Внешний сигнал и принципы проектирования

A. Этап 1 — Распределение внимания до вывода

Внешний сигнал до вывода — это не суждение LLM, а наблюдения, вычисляемые до запуска модели.

  • Весовые коэффициенты путей и подсистем ядра
  • Лексические совпадения: usercopy, allocator, refcount, size, lock и т. д.
  • Пересечение file/subsystem с сохранённым JSON syzbot

При использовании одного и того же дерева исходников, профиля и кэшированного JSON syzbot ранжирование кандидатов можно пересчитать. Эта оценка — не вероятность и не эксплуатируемость, а относительный порядок того, что смотреть первым.

B. Этап 2 — Триаж с учётом происхождения после вывода

Пост-выводный этап объединяет сильный вердикт модели со следующей информацией.

  • Является ли каталог Git-репозиторием и успешно ли собрано состояние
  • Ветка и HEAD
  • Состояние dirty репозитория и целевого файла
  • CVE, хэши commit и маркеры известных проблем, извлечённые из ответа
  • Выражения отрицания или ссылки на несвязанные темы в ответе

В этом документе пост-выводный внешний сигнал относится только к происхождению, собранному независимо от модели: Git-репозиторий/состояние, ветка, HEAD, состояние dirty, локальная родословная commit. CVE, commit и известные маркеры — это ссылки, полученные из модели, извлечённые из ответа модели, а не внешний сигнал или авторитетный факт. Триаж объединяет оба типа входных данных, но фиксирует их источники раздельно.

C. Эвристические корзины, а не доказательство новизны

Сильные находки операционно распределяются по следующим корзинам проверки.

КорзинаЗначение
new_candidateКандидат с подтверждённым происхождением и без обнаруженных dirty/известных блокирующих сигналов
known_issueКандидат с неотрицаемой известной ссылкой или подтверждённым commit, который ответ относит к fix/upstream и который присутствует в текущем HEAD
dirty_tree_suspectКандидат, на который нельзя исключить влияние dirty репозитория или dirty цели
provenance_unknownКандидат, для которого не удалось надёжно подтвердить Git-репозиторий, состояние или HEAD

Для всех результатов классификации novelty_proven равно false. new_candidate означает не «новая уязвимость», а очередь для приоритетного продолжения исследования новизны человеком.

D. Достижимость до класса ошибки

Аудит сначала проверяет границы, начинающиеся из userspace: syscall, ioctl, netlink, procfs, файловые системы, BPF, хуки драйверов. Только после этого оцениваются классы ошибок: UAF, OOB, refcount, race, info leak, проверка capability.

E. Одна ветвь исследования за раз

Одна единица исследования ограничена одним файлом и близкими путями caller, teardown и free. Ручные follow-up, предлагаемые моделью, ограничены максимум двумя, чтобы сохранять проверяемые короткие пути вместо широкого исследования.

F. Доказательства важнее уверенности

Сильная находка должна как минимум описывать следующее.

  1. точку входа, достижимую атакующим,
  2. поле, контролируемое атакующим, или переход времени жизни,
  3. нарушаемый инвариант объекта, длины или состояния,
  4. конкретное воздействие: порча, утечка, повышение привилегий и т. д.,
  5. почему существующая проверка не предотвращает атаку.

Парсер нормализует вердикт и следующую цель, но не доказывает автоматически полноту этих доказательств.

G. Происхождение дизайна

Первоначальный поток основан на идеях пофайлового анализа, ограниченного расширения контекста и структурированных результатов, использованных в vulnhuntr от Protect AI [1]. В этом проекте они переработаны под достижимую из userspace поверхность ядра, время жизни объектов ядра, пути teardown и пересечение с syzbot. Дополнительный вклад v2 — этап триажа находок с использованием происхождения репозитория после распределения внимания.

III. Архитектура системы

Двухэтапная архитектура внешнего сигнала для Kernel Codex Harness v2

Рис. 1. Внешний сигнал до вывода ранжирует воспроизводимые единицы проверки. Пост-выводный триаж объединяет независимое от модели происхождение Git со ссылками из ответа модели, не рассматривая последние как внешний сигнал или авторитетный факт. Проверка человеком остаётся вне обоих автоматизированных этапов.

ТАБЛИЦА I — ОТВЕТСТВЕННОСТЬ ОСНОВНЫХ МОДУЛЕЙ

МодульОтветственность
targeting.pyОбход файлов ядра и оценка сигналов path, lexical и syzbot
models.pyCandidate, Signal, производный от syzbot ExternalSignal
bundle.pyСоздание manifest, индекса сессии, пакета prompt/snippet
prompting.pyПромпты аудита ядра с фокусом на достижимость и инварианты
session.pyСостояние ожидающих проверок, истории и глубины follow-up
ingest.pyНормализация строгого вердикта и единственной следующей цели
repo_state.pyСбор ветки Git, HEAD, состояния, dirty-путей и родословной
finding_triage.pyЭвристическая классификация по корзинам на основе происхождения и известных ссылок
autopilot.pyВыполнение Codex с бюджетом времени, ingest, архивирование, запись находок
syzbot.pyСбор публичного HTML syzbot и создание локального JSON-кэша
cli.pyСвязывание команд scan/review/doctor/autopilot

IV. Методология

A. Обнаружение и оценка кандидатов

Сканер обходит файлы .c и .h в каталогах include профиля.

root@kitploit:~
Score(f) = Σ path_weight(f)
         + Σ line_signal_weight(f)
         + Σ syzbot_overlap_weight(f)

Текущая реализация суммирует совпадения на уровне строк и ограничивает лишь количество верхних сигналов, отображаемых в промпте. Оценка определяет порядок исследования модели, но не является статистической величиной, скорректированной на вероятность уязвимости.

Основные статические сигналы:

  • ioctl, compat-обработчики, хуки file operation
  • copy_from/to_user и __user
  • kmalloc/kzalloc/kvmalloc, выделение кэша и пути free
  • refcount, atomic, kref
  • вычисления size·length и семейство memcpy
  • lock, RCU, асинхронное время жизни
  • BPF, skb, XDP, netlink
  • проверки capability и namespace

B. Область, управляемая профилем

ПрофильФокус
defaultТочки входа kernel/mm/net/fs/security/io_uring/lib/drivers
netnetlink, socket, skb, XDP
fsioctl, procfs, seq_file, debugfs
io_uringВремя жизни асинхронных запросов и teardown
bpfverifier, время жизни map/program, BTF
driversioctl, DMA, MMIO и teardown драйверов

C. Информация о сбоях

syzbot-fetch извлекает из публичных страниц ошибок syzbot заголовок, подсистему, тип ошибки и file:line и сохраняет их в JSON. Точное пересечение файлов — сильный сигнал ранжирования, пересечение подсистем — слабый. Живая панель может меняться, поэтому единицей воспроизведения является сохранённый JSON на момент выборки. Пересечение сбоев — это подсказка для поиска вариантов, а не доказательство уязвимости.

D. Контракт сессии и проверки

scan создаёт полный ранжированный manifest кандидатов и пакет верхних промптов. --limit — это количество кандидатов, сохраняемых в manifest, а --top — количество пакетов, создаваемых заранее. Остальные ранги можно создавать по запросу.

Ответ модели нормализуется до одного из следующих вердиктов.

  • cve_candidate
  • plausible_security_bug
  • latent_bug
  • not_cve_candidate
  • needs_more_context

Ручная проверка и autopilot используют один и тот же review_state.json, фиксированный путь ответа и парсер вердиктов.

E. Сбор происхождения и триаж

doctor и autopilot проверяют, является ли каталог Git-репозиторием, успешно ли собрано состояние, а также ветку, HEAD и dirty-пути. Состояние, в котором происхождение не может быть установлено, не считается чистым, а сохраняется как provenance_unknown.

Триаж сильного вердикта примерно следует следующему приоритету.

  1. если происхождение ненадёжно — provenance_unknown,
  2. если репозиторий или цель dirty — dirty_tree_suspect,
  3. если есть связанный CVE или неотрицаемый маркер, или commit, который ответ относит к fix/upstream, является предком текущего HEAD — known_issue,
  4. в противном случае — new_candidate.

Выражения отрицания или несвязанности, такие как «not a known issue», «unrelated to CVE-…», не используются как основание для known. В окончательном решении сохраняются исходный вердикт вместе с веткой, HEAD, состоянием, dirty-состоянием, совпавшей ссылкой и причиной.

Текущая классификация по корзинам с учётом происхождения и JSONL-запись применяются в пути ingest autopilot. Ручные loop и ingest используют то же базовое состояние сессии и парсер вердиктов, но не создают артефакты корзин.

V. Реализация и использование

A. Требования

  • Python 3.11 или новее
  • Дерево исходников ядра Linux
  • Git для использования provenance/doctor/autopilot
  • Codex CLI и аутентификация для autopilot [3]
  • Сетевое подключение для удалённого сбора syzbot

Зависимости среды выполнения Python — только стандартная библиотека.

B. Установка

root@kitploit:~
git clone https://github.com/foxirain/linux-kernel-codex-harness-v2.git
cd linux-kernel-codex-harness-v2

python3 -m venv .venv
source .venv/bin/activate
python -m pip install .
kernel-harness --help

Встроенные JSON-профили включены в wheel. Дополнительные правила можно передать через --config /path/to/profile.json.

C. Минимальный workflow

root@kitploit:~
# 1. Проверьте происхождение репозитория.
kernel-harness doctor /path/to/linux

# 2. Создайте ранжированную сессию.
kernel-harness scan /path/to/linux \
  --profile net \
  --limit 80 \
  --top 20 \
  --out artifacts

# 3. Просмотрите и отобразите одну сфокусированную проверку.
kernel-harness inspect artifacts/session-YYYYMMDDTHHMMSSZ --top 10
kernel-harness codex artifacts/session-YYYYMMDDTHHMMSSZ \
  --rank 1 \
  --include-snippet

Ручной ответ Codex сохраняется в codex_response.txt, как указано в runbook, после чего его можно ingest следующей командой.

root@kitploit:~
kernel-harness loop artifacts/session-YYYYMMDDTHHMMSSZ --include-snippet
kernel-harness status artifacts/session-YYYYMMDDTHHMMSSZ

D. Autopilot с бюджетом времени

root@kitploit:~
kernel-harness autopilot artifacts/session-YYYYMMDDTHHMMSSZ \
  --duration 30m \
  --per-run-timeout 10m \
  --include-snippet \
  --require-clean-tree \
  --stop-on-finding

Песочница Codex по умолчанию — read-only. --require-clean-tree разрешает выполнение только если Git-репозиторий, состояние и HEAD подтверждены, а рабочее дерево чистое. --stop-on-finding останавливается только когда результат эвристического триажа — new_candidate.

E. Необязательный поток syzbot

root@kitploit:~
kernel-harness syzbot-fetch https://syzkaller.appspot.com/upstream \
  --out artifacts/syzbot/upstream.json \
  --limit 50

kernel-harness syzbot-stats artifacts/syzbot/upstream.json --top 15

kernel-harness scan /path/to/linux \
  --profile fs \
  --syzbot-json artifacts/syzbot/upstream.json \
  --out artifacts

F. Артефакты сессии

root@kitploit:~
artifacts/session-<timestamp>/
├── SESSION.md
├── targets.json
├── finding_template.json
├── review_state.json
├── codex_response.txt              # существует, когда ответ ожидает обработки
├── bundles/
├── responses/
└── autopilot/
    ├── AUTOPILOT_STATUS.txt
    ├── AUTOPILOT_PROGRESS.txt
    ├── AUTOPILOT_BASELINE.json
    ├── AUTOPILOT_FINDINGS.txt
    ├── AUTOPILOT_FINDINGS_NEW.txt
    ├── AUTOPILOT_KNOWN_ISSUES.txt
    ├── AUTOPILOT_SUSPECTS.txt
    ├── AUTOPILOT_PROVENANCE_UNKNOWN.txt
    ├── AUTOPILOT_FINDINGS.jsonl
    ├── prompts/
    ├── exec/
    ├── parse_errors/
    └── findings/
        ├── new/
        ├── known/
        ├── suspects/
        └── unknown/

AUTOPILOT_FINDINGS.jsonl сохраняет вердикт, корзину, причину, ветку, HEAD, состояние происхождения, совпавшую ссылку и пути находки/архива в форме, пригодной для постобработки.

VI. Операционный результат и проверка

v2 применил расширенную архитектуру к реальному исследованию уязвимостей ядра Linux.

ТАБЛИЦА II — ОПУБЛИКОВАННЫЙ РЕЗУЛЬТАТ ПО УЯЗВИМОСТИ

Публичный результатЗатронутая областьСерьёзность / CVSSУязвимостьМодель исследования
CVE-2026-53075PPP · drivers/net/ppp/ppp_generic.cHigh 8.8 · CVSS 3.1 (Linux CNA)Непривязанным административным ioctl не хватало проверки CAP_NET_ADMIN против пользовательского пространства имён, владеющего целевым сетевым пространством имёнНаходка выявлена в ходе исследования с поддержкой v2; проверка и раскрытие оставались под руководством человека
Источник CVSS (проверено 2026-08-09)
  • CVE-2026-53075: запись CVE Linux CNA · CVSS 3.1 · 8.8 High · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
  • Официально опубликованные оценка и вектор перенесены без пересчёта.

16 регрессионных тестов сосредоточены не на точности обнаружения безопасности, а на программном контракте и развёртываемости.

  • регрессии ресурсов аллокатора и встроенных профилей
  • отрицательные вердикты и выражения CVE в обычной прозе не превращаются в сильные находки
  • ограничение ручных follow-up и порядок ранжирования
  • архивирование устаревших ответов без ожидающих целей
  • песочница read-only по умолчанию и положительные аргументы CLI
  • fail-closed происхождение при отсутствии/non-Git/сбое состояния
  • триаж dirty-цели, известной ссылки, отрицания и несвязанного CVE
  • сохранение истории сессии и JSONL метаданных классификации
  • контракт артефактов parse-error и находок
  • smoke-тест сканирования профиля из установленного wheel
root@kitploit:~
python -m unittest discover -s tests -v
python -m pip wheel . --no-deps --wheel-dir dist
python -m pip install --force-reinstall dist/*.whl

GitHub Actions запускает регрессионные тесты на Python 3.11 и 3.12, устанавливает wheel и выполняет smoke-тест 6 упакованных профилей и сканирования по умолчанию. Приведённый выше публичный случай — это операционный результат реального исследования, а не benchmark точности, полноты, эксплуатируемости или скорости обнаружения CVE, измеренный на репрезентативном корпусе деревьев Linux.

VII. Соображения безопасности

  • Песочница Codex по умолчанию — read-only, и её рекомендуется сохранять.
  • Если важно чистое происхождение, используйте doctor, затем --require-clean-tree.
  • Не интерпретируйте non-Git или сбой подтверждения состояния/HEAD как чистое состояние.
  • --dangerously-bypass-approvals-and-sandbox не следует использовать вне изолированной экспериментальной среды.
  • Комментарии и идентификаторы исходного кода также являются входными данными модели, поэтому учитывайте возможность prompt injection.
  • Строки CVE и commit — это лишь ссылки из ответа, а не авторитетное подтверждение.
  • Перед раскрытием или отчётом о находке человек должен повторно проверить достижимость, инварианты, воздействие и затронутые версии.

VIII. Ограничения и угрозы валидности

  1. Лексический анализ. Не строится реальное C AST, граф вызовов или межпроцедурный поток данных.
  2. Смещение оценки. Комментарии, макросы, повторяющиеся токены и большие файлы могут непропорционально влиять на оценку.
  3. Разрыв достижимости. Конфигурация ядра, привилегии, namespace и доступность устройств не моделируются автоматически.
  4. Хрупкость внешних данных. Интеграция syzbot зависит от изменений структуры публичного HTML.
  5. Только локальное происхождение. Родословная Git основана на HEAD текущего checkout и не отражает всю историю upstream и вендора.
  6. Ссылки из ответа. CVE и известные маркеры извлекаются из ответа модели, поэтому возможны пропуски, галлюцинации и неверное понимание контекста.
  7. Эвристический триаж. Ни new_candidate, ни known_issue не являются окончательным определением новизны.
  8. Зависимость от модели. Качество результатов зависит от модели, интерпретации промпта и доступного контекста репозитория.
  9. Область оценки. Текущие тесты проверяют программные регрессии. Опубликованный случай CVE — это результат реального использования, но он не заменяет статистическую оценку производительности обнаружения безопасности.

IX. Эволюция и ретроспектива

v1 (репозиторий) был сосредоточен на распределении внимания LLM с помощью внешнего сигнала и использовался в реальном исследовании с поддержкой v1, которое привело к обнаружению CVE-2026-31720. v2 продолжает ту же исследовательскую философию и расширяет её так, чтобы после сильной находки модели также фиксировались состояние репозитория и ссылки из ответа. В последующем исследовании с использованием этой архитектуры был обнаружен CVE-2026-53075.

root@kitploit:~
v1: наблюдения исходников → ранжирование → сфокусированная проверка
v2: наблюдения исходников → ранжирование → сфокусированная проверка → триаж с учётом происхождения

В этой эволюции необходимо сохранить два принципа.

  1. Не путать оценку до вывода с доказательством уязвимости.
  2. Не путать корзину после вывода с доказательством новизны.

Если бы расширение проводилось сейчас, приоритетами были бы граф вызовов Clang/tree-sitter, нормализация оценок, версионированный manifest и межпроцессная блокировка состояния, адаптер авторитетной базы CVE/исправлений, а также разделение runner, triage и записи артефактов. Текущая запись состояния использует временные файлы и атомарную замену.

X. Заключение

Kernel Codex Harness v2 не заменяет обнаружение уязвимостей. Внешний сигнал до вызова модели распределяет исследовательский бюджет по объяснимым кандидатам, а сигнал происхождения после вызова модели организует сильные находки в проверяемые очереди. Эта архитектура использовалась в реальном исследовании для обнаружения CVE-2026-53075, и ключевой результат проекта — не алгоритм автоматического определения новизны, а боевой workflow проверки безопасности с LLM, явно разделяющий распределение внимания и триаж с учётом происхождения.

Приложение A. Структура репозитория

root@kitploit:~
.
├── .github/workflows/ci.yml
├── docs/
│   ├── assets/kernel-harness-v2-architecture.svg
│   ├── AUTOPILOT.md
│   ├── CODEX_CLI.md
│   ├── CODEX_WORKFLOW.md
│   └── SYZBOT.md
├── kernel_harness/
│   ├── resources/
│   │   ├── linux-kernel-default.json
│   │   └── profiles/
│   │       ├── bpf.json
│   │       ├── drivers.json
│   │       ├── fs.json
│   │       ├── io_uring.json
│   │       └── net.json
│   ├── __init__.py
│   ├── __main__.py
│   ├── autopilot.py
│   ├── bundle.py
│   ├── cli.py
│   ├── finding_triage.py
│   ├── ingest.py
│   ├── models.py
│   ├── prompting.py
│   ├── repo_state.py
│   ├── session.py
│   ├── syzbot.py
│   └── targeting.py
├── tests/test_regressions.py
├── .gitignore
├── README.md
└── pyproject.toml

Подробное ручное управление описано в руководстве по Codex CLI, автоматическое выполнение и триаж — в руководстве по Autopilot, а информация о сбоях — в руководстве по syzbot.

Ссылки

[1] Protect AI, «vulnhuntr», репозиторий GitHub. https://github.com/protectai/vulnhuntr

[2] Google, «syzkaller and syzbot», репозиторий GitHub. https://github.com/google/syzkaller

[3] OpenAI, «Codex CLI». https://developers.openai.com/codex/cli/

Лицензия

Лицензировано по Apache License 2.0.

Скачать инструмент