Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
linux-kernel-codex-harness — Harness di ricerca sulle vulnerabilità del kernel Linux basato su prove concrete, utilizzato nell'indagine sulla CVE-2026-31720 | Kitploit
Strumenti/GitHubGitHub/foxirain/linux-kernel-codex-harness
Analisi StaticaAnalisi delle VulnerabilitàFuzzingSicurezza dell'IA
GitHubfoxirain/linux-kernel-codex-harness

linux-kernel-codex-harness

Harness di ricerca sulle vulnerabilità del kernel Linux basato su prove concrete, utilizzato nell'indagine sulla CVE-2026-31720

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
24 giorni faNon ancora revisionato
Condividi

Kernel Codex Harness

한국어 | English

CI

Strumento di Ricerca · Importazione Originale: 3 Aprile 2026 · Revisione Documentazione: 11 Luglio 2026

Filosofia Fondamentale — Segnale Esterno
Lascia che osservazioni riproducibili al di fuori dell'inferenza del modello guidino l'attenzione; non scambiare mai la priorità per una prova.

Stato del progetto. Questo repository è una versione iniziale di un harness di ricerca assistito da LLM costruito e utilizzato per l'indagine di vulnerabilità reali del kernel Linux. Questa versione è stata utilizzata per scoprire la vulnerabilità pubblicata come CVE-2026-31720. L'harness dà priorità ai bersagli di indagine ma non dimostra automaticamente le vulnerabilità né garantisce la sicurezza del kernel; la verifica finale e la segnalazione sono svolte da esseri umani.

Abstract

Abstract— Lasciare che un LLM esplori direttamente un codebase delle dimensioni del kernel Linux disperde rapidamente il contesto e confonde facilmente l'esistenza di API pericolose con la reale sfruttabilità. Kernel Codex Harness definisce questo problema non come rilevamento automatico di vulnerabilità, ma come . Questo progetto chiama il principio di controllare l'attenzione del modello con osservazioni riproducibili calcolate al di fuori del ragionamento LLM. Combina percorsi del kernel, confini userspace, segnali statici relativi a lifetime·usercopy·refcount·size e intelligence opzionale sui crash di syzbot per classificare i file candidati, trasformando ciascun candidato in un bundle di prompt ristretto. La revisione manuale e l'autopilot basato su budget di tempo utilizzano lo stesso contratto di risposta e lo stesso stato di sessione. Questo harness è stato utilizzato in un'indagine reale sul kernel Linux per scoprire una scrittura out-of-bounds nello stack nel percorso audio del gadget USB; il difetto è stato pubblicato come . Questa implementazione non è un analizzatore statico di precisione, ma un workflow di ricerca che limita l'ambito dell'indagine LLM con euristiche spiegabili; ogni finding richiede una ri-verifica umana di raggiungibilità, violazione di invarianti e impatto concreto.

prioritizzazione dell'indagine e orchestrazione basata sullo stato
External Signal
CVE-2026-31720

Termini di Indicizzazione— kernel Linux, ricerca di vulnerabilità, segnale esterno, orchestrazione LLM, prioritizzazione euristica, syzbot, analisi di programmi, Codex.

I. Introduzione

La revisione di sicurezza del kernel Linux presenta due tipi di problemi di scala. In primo luogo, l'intero albero dei sorgenti è troppo grande per essere gestito in un unico contesto LLM. In secondo luogo, segnali come copy_from_user, allocator, refcount e lock sono comuni ma non implicano di per sé una vulnerabilità. L'analista deve prima decidere "dove guardare" e poi dimostrare separatamente la raggiungibilità da userspace e le transizioni di stato concrete.

La filosofia fondamentale di questo progetto è External Signal.

Non lasciamo che l'LLM decida da solo dove guardare. Segnali riproducibili al di fuori del ragionamento del modello allocano l'attenzione, ma le conclusioni sulle vulnerabilità sono determinate solo da prove di raggiungibilità e invarianti.

