Creed: LLM Auditing That Infers Developer Beliefs Hits 0.78 Recall on 50 Fresh CVEs

LLM-based Code Auditing by Inferring and Evaluating Developer Assumptions

Junming Liu, Marcel Böhme

cs.CR, cs.SE

2026-10-12

Creed prompts an LLM to infer developer beliefs, check if they are reasonable and when they break; it reaches 0.78 recall on 50 recent CVEs, 10 points above the best baseline.

What problem this solves

Classic belief-based bug finding works like this: a null check implies the developer thinks the pointer may be null, so a later unchecked dereference breaks that belief. The beliefs are hard-coded as syntactic patterns over structures like the program dependence graph (PDG). That caps what it can find.

Many recent vulnerabilities need domain semantics instead. Take an authentication function that returns the same error for an unknown user and a wrong password, to stop user enumeration. An extra password-hash call on one path makes the response time differ, which leaks the same fact through a timing side-channel. No general syntactic pattern captures that. In a random sample of 50 recent CVEs, 40 were semantic and 21 of those could not be expressed as a general pattern.

Evaluation has its own trap. Function-level binary classification is shaky because whether a function is vulnerable often depends on its callers.

Method

Creed packs a human auditor's workflow into a single prompt, one LLM call per function.

Because the analysis is function-level, results are only potential vulnerabilities. Callers may already mitigate them, so the conditions are spelled out for a human to check.

The paper also proposes two metrics. Recall is the share of known vulnerabilities for which at least one finding is consistent with the CVE description, fix commit message and patch. Overhead is the number of findings read per confirmed expected vulnerability. GPT-5.4 acts as judge, and every match it accepts was manually rechecked.

Results

The benchmark has 50 vulnerable functions from CVEs disclosed between September 2025 and March 2026, across 45 projects, 10 languages and 10 vulnerability types. Every approach uses Claude Sonnet 4.6.

MethodMatchedRecallOverheadTokens/function
RepoAudit10.028.054.6k
VulTrial210.423.317.3k
PrimeVul-CoTexp270.545.22.7k
LLM-Thinking340.6811.33.9k
Creed390.787.98.5k

Why it matters

For anyone building LLM code auditors, the transferable idea is the structure: make the model write down the assumptions behind the code, then challenge each one. With the same backbone this finds 5 more vulnerabilities than thinking mode (39 vs 34) at about 8.5k tokens and one call per function.

The evaluation recipe of explanations, recall and overhead is also reusable, since it avoids the caller-context problem of binary labels.

The gain is incremental, though: 10 points of recall over the best baseline, with higher overhead than VulTrial.

Limitations

Terms

Source

What people are saying

Related papers

All paper explainers