
Evidenzbasierte Forschungsumgebung für Schwachstellen im Linux-Kernel, die bei der Untersuchung von CVE-2026-31720 eingesetzt wird.
Forschungswerkzeug · Ursprünglicher Import: 3. April 2026 · Dokumentationsrevision: 11. Juli 2026
Kernphilosophie — Externes Signal
Reproduzierbare Beobachtungen außerhalb der Modellinferenz sollen die Aufmerksamkeit lenken; Priorität niemals mit Beweis verwechseln.
Projektstatus. Dieses Repository ist eine frühe Version eines LLM-gestützten Research-Harness, der für die Untersuchung realer Linux-Kernel-Schwachstellen entwickelt und verwendet wurde. Diese Version wurde verwendet, um die als CVE-2026-31720 veröffentlichte Schwachstelle zu finden. Der Harness priorisiert Untersuchungsziele, beweist jedoch keine Schwachstellen automatisch und garantiert keine Kernel-Sicherheit; die endgültige Validierung und Berichterstattung erfolgt durch Menschen.
Abstract— Wenn man LLMs eine Codebasis von der Größe des Linux-Kernels direkt durchsuchen lässt, zerstreut sich der Kontext schnell, und die Existenz riskanter APIs wird leicht mit tatsächlicher Ausnutzbarkeit verwechselt. Kernel Codex Harness definiert dieses Problem nicht als automatische Schwachstellenerkennung, sondern als . Dieses Projekt nennt das Prinzip, die Aufmerksamkeit des Modells durch reproduzierbare Beobachtungen zu steuern, die außerhalb der LLM-Inferenz berechnet werden, . Kernel-Pfade, Userspace-Grenzen, statische Signale für Lifetime, Usercopy, Refcount und Größe sowie optionale syzbot-Crash-Intelligence werden kombiniert, um Kandidatendateien zu ranken, und jeder Kandidat wird in ein schmales Prompt-Bündel umgewandelt. Manuelle Überprüfung und zeitbudgetierter Autopilot verwenden denselben Antwortvertrag und denselben Sitzungszustand. Dieser Harness wurde in einer realen Linux-Kernel-Untersuchung verwendet, um einen Stack-Out-of-Bounds-Write im USB-Gadget-Audio-Pfad zu finden; dieser Fehler wurde als veröffentlicht. Diese Implementierung ist kein präziser statischer Analysator, sondern ein Research-Workflow, der den LLM-Untersuchungsbereich durch erklärbare Heuristiken eingrenzt; alle Findings erfordern eine menschliche Revalidierung von Erreichbarkeit, Invariantenbruch und konkreter Auswirkung.
Index Terms— Linux-Kernel, Schwachstellenforschung, externes Signal, LLM-Orchestrierung, heuristische Priorisierung, syzbot, Programmanalyse, Codex.
Die Sicherheitsprüfung des Linux-Kernels hat zwei Arten von Skalierungsproblemen. Erstens ist der gesamte Quellbaum zu groß für einen einzigen LLM-Kontext. Zweitens sind Signale wie copy_from_user, Allokatoren, Refcounts und Locks häufig, bedeuten aber für sich genommen keine Schwachstelle. Der Analyst muss zuerst entscheiden, „wo gesucht werden soll“, und dann Userspace-Erreichbarkeit und konkrete Zustandsübergänge separat beweisen.
Die Kernphilosophie dieses Projekts ist External Signal.
Das LLM entscheidet nicht selbst, wo es hinsieht. Reproduzierbare Signale außerhalb der Modellinferenz verteilen die Aufmerksamkeit, aber Schwachstellenschlussfolgerungen werden nur durch Erreichbarkeits- und Invariantenevidenz bestimmt.
Daher lässt der Harness das Modell nicht vage den gesamten Kernel durchsuchen. Er priorisiert Dateien, bietet jeweils nur einen Untersuchungszweig an und verlangt zuerst Beweisstrukturen statt Schlussfolgerungen.
External Signal ist kein vom LLM generiertes Urteil, sondern eine Beobachtung, die vor der Modellausführung bestimmt und aus demselben Quellbaum, Profil und gespeicherten syzbot-JSON neu berechnet werden kann. Pfadgewichte, Regex-Treffer und gecachte syzbot-Überlappungen fallen darunter. Diese Signale werden nur für Kandidatenranking und Prompt-Kontext verwendet und nicht zu Urteilen oder Beweisen erhoben.
External Signal in diesem Dokument bezieht sich auf die gesamte Projektphilosophie. Das ExternalSignal-Datenmodell im Code repräsentiert derzeit nur die daraus abgeleiteten syzbot-Signale, daher unterscheidet sich der Umfang der beiden Begriffe.
Regex-Treffer, Hochrisikopfade und syzbot-Überlappungen sind allesamt Signale für die Untersuchungsreihenfolge. Eine hohe Punktzahl ist kein Sicherheitsfinding, wenn der tatsächliche Aufrufpfad, Berechtigungen, Kernel-Konfiguration, Namespace oder die Geräteverfügbarkeit dem Angreifer keinen Zugriff ermöglichen.
Die Prüfung identifiziert zuerst Grenzen, die vom Userspace ausgehen, wie syscall, ioctl, netlink, procfs, Dateisysteme, BPF und Driver-Hooks. Erst danach werden Bug-Klassen wie UAF, OOB, Refcount, Race, Info-Leak und Capability-Checks bewertet.
Eine Untersuchungseinheit ist standardmäßig auf eine Datei und nahe Caller-, Teardown- und Free-Pfade beschränkt. Vom Modell empfohlene manuelle Folgeuntersuchungen sind auf maximal zwei beschränkt. Diese Einschränkung soll nicht die Explorationsfähigkeit verringern, sondern Schlussfolgerungen innerhalb eines verifizierbaren Rahmens halten.
Die Prompts verlangen, dass ein starkes Finding mindestens die folgenden Punkte erklärt:
Fehlt die Begründung, gibt das Modell statt einer starken Schwachstellenbehauptung ein einzelnes nächstes Ziel zur Überprüfung zurück. Dies ist ein Prompt-Level-Evidenzvertrag; der aktuelle Parser validiert die Vollständigkeit jeder Evidenz nicht automatisch. Da die Ingestion Urteile und nächste Ziele normalisiert, liegt die endgültige Evidenzvalidierung in der Verantwortung des Menschen.
Der anfängliche Untersuchungsfluss geht auf die dateibasierte Analyse, die begrenzte Kontexterweiterung und die strukturierten Ergebnisse von Protect AIs vulnhuntr zurück [1]. Dieses Projekt überträgt diese Ideen nicht direkt auf die Analyse von Python-Anwendungen, sondern gestaltet sie neu rund um die userspace-erreichbare Kernel-Oberfläche, Kernel-Objekt-Lifetimes, Teardown-Pfade und syzbot-Überlappungen. Insbesondere die Trennung von Prioritätssignalen und Schwachstellenbeweis sowie die Prüfung der Erreichbarkeit vor der Bug-Klasse sind zentrale Designentscheidungen des Kernel-Harness.
Abb. 1. Die External-Signal-Schicht wandelt vor der Modellinferenz berechnete Beobachtungen in gerankte Überprüfungseinheiten um. Sie verteilt Aufmerksamkeit, begründet aber keinen Schwachstellenbeweis.
TABELLE I — VERANTWORTLICHKEITEN DER HAUPTMODULE
| Modul | Verantwortung |
|---|---|
targeting.py | Kernel-Dateisuche und Bewertung von Pfad-, Muster- und syzbot-Signalen |
models.py | Datenmodelle für Candidate, Signal und syzbot-abgeleitetes ExternalSignal |
bundle.py | Manifest-, Sitzungsindex- und Prompt/Snippet-Bündelerstellung |
prompting.py | Kernel-Audit-Prompts mit Fokus auf Erreichbarkeit und Invarianten |
session.py | Zustandsspeicherung für ausstehende Überprüfungen, Verlauf und Folge-Tiefe |
ingest.py | Normalisierung strenger Urteile und nächster Ziele |
autopilot.py | Zeitbudgetiertes codex exec, Protokollierung, Archivierung und Finding-Verwaltung |
syzbot.py | Abruf öffentlicher syzbot-Seiten und Erstellung lokaler JSON-Caches |
cli.py | Verbindung von Befehlen wie scan, inspect, codex, loop, autopilot |
Der Scanner durchläuft .c- und .h-Dateien unter den Include-Verzeichnissen des Profils. Die Prioritätspunktzahl einer Datei f setzt sich konzeptionell wie folgt zusammen:
Score(f) = Σ path_weight(f)
+ Σ line_signal_weight(f)
+ Σ syzbot_overlap_weight(f)
Diese Punktzahl ist kein Wahrscheinlichkeits- oder Exploitability-Maß. Jeder Eintrag liefert nur eine relative Reihenfolge, welche Dateien das Modell zuerst prüfen soll. Die aktuelle Implementierung summiert alle Line-Level-Treffer und begrenzt nur die im Prompt angezeigten Top-Signale. Die Neuberechnung desselben Ergebnisses setzt denselben Quellbaum, dasselbe Profil und denselben gecachten syzbot-JSON voraus. Das syzbot-Gewicht wird nachträglich auf Dateien angewendet, die zuerst durch Pfad- und Zeilenheuristiken zu Kandidaten wurden; syzbot-Treffer allein erzeugen keine neuen Kandidatendateien.
Die wichtigsten statischen Signale sind:
ioctl, Compat-Handler, Dateioperations-Hookscopy_from_user, copy_to_user, __userkmalloc, kzalloc, kvmalloc, Cache-Allokation und Free-PfadeDie eingebauten Profile sind default, net, fs, io_uring, bpf und drivers. Profile definieren Include-Pfade, Muster, Gewichte und die Anzahl der pro Datei zu erhaltenden Signale. Statt einer einzigen Scoring-Richtlinie für den gesamten Kernel spiegeln sie die Angriffsfläche und Lifetime-Eigenschaften der jeweiligen Subsysteme wider.
syzbot-fetch extrahiert Titel, Subsystem, Bug-Typ und Datei:Zeilen-Informationen aus den öffentlichen syzbot-Bug-Seiten des syzkaller-Projekts [2] und speichert sie in einem JSON-Cache. Exakte Dateiüberlappung ist ein starkes External Signal, Subsystemüberlappung ein schwaches. Da das Live-Dashboard variieren kann, ist die Reproduktionseinheit das zum Abrufzeitpunkt gespeicherte JSON. Crash-Informationen sind nur ein Ausgangspunkt für Variantenjagd und werden nicht als Beweis für neue Schwachstellen behandelt.
scan erzeugt ein geranktes Kandidatenmanifest und ein Top-Prompt-Bündel. Jeder Prompt enthält Zielpfad, Score-Begründung, Zeilensignale, syzbot-Kontext und das Audit-Verfahren.
Modellantworten werden in eines der folgenden Urteile normalisiert:
cve_candidateplausible_security_buglatent_bugnot_cve_candidateneeds_more_contextDie Antwort enthält ein einziges Single best next target und eine kurze Zusammenfassung. Alte Antworten ohne ausstehendes Ziel werden nicht mit neuen Zielen verknüpft, sondern separat archiviert.
git clone https://github.com/foxirain/linux-kernel-codex-harness.git
cd linux-kernel-codex-harness
python3 -m venv .venv
source .venv/bin/activate
python -m pip install .
Die eingebauten Profil-JSONs sind im Wheel enthalten. Externe JSON-Regeln können mit --config /path/to/profile.json übergeben werden.
# 1. Erstellen einer gerankten Sitzung.
kernel-harness scan /path/to/linux \
--profile net \
--limit 80 \
--top 20 \
--out artifacts
# 2. Hochpriorisierte Kandidaten prüfen.
kernel-harness inspect artifacts/session-YYYYMMDDTHHMMSSZ --top 10
# 3. Einen fokussierten Prompt rendern.
kernel-harness codex artifacts/session-YYYYMMDDTHHMMSSZ \
--rank 1 \
--include-snippet
--limit ist die Anzahl der im Manifest zu behaltenden Kandidaten, --top die Anzahl der anfänglich vorab erstellten Prompt-Bündel. Bündel für spätere Ränge können bei Bedarf ebenfalls erstellt werden.
kernel-harness autopilot artifacts/session-YYYYMMDDTHHMMSSZ \
--duration 30m \
--per-run-timeout 10m \
--include-snippet
Die Standard-Sandbox ist read-only. --sandbox workspace-write sollte nur angegeben werden, wenn Dateiänderungen während der Analyse unbedingt erforderlich sind.
kernel-harness syzbot-fetch https://syzkaller.appspot.com/upstream \
--out artifacts/syzbot/upstream.json \
--limit 50
kernel-harness scan /path/to/linux \
--profile fs \
--syzbot-json artifacts/syzbot/upstream.json \
--out artifacts
artifacts/session-<timestamp>/
├── SESSION.md
├── targets.json
├── finding_template.json
├── review_state.json
├── codex_response.txt # vorhanden, während eine Antwort aussteht
├── bundles/
│ ├── <rank>-<target>.md
│ └── <rank>-<target>.snippet.txt
├── responses/
└── autopilot/
├── AUTOPILOT_STATUS.txt
├── AUTOPILOT_PROGRESS.txt
├── AUTOPILOT_FINDINGS.txt
├── prompts/
├── exec/
└── findings/
Diese Version blieb kein Konzeptnachweis, sondern wurde in einer realen Linux-Kernel-Schwachstellenuntersuchung eingesetzt.
TABELLE II — VERÖFFENTLICHTES SCHWACHSTELLENERGEBNIS
| Öffentliches Ergebnis | Betroffener Bereich | Schweregrad / CVSS | Schwachstelle | Untersuchungsmodell |
|---|---|---|---|---|
| CVE-2026-31720 | USB-Gadget-Audio · drivers/usb/gadget/function/f_uac1_legacy.c | Host-kontrollierte Anforderungslänge konnte ein Vier-Byte-Stack-Objekt überlaufen lassen | Finding während einer v1-unterstützten Untersuchung aufgetaucht; Validierung und Offenlegung blieben menschengeführt |
CVE-2026-31720: NVD CVSS 3.1 · 7.8 High · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HDie Verifikation ist kein Benchmark für Erkennungsgenauigkeit, sondern konzentriert sich auf Implementierungsregressionen und Bereitstellbarkeit.
TABELLE III — UMFANG DER TECHNISCHEN VERIFIKATION
| Verifikationspunkt | Erwartete Eigenschaft |
|---|---|
| Allokator-Regression | kmalloc und kvmalloc als Allokator-Signale erkennen |
| Profilressourcen | Laden der 6 eingebauten Profile aus dem Quell-Checkout, Smoke-Test des default-Profils aus dem installierten Wheel |
| Urteilsvertrag | not_cve_candidate nicht als positives Finding fehlinterpretieren |
| Folge-Richtlinie | Zwei manuelle Folgeuntersuchungen erlauben, dritte Anfrage blockieren |
| Behandlung veralteter Antworten | Antworten ohne ausstehendes Ziel archivieren und nicht wiederverwenden |
| Sicherer Standard | Autopilot-Sandbox-Standardwert ist read-only |
| CI-Matrix | Regressionstestsuite unter Python 3.11 und 3.12 ausführen |
python -m unittest discover -s tests -v
GitHub Actions führt Unit-Regressionstests aus, installiert dann das Wheel in einer neuen Umgebung und führt einen Smoke-Test des default-Profil-Scans durch. Das obige öffentliche Beispiel ist ein operatives Ergebnis aus realer Untersuchung, aber kein Benchmark für Precision, Recall oder CVE-Entdeckungsrate, gemessen an einem repräsentativen Linux-Tree-Korpus.
read-only-Sandbox beizubehalten.--dangerously-bypass-approvals-and-sandbox nicht ohne externe Sandbox verwenden.Von der in der Git-Historie dokumentierten ersten Version an war das Ziel weniger „das LLM Schwachstellen selbst finden zu lassen“ als vielmehr „zu kontrollieren, welcher Code zuerst geprüft und welche Evidenz verlangt wird“. Die v1-unterstützte Untersuchung, die CVE-2026-31720 fand, lieferte ein Beispiel dafür, dass enge Untersuchungseinheiten und ein Evidenzvertrag in der realen Forschung anwendbar sind. v2 erweitert diesen Workflow zu einem Provenance-bewussten Triage, der Repository-Zustand und bekannte Referenzen gemeinsam bewahrt. Würde ich es heute neu implementieren, hätte Folgendes Priorität:
review- und runner-Ebenen,Dennoch bleibt das zentrale Prinzip, das ich beibehalten möchte, External Signal. Dem LLM nicht die gesamte Codebasis vage durchsuchen lassen, sondern durch Signale außerhalb des Modells eingegrenzte Untersuchungseinheiten iterativ mit Fokus auf Erreichbarkeit und Invarianten bearbeiten.
Kernel Codex Harness ersetzt nicht die Erkennung von Linux-Kernel-Schwachstellen. Stattdessen wandelt es External Signal in erklärbare Rankings um und beschränkt die LLM-Prüfung auf kurze, zustandsbehaftete Untersuchungsprozesse. Diese Struktur wurde in einer realen Untersuchung zur Entdeckung von CVE-2026-31720 verwendet. Das Kernresultat des Projekts liegt nicht in der Behauptung eines neuen Analysealgorithmus, sondern darin, LLM-Sicherheitsprüfung als External-Signal-Aufmerksamkeitsallokation, Evidenzvertrag und reproduzierbare Orchestrierung zu definieren und in einem realen Forschungs-Workflow anzuwenden.
.
├── .github/workflows/ci.yml
├── docs/
│ ├── assets/kernel-harness-architecture.svg
│ ├── AUTOPILOT.md
│ ├── CODEX_CLI.md
│ ├── CODEX_WORKFLOW.md
│ └── SYZBOT.md
├── kernel_harness/
│ ├── resources/
│ │ ├── linux-kernel-default.json
│ │ └── profiles/
│ ├── autopilot.py
│ ├── bundle.py
│ ├── cli.py
│ ├── ingest.py
│ ├── models.py
│ ├── prompting.py
│ ├── session.py
│ ├── syzbot.py
│ └── targeting.py
├── tests/test_regressions.py
├── README.md
└── pyproject.toml
Detaillierte Betriebsabläufe finden Sie in docs/.
[1] Protect AI, „vulnhuntr,“ GitHub-Repository. https://github.com/protectai/vulnhuntr
[2] Google, „syzkaller and syzbot,“ GitHub-Repository. https://github.com/google/syzkaller
[3] OpenAI, „Codex CLI.“ https://developers.openai.com/codex/cli/
Lizenziert unter der Apache License 2.0.