Pertanto, l'harness non fa esplorare vagamente l'intero kernel al modello. Prioritizza i file, fornisce un solo ramo di indagine alla volta e richiede prima la struttura delle prove, non le conclusioni.

II. Segnale Esterno e Principi di Progettazione

A. Segnale Esterno Prima dell'Inferenza del Modello

External Signal non è un giudizio generato dall'LLM, ma un'osservazione determinata prima dell'esecuzione del modello e ricalcolabile dallo stesso albero dei sorgenti, profilo e JSON syzbot salvato. Pesi dei percorsi, hit di espressioni regolari e overlap syzbot memorizzato nella cache rientrano in questa categoria. Questo segnale viene utilizzato solo per la classificazione dei candidati e il contesto dei prompt; non viene promosso a verdetto o prova.

In questo documento, External Signal si riferisce all'intera filosofia del progetto. Il modello dati ExternalSignal nel codice rappresenta attualmente solo i segnali derivati da syzbot, quindi l'ambito dei due termini è diverso.

B. La Prioritizzazione Non È una Prova

Gli hit di espressioni regolari, i percorsi ad alto rischio e l'overlap syzbot sono tutti segnali per l'ordine di indagine. Un punteggio elevato non costituisce un finding di sicurezza se il percorso di chiamata effettivo, i privilegi, la configurazione del kernel, il namespace o la disponibilità del dispositivo non consentono l'accesso all'attaccante.

C. Raggiungibilità Prima della Classe di Bug

L'audit verifica prima i confini che iniziano da userspace, come syscall, ioctl, netlink, procfs, filesystem, BPF e hook di driver. Solo successivamente valuta classi di bug come UAF, OOB, refcount, race, info leak e controlli di capability.

D. Un Ramo di Indagine alla Volta

Un'unità di indagine è limitata per impostazione predefinita a un singolo file e ai suoi caller, teardown e percorsi di free vicini. I follow-up manuali raccomandati dal modello sono consentiti al massimo due volte. Questa limitazione non mira a ridurre la capacità di esplorazione, ma a mantenere le conclusioni entro un ambito verificabile.

E. Prove Piuttosto che Fiducia

Il prompt richiede che un finding forte descriva almeno i seguenti elementi.

  1. entrypoint raggiungibile dall'attaccante,
  2. campo controllato dall'attaccante o transizione di lifetime,
  3. invariante di oggetto·lunghezza·stato che viene violata,
  4. impatto concreto come corruzione, leak o escalation di privilegi,
  5. motivo per cui i controlli esistenti non impediscono l'attacco.

Se le prove sono insufficienti, il modello restituisce un singolo target successivo da verificare invece di affermare con forza una vulnerabilità. Questo è un contratto di prove a livello di prompt; l'attuale parser non verifica automaticamente la completezza di ciascuna prova. Poiché l'ingestion normalizza verdetto e target successivo, la verifica finale delle prove è responsabilità umana.

F. Lignaggio di Progettazione

Il flusso di indagine iniziale trae origine dalle idee di analisi per file, espansione limitata del contesto e output strutturato utilizzate da vulnhuntr di Protect AI [1]. In questo progetto non è stato applicato direttamente all'analisi di applicazioni Python, ma è stato riprogettato attorno alla superficie del kernel raggiungibile da userspace, al lifetime degli oggetti del kernel, ai percorsi di teardown e all'overlap syzbot. In particolare, separare i segnali di priorità dalla prova della vulnerabilità e verificare la raggiungibilità prima della classe di bug è la scelta progettuale centrale dell'harness per il kernel.

III. Architettura del Sistema

External Signal architecture for Kernel Codex Harness

Fig. 1. Il livello External Signal trasforma le osservazioni calcolate prima dell'inferenza del modello in unità di revisione classificate. Alloca l'attenzione ma non stabilisce la prova della vulnerabilità.

TABELLA I — RESPONSABILITÀ DEI MODULI PRINCIPALI

ModuloResponsabilità
targeting.pyEsplorazione dei file del kernel e punteggio di percorsi, pattern e segnali syzbot
models.pyModelli dati Candidate, Signal e ExternalSignal derivato da syzbot
bundle.pyGenerazione di manifest, indice di sessione e bundle di prompt/snippet
prompting.pyPrompt di audit del kernel incentrati su raggiungibilità e invarianti
session.pySalvataggio dello stato di revisione in sospeso, cronologia e profondità di follow-up
ingest.pyNormalizzazione rigorosa di verdetto e target successivo
autopilot.pyGestione di codex exec basata su budget di tempo, log, archiviazione e finding
syzbot.pyRaccolta di pagine pubbliche syzbot e creazione di cache JSON locale
cli.pyCollegamento dei comandi scan, inspect, codex, loop, autopilot, ecc.

IV. Metodologia

A. Scoperta e Punteggio dei Candidati

Lo scanner itera i file .c e .h nelle directory di inclusione del profilo. Il punteggio di priorità del file f è concettualmente composto come segue.

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

Questo punteggio non è una misura di probabilità o sfruttabilità. Ogni elemento fornisce solo un ordine relativo per decidere quali file il modello deve esaminare per primo. L'implementazione attuale somma tutti i match a livello di riga e limita solo i segnali principali mostrati nel prompt. Il ricalcolo dello stesso risultato presuppone lo stesso albero dei sorgenti, profilo e JSON syzbot memorizzato nella cache. Il peso syzbot viene applicato a posteriori ai file già candidati tramite le euristiche di percorso e riga; un hit syzbot da solo non genera nuovi file candidati.

I principali segnali statici sono i seguenti.

  • ioctl, handler compat, hook di operazioni sui file
  • copy_from_user, copy_to_user, __user
  • kmalloc, kzalloc, kvmalloc, allocazione di cache e percorsi di free
  • operazioni refcount, atomic, kref
  • calcoli di size·length e famiglie memcpy
  • pattern relativi a lock, RCU e lifetime asincrono
  • confini BPF, skb, XDP, netlink
  • controlli di capability e namespace

B. Ambito Guidato dal Profilo

I profili integrati sono default, net, fs, io_uring, bpf e drivers. Il profilo definisce include path, pattern, pesi e il numero di segnali da conservare per file. Invece di applicare un'unica policy di punteggio all'intero kernel, riflette la superficie di attacco e le caratteristiche di lifetime specifiche di ciascun sottosistema.

C. Crash Intelligence

syzbot-fetch estrae titolo, sottosistema, tipo di bug e informazioni file:riga dalle pagine pubbliche dei bug syzbot del progetto syzkaller [2], creando una cache JSON. L'overlap esatto dei file è un External Signal forte; l'overlap del sottosistema è un External Signal debole. Poiché la dashboard live può cambiare, l'unità di riproduzione è il JSON salvato al momento del fetch. Le informazioni sui crash sono solo un punto di partenza per la caccia alle varianti e non vengono trattate come prova di nuove vulnerabilità.

D. Contratto di Sessione e Revisione

scan genera un manifest dei candidati classificati e i bundle di prompt principali. Ogni prompt include il percorso del target, il motivo del punteggio, i segnali di riga, il contesto syzbot e la procedura di audit.

La risposta del modello viene normalizzata in uno dei seguenti verdetti.

  • cve_candidate
  • plausible_security_bug
  • latent_bug
  • not_cve_candidate
  • needs_more_context

La risposta include un Single best next target e un breve riepilogo. Le risposte obsolete senza target in sospeso vengono archiviate separatamente e non collegate a nuovi target.

V. Implementazione e Utilizzo

A. Requisiti

  • Python 3.11 o superiore
  • Codex CLI [3] e autenticazione per l'uso di autopilot
  • Connessione di rete per la raccolta remota della dashboard syzbot

B. Installazione

root@kitploit:~
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 .

I JSON dei profili integrati sono inclusi nella wheel. Le regole JSON esterne possono essere passate con --config /path/to/profile.json.

C. Workflow Minimo

root@kitploit:~
# 1. Create a ranked session.
kernel-harness scan /path/to/linux \
  --profile net \
  --limit 80 \
  --top 20 \
  --out artifacts

# 2. Inspect high-priority candidates.
kernel-harness inspect artifacts/session-YYYYMMDDTHHMMSSZ --top 10

# 3. Render one focused prompt.
kernel-harness codex artifacts/session-YYYYMMDDTHHMMSSZ \
  --rank 1 \
  --include-snippet

--limit è il numero di candidati da mantenere nel manifest; --top è il numero di bundle di prompt da pre-generare inizialmente. I bundle per i rank successivi possono essere generati su richiesta.

D. Autopilot con Budget di Tempo

root@kitploit:~
kernel-harness autopilot artifacts/session-YYYYMMDDTHHMMSSZ \
  --duration 30m \
  --per-run-timeout 10m \
  --include-snippet

La sandbox predefinita è read-only. --sandbox workspace-write deve essere specificato solo se la modifica dei file è strettamente necessaria durante l'analisi.

E. Feed syzbot Opzionale

root@kitploit:~
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

F. Artefatti di Sessione

root@kitploit:~
artifacts/session-<timestamp>/
├── SESSION.md
├── targets.json
├── finding_template.json
├── review_state.json
├── codex_response.txt              # present while a response is pending
├── bundles/
│   ├── <rank>-<target>.md
│   └── <rank>-<target>.snippet.txt
├── responses/
└── autopilot/
    ├── AUTOPILOT_STATUS.txt
    ├── AUTOPILOT_PROGRESS.txt
    ├── AUTOPILOT_FINDINGS.txt
    ├── prompts/
    ├── exec/
    └── findings/

VI. Risultato Operativo e Verifica

Questa versione non è rimasta una prova di concetto, ma è stata utilizzata in un'indagine reale su una vulnerabilità del kernel Linux.

TABELLA II — ESITO DELLA VULNERABILITÀ DIVULGATA

Esito pubblicoArea interessataGravità / CVSSVulnerabilitàModello di indagine
CVE-2026-31720Audio gadget USB · drivers/usb/gadget/function/f_uac1_legacy.cHigh 7.8 · CVSS 3.1 (NVD)La lunghezza della richiesta controllata dall'host poteva far overfloware un oggetto stack di quattro byteFinding emerso durante un'indagine assistita da v1; la validazione e la divulgazione sono rimaste guidate da esseri umani
Fonti CVSS (verificate il 2026-08-09)
  • 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:H
  • Punteggio e vettore ufficiali sono stati riportati senza ricalcolo indipendente.

La verifica non è un benchmark di accuratezza del rilevamento, ma si concentra sulla regressione dell'implementazione e sulla distribuibilità.

TABELLA III — AMBITO DI VERIFICA INGEGNERISTICA

Elemento di verificaProprietà attesa
Regressione allocatorRilevamento di kmalloc e kvmalloc come segnali di allocator
Risorse del profiloCaricamento dei 6 profili integrati da un checkout dei sorgenti, smoke-test del profilo default dalla wheel installata
Contratto di verdettonot_cve_candidate non scambiato per un finding positivo
Policy di follow-upDue follow-up manuali consentiti, terza richiesta bloccata
Gestione risposte obsoleteRisposte senza target in sospeso archiviate e non riutilizzate
Default sicuroSandbox autopilot predefinita read-only
Matrice CISuite di regressione eseguita su Python 3.11 e 3.12
root@kitploit:~
python -m unittest discover -s tests -v

GitHub Actions esegue le regressioni unitarie, quindi installa la wheel in un nuovo ambiente e fa uno smoke-test della scansione con il profilo default. Il caso pubblico sopra è un risultato operativo ottenuto da un'indagine reale, ma non è un benchmark di precisione, recall o tasso di scoperta di CVE misurato su un corpus rappresentativo di alberi Linux.

VII. Considerazioni sulla Sicurezza

  • Si raccomanda di mantenere la sandbox predefinita read-only.
  • Non utilizzare --dangerously-bypass-approvals-and-sandbox in ambienti senza sandbox esterna.
  • Commenti e identificatori di sorgenti non attendibili possono diventare input del modello; considerare l'iniezione di prompt.
  • I finding generati dal modello devono essere ri-verificati da esseri umani per raggiungibilità e impatto prima della divulgazione o della segnalazione.
  • I crash syzbot e i punteggi euristici elevati non devono essere citati come prova di vulnerabilità.

VIII. Limitazioni e Minacce alla Validità

  1. Analisi lessicale. Non viene costruito un vero AST C, call graph o flusso di dati interprocedurale.
  2. Bias del punteggio. Commenti, macro, token ripetuti e file di grandi dimensioni possono influenzare eccessivamente il punteggio.
  3. Divario di raggiungibilità. Configurazione del kernel, privilegi, namespace e disponibilità del dispositivo non sono modellati automaticamente.
  4. Fragilità dei dati esterni. L'integrazione syzbot è influenzata dai cambiamenti nella struttura HTML pubblica.
  5. Dipendenza dal modello. La qualità dei risultati dipende dal modello utilizzato, dall'interpretazione del prompt e dal contesto del repository.
  6. Ambito di valutazione. I test attuali verificano la regressione del software. Il caso CVE pubblico è un risultato di utilizzo reale, ma non sostituisce una valutazione statistica delle prestazioni di rilevamento della sicurezza.

IX. Retrospettiva

Dalla prima versione registrata nella cronologia Git, l'obiettivo è stato più vicino a "controllare quale codice guardare per primo e quali prove richiedere" che a "far trovare le vulnerabilità all'LLM da solo". L'indagine assistita da v1 che ha scoperto CVE-2026-31720 ha fornito un caso di applicazione reale di unità di indagine ristrette e contratto di prove. La v2 estende questo workflow al triage consapevole della provenienza, preservando insieme lo stato del repository e i riferimenti noti. Se lo reimplementassi oggi, darei priorità a quanto segue.

  1. symbol/call graph basato su tree-sitter o Clang,
  2. normalizzazione del punteggio che considera dimensione del file e hit ripetuti,
  3. rimozione della duplicazione CLI/autopilot tramite la separazione dei livelli review e runner,
  4. manifest versionato e scrittura atomica dello stato,
  5. risposte del modello basate su JSON Schema ed evidenze strutturate,
  6. collegamento automatico di crash syzbot, commit di fix e varianti vicine.

Tuttavia, il principio centrale che vorrei mantenere è External Signal. Non lasciare che l'LLM esplori vagamente l'intero codebase; ripetere unità di indagine ristrette da segnali esterni al modello, incentrate su raggiungibilità e invarianti.

X. Conclusione

Kernel Codex Harness non sostituisce il rilevamento di vulnerabilità del kernel Linux. Invece, trasforma External Signal in una classificazione spiegabile e limita la revisione LLM a un processo di indagine breve e con stato. Questa struttura è stata utilizzata in un'indagine reale per la scoperta di CVE-2026-31720. Il risultato fondamentale del progetto non è rivendicare un nuovo algoritmo di analisi, ma definire la revisione di sicurezza LLM come allocazione dell'attenzione tramite segnale esterno, contratto di prove e orchestrazione riproducibile e applicarla a un workflow di ricerca reale.

Appendice A. Struttura del Repository

root@kitploit:~
.
├── .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

Le procedure operative dettagliate sono disponibili in docs/.

Riferimenti

[1] Protect AI, "vulnhuntr," repository GitHub. https://github.com/protectai/vulnhuntr

[2] Google, "syzkaller and syzbot," repository GitHub. https://github.com/google/syzkaller

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

Licenza

Concesso in licenza sotto la Apache License 2.0.

Scarica lo strumento