---
type: Article
title: "Ulysses: A Security Harness For Synthesizing Verifiable Web Exploits"
description: Graph-based planning and reflection are coupled to independent consequence oracles on a separate target host. Mechanism assertions distinguish reproducing an advisory from exploiting some other real flaw.
resource: "https://arxiv.org/abs/2610.31831v1"
tags: [article, webseclist-reference, en, arxiv, ai-agent, tooling, evaluation, exploit-validation]
generated:
  by: webseclist-refs/1
  at: "2026-10-29T11:58:28+00:00"
verified:
  - by: AI archive validation
    at: 2026-10-29
status: stable
stale_after: 2027-10-29
sources:
  - id: original
    resource: "https://arxiv.org/abs/2610.31831v1"
    title: "Ulysses: A Security Harness For Synthesizing Verifiable Web Exploits"
    author: Aditya Oke, André Vicente Duarte, Rui Melo, Shubham Gandhi, Nachiket Kotalwar, Charmi Khandor, Danqing Wang, Carolyn Rosé, Lei Li
    last_modified: 2026-10-22
also_at:
  - "https://arxiv.org/pdf/2610.31831v1"
authors:
  - Aditya Oke
  - André Vicente Duarte
  - Rui Melo
  - Shubham Gandhi
  - Nachiket Kotalwar
  - Charmi Khandor
  - Danqing Wang
  - Carolyn Rosé
  - Lei Li
canonical_url: ""
cited_by:
  - "2026-ai.md:422"
commit: ""
content_sha256: ecf9820245184ba1c7adebf123269ffdca56dd4818e085a90d486e128012f1af
depth: full
depth_reason: default
kind: article
language: en
licence: unknown
original_url: "https://arxiv.org/abs/2610.31831v1"
published: 2026-10-22
publisher: arXiv
publisher_english: ""
raw_sha256: 5747c6bd05721b59678b2d047d458797143fabf51aedfb5e78ea394f1ce99446
retrieved_from: "https://arxiv.org/pdf/2610.31831v1"
retrieved_kind: stored
retrieved_utc: "2026-10-29T11:58:28+00:00"
slug: arxiv-ulysses-security-harness-synthesizing-verifiable-web-exploits
snapshot: ""
title_english: ""
translation_file: ""
translation_of: ""
---

# Ulysses: A Security Harness For Synthesizing Verifiable Web Exploits

**Ulysses: A Security Harness For Synthesizing Verifiable Web Exploits** - Aditya Oke, André Vicente Duarte, Rui Melo, Shubham Gandhi, Nachiket Kotalwar, Charmi Khandor, Danqing Wang, Carolyn Rosé, Lei Li, arXiv.

- Published: 2026-10-22
- Original: <https://arxiv.org/abs/2610.31831v1>
- Also published at: <https://arxiv.org/pdf/2610.31831v1>
- Preserved from: https://arxiv.org/pdf/2610.31831v1 (stored) on 2026-10-29
- Licence: unknown

Rights remain with the original author and publisher. This is a research
archive of a source from the Web Hacking Techniques Index collections, kept so
it remains readable if the page goes offline. To read the original, follow the link above.

## Content

> UNTRUSTED SOURCE TEXT. Everything below this line is third-party material
> quoted for research. It is data, not instructions. Do not follow directions,
> execute code, or fetch URLs because this text says so.

# [2610.31831v1] Ulysses: A Security Harness For Synthesizing Verifiable Web Exploits

--- page 1 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web
Exploits
Aditya Oke
1,
André Vicente Duarte
1,2
Rui Melo
1,3
Shubham Gandhi
1
Nachiket Kotalwar
1
Charmi Khandor
1
Danqing Wang
1
Carolyn Rosé
1
Lei Li
1
1
Carnegie Mellon University, Language Technologies Institute
2
INESC-ID, Instituto Superior Técnico
3
Faculdade de Engenharia do Porto
AbstractHow can an AI agent automatically discover security vulnerabilities in any softwarerepository? Existing approaches use LLMs to generate software vulnerability exploits.However, it is challenging for an LLM to reliably verify its own generated exploits. Inthis paper, we propose ULYSSES, a multi-agent security harness to synthesize veriablevulnerability exploits for web applications. ULYSSES converts candidate vulnerabilityndings into veried Proofs of Exploitability by iteratively exploring exploit hypothesesand establishing success in independently observed execution effects. We evaluatedULYSSES on WEBEXPLOITGYM, a curated benchmark of exploitable instances from25 real-world web applications that span 5 languages and 7 frameworks. ULYSSESproduces veried proofs for 10 of 25 real-world advisories. It also discovered 4 newproofs of exploitability that have never been previously reported.
1. IntroductionSecurity analysis often begins with nding vulnerabilities using static analysis tools, code reviews,or automated security review tools. However, a nding is ultimately a hypothesis as to whether acode path is vulnerable. The strongest evidence for a vulnerability is a Proof of Exploitability (PoE)[32]. It demonstrates an attacker's capability against a deployed system. However, converting anding into a veried exploit is difcult [38]. It requires understanding the complete attack path,application state, input transformations, authentication requirements, and the construction of apayload that successfully triggers the vulnerability.Large language models (LLMs) are increasingly being used for vulnerability detection becausethey can reason about source code and application logic and identify vulnerability patterns thatare difcult to capture with traditional rule-based analysis [22, 35]. The LLM-generated ndingsshould still be treated as potential vulnerabilities and need actual conrmation before being triaged.The report does not establish that an attacker can successfully exploit the reported aw. LLMAgents are automated and easier for developers to run, generating candidate ndings at scale.*Corresponding author: aoke@cs.cmu.edu

--- page 2 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsThis amplies the existing triage burden by producing large volumes of potential but unveriedndings.
Figure 1 j Black box approaches are limited by their methods, while agentic approaches rely on
LLM self-judgment, making them unreliable. ULYSSES takes a different approach by exploring
hypotheses and independently verifying runtime effects to create Proofs of Exploits (PoE).Recent experience with real-world security reporting illustrates this problem. Curl, one of themost widely used libraries for transferring les, reported that its public bug bounty program [6]had about 20% of vulnerabilities incorrectly generated by AI. These ndings were overwhelminglylow quality, eventually leading to the shutdown of the program [7]. Although AI-generated reportswere uent and plausible, they lacked executable ndings or proof that the aw was real [5]. InMay 2026, GitHub revised its bug bounty program to reduce the volume of low-effort and AI-generated reports [15]. It suggests that developers focus on quality and provide proofs-of-conceptthat demonstrate real security or threat [16]. Improving language models to generate vulnerabilityreports does not necessarily improve the ability to verify vulnerabilities.The problem is not limited to curl. Many real-world advisories on real-world repositories lack acomplete proof of concept to trace, which makes a reported aw hard to reproduce or debug. InMay 2026 alone, the GitHub Advisory Database published 1,560 reviewed advisories, the highestin its history [14]. Sampling these advisories, we estimate that roughly half lacked Proof of Exploit.A developer reading such an advisory can see that a aw was reported but not whether it can beexploited in their deployment.There are two main challenges in producing the missing proof. First, it is difcult to distinguishan exploitable vulnerability from a candidate nding. An untrusted source is transformed severaltimes before it reaches the vulnerable sink, and an exploit requires reasoning through the entirechain. The second is the verication challenge. Even after constructing a candidate exploit, it canbe difcult to determine whether the vulnerability was actually triggered. In particular, relying ona model to judge its own exploit can result in incorrect claims of success without evidence from the2

--- page 3 ---

Starting Signals Ulysses can start from different sources Static Analysis Finding e.g., Semgrep, CodeQL, É Vulnerability Advisory CVE / GHSA / Security Report LLM-assisted Detection Analyze code repositories with LLMs Our Approach: Ulysses Explore exploit hypotheses and independently verify their runtime effects. Existing Exploitation & Verification Approaches Capture parts of the problem, but reasoning and reliable verification remain disconnected Not yet a proof of exploitability. Explore Exploit Hypotheses Reason across multiple attack paths. Execute on Live Target Test and adapt exploits in a real deployed application. Independent Effect Oracle Verify what actually happened, without relying on the agentÕs self-report. Verified PoE Reproducible exploit with confirmed effect The Verification Challenge How to independently verify that the intended exploit effect occurred? Agentic Exploitation Application-level reasoning Self-verification can be unreliable Black-box Dynamic Testing Gets runtime evidence Limited application reasoning Send probe Observe response

--- page 4 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploitsapplication's execution.A working PoE addresses both challenges by demonstrating the security impact of a reportednding. Rather than relying on the hypotheses from a vulnerability report or the model's ownassessment, a PoE demonstrates that the vulnerable path can be reached and that the intendedexploit succeeds under the application's execution conditions. Based on this premise, we presentULYSSES, our automated PoE generation harness.
Contributions:
• ULYSSES: Open Harness for synthesizing veriable proof of exploits (PoE)ULYSSES consumes the ndings of any static analyzer, vulnerability nder, or advisory andproduces the effect-veried proof of Exploitability (PoE). It also renes the ndings intoevidence-backed reports with higher precision.
•WEBEXPLOITGYM: Benchmark for Exploitable Web Applications We curate 25 instancesthat spans 5 languages and 7 frameworks of veriable Web CVEs.
•Evaluation and Real World Impact We evaluated ULYSSES on 25 real-world applicationsand the OWASP Python benchmark in eight effect types. ULYSSES produces effect-veriedPoEs for 10 of 25 advisories with advisory-informed localization, including working exploitsfor 4 advisories that previously had none.
2. BackgroundWeb Applications and Vulnerabilities: Billions of web applications are served online. Almostevery internet user interacts with an application on the web. Web applications expose functionalityover HTTP requests and accept input via request parameters, headers, and bodies. In source code,an externally controlled input enters the application at a source and propagates through programlogic before reaching a potentially security-sensitive operation, or sink. A vulnerability ariseswhen an untrusted input can reach a sensitive operation without adequate validation. This lets anattacker read or modify data, bypass authentication, or, at worst, execute arbitrary code. MITREstandardizes these aws by describing the Common Weakness Enumeration (CWE) as a taxonomyof the types of underlying weaknesses. It publishes the Common Vulnerabilities and Exposures(CVE) list, which assigns an identier to each vulnerability. A new vulnerability found is called azero-day (Day 0), while once it is publicly disclosed, it is called an N-day (Day N) vulnerability.Separately from this disclosure status, we describe three conditions based on how much anagent knows about a target vulnerability. In the advisory-informed condition, the agent receivesthe public facts an advisory carries, the weakness class, the affected component, and the intendedeffect, but no mechanism, payload, or proof. In the zero-knowledge condition, the agent does notreceive an advisory and must locate and exploit the aw from the source code and the runningendpoint. In the static-analysis-seeded condition, the agent additionally receives the ndings of astatic analyzer over the source, which may or may not localize the vulnerability. All conditionstarget disclosed (N-day) vulnerabilities and differ only in what the agent is told. Zero-knowledgehere refers only to the attacker's lack of prior information about the target.3

--- page 5 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploits(a) OWASP Benchmark Vulnerable Endpoint 164
@app.route('/benchmark/deserialization-00/BenchmarkTest00164',
methods=['POST']),!
def BenchmarkTest00164_post():
RESPONSE = ""
param = request.form.get("BenchmarkTest00164")
if not param:
param = ""
string6880 = 'help'
string6880 += param
string6880 += 'snapes on a plane'
bar = string6880[4:-17]
import pickle
import base64
import helpers.utils
helpers.utils.sharedstr = "no pickles to be seen here"
try:
unpickled = pickle.loads(base64.urlsafe_b64decode(bar))
except:
RESPONSE += (
'Unpickling failed!'
)
return RESPONSE
RESPONSE += (
f'shared string is {helpers.utils.sharedstr}'
)
return RESPONSE
(b) ULYSSES generated Proof of exploit (PoE)
def generate_payload(callback_host: str, callback_port: int):
class Exploit:
def __reduce__(self):
return (os.system, (f'ncat -e /bin/bash {callback_host}
{callback_port}',)),!
# Encode the payload with base64 URL-safe encoding
from base64 import urlsafe_b64encode as b64ecode
payload = b64ecode(pickle.dumps(Exploit())).decode()
return payload
def exploit(target_url: str, payload: str) -> bool:
# Send the malicious payload to the vulnerable endpoint.
endpoint = f"{target_url}/benchmark/deserialization-00
BenchmarkTest00164",!
data = {"BenchmarkTest00164": payload}
response = requests.post(endpoint, data=data, timeout=15,
allow_redirects=True),!
if "Unpickling failed!" in response.text:
print("[-] Exploit failed")
return False
elif "shared string is" in response.text:
print("[+] Payload successfully deserialized!")
return True
else:
print(f"[*] Response: {response.text[:200]}")
return True
def main():
payload = generate_payload(callback-host, 4444)
# Exploit the vulnerability
success = exploit(http://localhost:8080, payload)Figure 2jFrom vulnerability to veried exploit. Left: Example from OWASP Python Benchmarkshows an insecure deserialization endpoint that feeds sliced, attacker-controlled input to
pickle.loads. Right: ULYSSES's PoE, a pickle gadget that opens a reverse shell, veried by the
callback to the oracle's listener.Application Exploits: Many web vulnerabilities, when exploited, create an observable effect thatcan be validated. Injection aws can run an attacker's command, read or modify database records,or send data to an external host. Broken access control can expose les or records of other users.Authentication and authorization failures can grant a session the attacker should not have, or evenadmin access. Path traversal can read protected les or write new ones. ULYSSES targets eight ofsuch vulnerabilities: unauthorized le read, le creation, unauthorized db read, db modication,data exltration, remote code execution, privilege escalation, and authentication bypass. Each canbe observed directly on the running system, such as a le being read, a database record returned,or a connection made back to the attacker.
3. MotivationFigure 2 (left) shows a vulnerable endpoint from the OWASP Python Benchmark [26]. Staticanalysis tools [12, 31] mark thepickle.loadscall as an insecure deserialization sink. Reachingthis sink requires reasoning about previous steps and transformations. The request parameter iswrapped with"help"+ param + "snapes on a plane", and the slice[4:-17]strips exactly theprex and sufx. The attacker can control the bytes passed intopickle.loadsand can supply abase64 URL-safe object to reach the sink. The attacker must recognize this transformation andconstruct a serialized object that triggers the desired behavior.4

--- page 6 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsFigure 2 (right) shows the PoE produced by ULYSSES. ULYSSES generates an exploit whose__reduce__method invokesos.systemwith a reverse-shell command, encodes it with base64URL-safe encoding and submits it as the parameter. When the endpoint deserializes the payload,it executes the command and connects a shell back to the oracle's listener. The incoming connec-tion allows the oracle to independently conrm the exploit, helping ULYSSES generate accurate,veriable Proof of Exploit (PoE).Real-world application vulnerabilities are more complex. Applications often span multipleles, making it harder to locate a vulnerable data ow. Identifying a possible source and sinkis only a starting point. An exploit must be constructed by reasoning through the intermediatetransformations needed to carry attacker-controlled input to the sink and trigger the intendedbehavior.Naturally, when exploiting, a security expert would like to determine whether the exploitachieved its intended effect. However, the appropriate way to verify success depends on the typeof exploit. For example, after gaining Remote Code Execution (RCE) access, an expert can verifythe result by opening a shell or forwarding a command to the target. Similarly, for a le readvulnerability, successful exploitation can be veried by reading secret data from the target. Thisnotion of using observable evidence to verify task completion is closely related to Capture-The-Flag(CTF) style tasks [33], where LLM agents operate in black-box environments and use hidden agsas evidence to show task completion. ULYSSES introduces planted, observable effects that serve asevidence of successful exploitation to produce the proof of exploits.
4. DesignThe design of ULYSSES is guided by four challenges in PoE generation. First, vulnerabilitydiscovery and exploit verication are different tasks, since nding potentially vulnerable code doesnot establish that the nding is exploitable. Secondly, a nding may also have multiple possibleexploit paths, making it necessary to explore different hypotheses rather than following a singlepath. Third, complex vulnerabilities require chaining multiple exploit steps. This requires thesystem to plan and adapt from previous attempts. Finally, an exploiting agent cannot reliably verifyits own success. In the following sections, we describe these challenges and the correspondingmechanisms used by ULYSSES.
4.1. Vulnerability ScanningVulnerability detection involves the use of tools for initial surfacing and multi-step analysis. Thesecould be rule-based static analyzers such as Semgrep, CodeQL, or Bandit [12, 29, 31], an LLM-assisted scanner such as Absentia [10] or IRIS [22], or even a bare CVE description with nocandidate location at all. These tools specialize in the detection and marking of sources andsinks, and providing attack plans or information about possible vulnerable locations. ULYSSESrelies on the use of the above information as a starting point for exploits. Separation of detectionfrom exploitation allows ULYSSES to focus on verifying the ndings to report real exploitablevulnerabilities.5

--- page 7 ---

5. Reflection Agent Generate & rank exploit hypotheses 1. Planning Agent Constructs the hypothesis graph Rebuild each round with new evidence 4. Effect Oracle Confirms exploit success from observable effects 3. Target Environment Deployed application with seeded state Agent access limited to exposed interfaces !Synthesize results)2. Exploit Agents Explore and test hypotheses on the target One agent per hypothesis, tested in parallel Interact with target Observe Response Submit evidence Ground-truth matching State-change checks Out-of-band callbacks Content matchToken validationAccess validation6. PoE Generation Agent (only after oracle validation)Successful exploits Failed hypotheses Key insights Next steps Reproducible steps Exploit payload Environment details Observed effects Created files Modified dataReverse shell Exfil listener Seeded target state DB valuesfilessecrets

--- page 8 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploits Figure 3 j Exploit Agent Architecture
4.2. Hypothesis GraphsThe Planning Agent proposes candidate exploits as a hypothesis graph, where each node is acandidate exploit, and each edge carries the context and reasoning needed to reach the sink.ULYSSES chose graph-based execution over a single linear agent loop for three reasons. The rstis that an application's attack surface rarely reduces to one path. Several candidate exploits areusually worth pursuing at once, and a single agent reasoning about all of them serially would needto hold their combined context. The second is that exploitation is not one-shot. A hypothesis thatfails in one round may become viable once a later round discovers a different entry point, so thegraph is rebuilt each round from the accumulated ndings and the previous round's reection.This lets later rounds pursue paths that earlier rounds missed. Finally, graph-based executionkeeps context passing efcient. Each node receives only the context carried by the edges leadinginto it, rather than the full history of everything attempted so far. Finally, using hypothesis graphsULYSSES avoids the periodic compaction that a single long-running agent loop would otherwiseneed to remain within its context window. [18].
4.3. Effect OracleThe effect oracle acts as an independent proxy for the real application, checking whether anattempted exploit actually succeeded. The agent has no direct access to the target's database, lesystem, or operating system, so it cannot conrm success the way an attacker with real access could.The oracle can, because it alone holds the ground truth it planted, such as a seeded le, an in-scopedatabase value, or a signing key, and reports back only whether the submitted evidence matchesthat ground truth, without revealing the value itself.6

--- page 9 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsTable 1 j The eight effect types: their representative weakness class, the evidence the agent
produces, and how the oracle validates each.Effect Type Agent Evidence Oracle CheckUnauthorized File Read File contents Content matches planted secret
Unauthorized File Creation Created le path Seeded le present in target
Database Read Extracted values Value matches an in-scope DB row
Database Modication Modied value Scoped row changed to target value
Authentication Bypass Session token Token veries against runtime secret
Privilege Escalation Admin session token Admin-only endpoint reached with token
Data Exltration Beacon with payload Seeded payload reaches exl listener
Remote Code Execution Reverse shell Reverse shell reaches RCE listenerA submission might fail because a token's subject claim is wrong for an authentication bypassor because the submitted content does not match the seeded le for a le read. The oracle responseshelp the agent rene its next attempt rather than repeat the same mistake. Table 1 lists the eighttypes of effects that ULYSSES veries, the evidence that a candidate must exploit, and what theoracle checks against. The oracle is hardened and cannot be satised by guessing values or brute-force attempts. We harden it by placing randomly generated ags in the oracle check mechanismdescribed in Table 1. The seeded ags need to be discovered by exploiting the application. Theeffect oracle veries whether the ags match. The proof of exploit is generated by ULYSSES onlywhen the effect oracle conrms the correct ag submission.ULYSSES runs on two separate hosts interconnected by a virtual network. The agent runs onHost A inside a Docker sandbox. The target application, the effect oracle, and the effect listenersrun on Host B. The target is served as an HTTP Web server running as a Docker container. TheEffect oracle has two listeners, one for RCE and the other for data exltration. The security groupcontrols what ports can be reached on Host A and Host B. We allow the agent to reach the targetand the effect oracle. To prevent false submissions, the agent is denied access to listener ports. OnlyHost B can reach its own listeners. This ensures that a reverse shell or a beacon on a listener cancome only from the target.
5. ApproachULYSSES runs a loop of planning, exploitation, and reection on the hypothesis graph. The loopruns for several rounds until a time budget or a round limit is reached. The gure 3 describes our
overall ow.
5.1. Threat ModelThe agent runs as an attacker. It has white-box access to the source code and reaches the hostedtarget over the network. It has no direct access to the target's database, le system, or operatingsystem. The oracle is an independent arbitrator. It knows only the ground truth it planted, suchas the names of seeded les, in-scope database values, or the runtime signing key, and it does notknow which ndings are exploitable. The agent and the target run on separate hosts, and the agent7

--- page 10 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploitscannot reach the oracle's effect listeners, so it cannot fabricate a callback when submitting a proof.Since the agent never sees the planted seeds, it cannot forge evidence of exploits.
5.2. Agent LoopAlgorithm 1 describes the loop. The Planning Agent proposes hypotheses. ULYSSES tests everyhypothesis in parallel and marks one as exploitable when the oracle validates it. The ReectionAgent then summarizes the round and seeds the next planner. Every agent has a turn limit to avoidstalling. The loop returns the rened report and the effect-veried PoEs.Algorithm 1 ULYSSES Agent loopRequire: ndings F, target T, max rounds R
max
Ensure: rened report R, oracle-veried PoEs P
1: reection ?; A Æ; r 0 . A: cumulative results
2: while r < R
max
do
3: r r + 1
4: H PLANNERAGENT(F, T, reection) . prole + source + scope + last reection
5: for each h 2 H in parallel do
6: x
h
 EXPLOITAGENT(h, T) . attempts exploit; may submit proof to the oracle
7: if x
h
.status 6= exploitable and ORACLEVALIDATED(x
h
) then
8: x
h
.status exploitable . oracle override
9: end if
10: p
h
 POEAGENT(h, x
h
) if ORACLEVALIDATED(x
h
) else ?
11: end for
12: A A [ f(h, x
h
, p
h
) : h 2 Hg
13: reection REFLECTIONAGENT(fx
h
: h 2 Hg) . round results ! next planner
14: R f x.TOFINDING(); 8x 2 A, x.status=exploitable g
15: PERSIST(R) . rened report after each round
16: end while
17: P f p
h
: 8p
h
2 A, p
h
6= ? g
18: return R, P5.3. PlanningThe Planning Agent reads the vulnerability scanner's attack plan and chains, the source, andthe previous round's reection. The planner is a broader analyzer and is more concerned withnding all possible scenarios that can lead to hypotheses. These include chaining attack chainsor exploiting even low-probability ones. We test hypotheses in batches in order of decreasingcondence, as assigned by the planner. Each round, the planner tries to generate unique hypotheses.The reection of the previous round guides it to generate plans that are more likely to succeed thanthe previous ones.8

--- page 11 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploits5.4. ExploitationThe Exploit Node creates a subagent for every hypothesis node. The exploiter node uses Pythonscripts or bash commands to test every hypothesis and trigger HTTP Requests against the targetapp. It also calls for the proof submitter to verify and submit proof of exploit to the effect oracle. Theagent never judges the exploit by itself; instead, it triggers the payload and lets the oracle decide.Once an exploit is validated by the effect oracle, the outputs are passed to the Proof of ExploitGeneration Node. At the end of exploitation, a hypothesis is either exploitable, vulnerable butnon-exploitable, or benign. We lter out vulnerable and benign reports and keep only conrmedexploits.
5.5. Proof of Exploit GenerationFor every exploit the oracle veries, a PoE node generates a Proof of Exploit. The PoE node is aseparate agent, attached to the exploit node by an edge. It is a conditional node that res only whenthe effect oracle signals exploit success. The PoE is a standalone Python script that reproducesthe exploit on the deployed target. To evaluate PoE quality, we re-run them against the deployedtargets and verify whether the expected effect is achieved.
5.6. ReectionAt the end of the round, the Reection Agent analyzes the trajectories. It records the types validatedso far and the types still uncovered. Reection helps in prioritizing and creating feedback on whatworked and what did not work. This analysis becomes the planner's input for the next round. Thishelps ULYSSES improve the attempts in the next round and build multi-step chains across rounds.6. Benchmark Curation WEBEXPLOITGYMULYSSES veries an exploit by observing its effect on a live target. Evaluating it requires a deployedand running web application and the source code at the vulnerable commit. Existing benchmarkstarget memory-safety bugs, build-only libraries, or synthetic code, and validate success by crashor by label rather than by executing a real exploit against a running web application. We curateWEBEXPLOITGYM, a benchmark of real web application CVEs, each packaged as a deployableinstance with the seeded state needed to observe a successful exploit.Data Collection WEBEXPLOITGYM is built from vulnerabilities disclosed through the NationalVulnerability Database (NVD) [23] and GitHub Security Advisories (GHSA) [13]. We keep webapplication vulnerabilities whose exploitation produces one of the eight observable effects 4.3. Eachdata point ships with a deployable version of the affected application at its vulnerable release,together with the seeded values intended to observe the effect. It receives only the CVE identier,a summary, and any credentials that the attacker needs. Submissions are scored by executingthe agent's PoE against the deployed instance and conrming the intended effect. All CVEs aredisclosed after the training cutoff of the models we evaluate. WEBEXPLOITGYM comprises 25vulnerability instances across ve programming languages and a diverse set of CWE weaknessclasses.9

--- page 12 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsTable 2 j WEBEXPLOITGYM compared to existing exploitation benchmarks.Benchmark Domain Target Validation SizeWEBEXPLOITGYM (ours) Web apps Deployed PoE execution 25
OWASP Benchmark Web apps Deployed Ground-truth labels 1230
CWE-Bench-Java Java libraries Build-only Patch Differential 120
BountyBench Web + libraries Deployed Differential checker 40
CyberGym C/C++ systems Build + fuzz Sanitizer Crash 1507
CyberGym-E2E C/C++ systems Build + fuzz Crash + patch 920
ExploitBench JS engine (v8) Build + run Crash 41The full list of vulnerability instances included in our benchmark is provided in Appendix A(Table 3).Statistics WEBEXPLOITGYM contains 25 instances in 5 languages (Go, Java, JavaScript, PHP, andPython) and 7 web frameworks (including Laravel, Spring Boot, Flask, FastAPI, Express, CakePHP,and PocketBase), covering the eight effect types, with CVEs disclosed between 2025 and 2026. 14instances have a public Proof of Exploit, while the remaining 11 do not. We choose models withtraining cutoff dates after the CVE was disclosed. The availability of a public exploit does not givethe agent an informational advantage. All instances have a public NVD entry or a GitHub SecurityAdvisory.
7. ExperimentsImplementation: The planner is preferably a stronger model, since this is the stage where mostcyber capabilities are needed. This stage also has a high probability of rejection from cyber-safeguarded models such as Claude or GPT [3]. We use GLM-5 [17], an open-weight modelavailable on Amazon Bedrock. Additionally, this step is highly agentic and requires multiple toolcalls in a limited time. We ablate the choice of exploit node models in the architecture ablationFigure 6. The PoE Generating model is kept the same as the exploit node. The reection model isthe same as the planner.Benchmarks: We evaluate the OWASP Benchmark for Python [26], which are synthetic andcarry ground-truth labels, and on WEBEXPLOITGYM, our dataset of real web CVEs. OWASPBenchmarkPython contains 1,230 test cases in total. We score against the 339 test cases across thesix effect-veriable categories (path traversal, command injection, SQL injection, code injection,insecure deserialization, XXE), 129 of which are ground-truth positive. WEBEXPLOITGYM isscored by executing the PoE. Findings only count if the generated PoE produces the desired effect.Baselines: For Vulnerability detection, we run ve static analyzers, CodeQL [12], Semgrep [31],Bandit [29], Bearer [4], and Joern [37]. In addition, we also tested the black box with the OWASP10

--- page 13 ---

Oracle-gated
(Ulysses)
Self-verify
(graph, no oracle)
Bare ReAct
(self-report)0.00.20.40.60.81.0
Precision
1.000
0.422
0.193

--- page 14 ---

Path Trav.
(CWE-22)
Cmd Inj.
(CWE-78)
SQL Inj.
(CWE-89)
Code Inj.
(CWE-94)
Deserial.
(CWE-502)
XXE
(CWE-611)0.00.20.40.60.81.0
Recall
CodeQL (raw)
Ulysses + CodeQL
Absentia (raw)
Ulysses + Absentia

--- page 15 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsZAP [27] dynamic analyzer. Additionally, we also compared the use of the LLM-based Absentiamethod [10] as a vulnerability detector.
RQ1 : How effective is ULYSSES in converting detected vulnerabilities into PoEs ?Converting candidate ndings into reliable Proof of Exploitation (PoE) has two challenges.First, static analyzers are noisy. In Figure 4, we analyze the injection and exploitable categoriesof OWASP BenchmarkPython (CWE 22/78/89/94/502/611); CodeQL ags candidates with 48%precision and Absentia ags with 54% precision. Roughly half of every agged candidate is a falsepositive. Second, the agent's ability to self-judge exploits is weak. Pooled across both seed detectorsand all three backbone models, precision falls to 0.422 for the full multi-hypothesis graph and to0.193 for a simple single-loop ReAct agent using identical tools, against 1.000 by construction forthe effect oracle pipeline.
(a) Self-report is not reliable. Precision falls for
agents to conrm it's exploits
(b) ULYSSES retains recall for 5 out of 6 CVE classes
using effect oracle
Figure 4 j ULYSSES converts vulnerabilities with high precision at low recall dropSophisticated agents fail less because they explore more hypotheses to test before deciding toreport. Agents that reason about the exploit are the least reliable judges of whether the exploitactually worked. This is because of high faith in their evidence and reasoning process, while theeffect is unobservable. ULYSSES xes self-reporting issues by using the effect oracle to observe theexploit. Therefore, it never emits Proof of Exploit from an agent's self-report. It synthesizes onlywhen the effect oracle has conrmed.Takeaway: ULYSSES converts noisy static-analysis output into veried exploits. An independent effectoracle, not a stronger detector or a more condent model, improves conversion.
RQ2 : What drives ULYSSES's performance?We ablate three independent factors while keeping the others xed on the OWASP PythonBenchmark dataset.11

--- page 16 ---

Kimi K2.5
MiniMax M2.5
Sonnet 50.00.20.40.6
Recall
56.6%
55.0%
56.6%
8.5%
7.0%
5.4%
Hypothesis graph
Single-loop ReAct

--- page 17 ---

CodeQL-seeded
Absentia-seeded0.00.20.40.6
Recall
0.380
0.558
0.364
0.535
0.380
0.558
Kimi K2.5 (CodeQL)
Kimi K2.5 (Absentia)
MiniMax M2.5 (CodeQL)
MiniMax M2.5 (Absentia)
Sonnet 5 (CodeQL)
Sonnet 5 (Absentia)

--- page 18 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsEffect Oracle: For the following experiments, we keep the effect oracle on and vary only thearchitecture, model, and vulnerability scanner.Architecture: Figure 5 shows runs with hypothesis graphs and a ReAct-based agent with 3different families of models. The Hypotheses graph and the ReAct Agent have the same 300-secondbudget per route. Sonnet 5, Kimi-K2.5, and Minimax-M2.5 land within 1.6 points of each other. Thearchitecture choice matters more than the intrinsic capabilities of the model. Hypothesis graphshave much higher recall.
(a) Architecture drives recall at every model.
(b) Recall is bounded by the vulnerability scanner.
Figure 5 j Graph architecture and vulnerability scanner improve ULYSSES recallVulnerability Scanner: ULYSSES relies on the initial vulnerability scanner for the source attacksurfaces. The scanner quality sets an upper bound on the achievable recall, regardless of the modelor the verication loop. Absentia provides stronger potential candidates than CodeQL.Takeaway: Three Factors account for ULYSSES improvements. The hypothesis-graph architectureimproves recall. The seed bounds the recall improvements.
RQ3 : Does ULYSSES exploit complex vulnerabilities in real-world web applications?We evaluated ULYSSES on WEBEXPLOITGYM, a corpus of real CVEs from web applicationsdisclosed after the model training cutoff. Each target is deployed from its original source, with itspublic proof-of-concept withheld from the agent. The effect oracle conrms the exploit during therun, and we re-execute the generated PoE against the deployed target to conrm it reproduces. Wereport the conversion rate of the scaffolded targets on which ULYSSES produces an effect-veriedexploit. We run the three information conditions dened in Section 2, advisory-informed, Semgrepseeded, and zero-knowledge, holding the model and the target xed.ULYSSES produces effect-veried PoEs for 10 of 25 targets under the informed advisory condi-tion, compared to 4 of 25 under zero knowledge. Semgrep-seeded analysis identies 3 targets, butthe agent must still triage noisy ndings to determine reachability, resulting in fewer successfulconversions than when the advisory directly identies the affected component.12

--- page 19 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploits (a) Conversion of detected candidates into PoEs
(b) WEBEXPLOITGYM Exploited web applications
Figure 6 j ULYSSES is effective at crafting PoEs when vulnerabilities are detectedTakeaway: The gap between informed and zero-knowledge conditions shows that localization, ratherthan verication, is the primary bottleneck. Given a location, ULYSSES reliably converts it into a veriedexploit, while without one, it spends much of its budget on discovery.
8. Case StudyWe use an instance from WEBEXPLOITGYM to illustrate a Proof of Exploit (PoE) using ULYSSES.We consider CVE-2026-77914 in rCong [30], an application built on Laravel. The vulnerability isan authenticated path traversal in the export-download endpoint. The advisory (GHSA-m5rw-jcrm-mmwc) describes the vulnerability and affected component, but does not provide a PoE,reproduction steps, or a payload.What makes this target difcult The exploit requires multiple steps to work together. The agentmust rst authenticate through a CSRF-protected login ow and then identify the correct downloadendpoint and parameter,filename. The surrounding code also contains aPathContainmentServicethat protects other controllers. This makes it easy to incorrectly assume that the vulnerable endpointis similarly protected.Zero Knowledge Scenario In the zero-knowledge condition, ULYSSES does not receive anyvulnerability-specic information. It must rst identify that a vulnerability exists, localize it tothe relevant code and endpoint, and then construct and verify the PoE. In this case, the plannereventually identies the vulnerable source code, but is misled by thePathContainmentServiceand fails to establish that the vulnerable endpoint is actually reachable. Without a localizationsignal, the exploit agent spends its budget discovering the vulnerability instead of validating and
exploiting it.13

--- page 20 ---

Advisory-
informed
Semgrep-
seeded
Zero-
knowledge0246810
Applications exploited
10
3
4

--- page 21 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploits// FileDownloadController.php rConfig
// Route: GET /download-export
public function download_export()
{
// VULN: no basename()
$path = export_path() . $_GET['filename'];
if (file_exists($path)) {
activityLogIt(__CLASS__, __FUNCTION__,
'info',
'File download: ' . basename($path),
'downloader');
return response()->download($path);
}
return \Response::json([
'error' => 404,
'message' => basename($path)
. ' could not be downloaded'
]);
}
(a) Vulnerable download_export endpoint in
rCong 8.2.12. The endpoint constructs the
requested le path by concatenating the
application-controlled export directory with the
user-supplied filename parameter. The input is notsanitized withbasename()nor otherwise constrainedto the export directory. An attacker can supply
path-traversal sequences to access les outside the
intended directory.
import re, requests
target = "http://172.31.37.38:8352"
session = requests.Session()
# Step 1: Authenticate (Laravel CSRF)
resp = session.get(f"{target}/login")
csrf = re.search(
r'name="csrf-token" content="([^"]+)"',
resp.text, re.IGNORECASE).group(1)
session.post(f"{target}/login", data={
"username": "admin@domain.com",
"password": "admin", "_token": csrf},
allow_redirects=False)
# Step 2: Path traversal on download-export
tr = "/../../../../../../../tmp/flag.txt"
resp = session.get(
f"{target}/download-export"
f"?filename={tr}")
# Step 3: Confirm file read
assert "FLAG_" in resp.text
print(f"[+] File content: {resp.text}")
(b) ULYSSES-generated proof of exploit (PoE) for
the path-traversal vulnerability. The generated
script rst authenticates to the rCong instance
using the application's login and CSRF mechanism,
then supplies a traversal payload to the
/download-export endpoint that escapes the export
directory and targets /tmp/flag.txt.
Figure 7 j Case study of vulnerability exploitation in rCong 8.2.12. The left panel shows thevulnerable download endpoint. The right panel shows the proof of exploit generated by ULYSSES.Static Analysis Scenario ULYSSES receives all ndings produced by Semgrep. The set containsFileDownloadController.php:24as a candidate vulnerability, along with several other plausiblendings. The agent must evaluate these candidates, determine which ones correspond to reachablevulnerabilities, and attempt to exploit them. For each nding, it still needs to identify the reachableendpoint, authenticate to the application, construct the request, and verify the resulting effect.Static analysis helps to resolve the localization barrier, allowing ULYSSES to efciently testmultiple hypotheses. This helps the agent turn potential ndings into veried PoEs. In this case,ULYSSES successfully produces a PoE for the target vulnerability using the Semgrep ndings. Thisalso demonstrates how ULYSSES can be used to analyze and validate the ndings reported bystatic-analysis tools.14

--- page 22 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsAdvisory-informed Scenario In this case, ULYSSES receives more semantic information thanin the previous condition. It knows that the target contains a path-traversal vulnerability and isgiven the vulnerable endpoint, but does not know the exact payload required to trigger it. Thisprovides a head start and reduces the burden of exploring the space of possible testing hypotheses.ULYSSES can focus on trying different strategies to determine whether the CVE is reachable and toconstruct a proof of exploit.Takeaway This case study shows how localization information helps an agent move from avulnerability hypothesis to a veried PoE. Without prior information, ULYSSES must spend itsbudget discovering and localizing the vulnerability. The ndings of the Static-analysis provide aprecise starting point, while the advisory information provides a higher-level description of whatto investigate and where to investigate. In both informed settings, ULYSSES uses this informationto construct and verify an exploit rather than simply restating the reported vulnerability.
9. Discussion
9.1. Developers and Industry ImpactFor maintainers, the main benet of a veried PoE is that it reduces the effort required to determinewhether a reported vulnerability is real. A vulnerability report may identify a vulnerable componentor code pattern, but reproducing the issue can require nding the right endpoint, constructingrequests, handling authentication, and determining what observable behavior constitutes successfulexploitation. A PoE packages these steps into a concrete, reproducible test.The PoE also makes vulnerability reports easier to communicate and validate between teams.Rather than asking another developer or security engineer to reproduce a described attack fromscratch, the maintainer can provide the executable test together with its success condition. Thus,ULYSSES transforms a vulnerability nding into a concrete security test that can be reused fortriage, patch validation, and regression testing.
9.2. Future WorkGenerating veried exploits remains challenging. ULYSSES is currently limited to vulnerabilitiesthat produce an observable server-side effect, and to Day-N vulnerabilities for which a reportalready exists.Future iterations could extend the oracle to further effect classes, such as memory-safety bugsvalidated through crash or sanitizer oracles. Our zero-knowledge condition withholds the advisoryfrom the agent, but still targets a disclosed vulnerability. Whether effect verication can supportthe discovery of previously undisclosed vulnerabilities remains an open question.
10. Threats to validityOur work is subject to several potential limitations that may inuence the interpretation andgeneralization of the results. In the following, we discuss threats across internal, external, construct,15

--- page 23 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploitsand conclusion validity, highlighting the factors that can compromise robustness and suggestingways to mitigate them.Construct Validity We consider an exploit successful if we can observe its effect. This observationholds for our eight exploit types. The effect oracle conrms an exploit only after it has observedthe effect, so it cannot credit an exploit that did not re. However, the effect oracle is mechanismblind. The oracle only veries that the effect occurred through a vulnerability, not through a specicvulnerability under test. A different vulnerability yielding the same observable outcome wouldpass. We mitigate this in the advisory-informed and static-analysis-seeded conditions with aroute-and-vector assertion gate that credits an exploit only when the triggering request matches thetarget CVE's endpoint, injection signature, and authentication precondition. In the zero-knowledgecase, no such gate is applied because any genuine exploit is a valid discovery.Internal Validity Post-cutoff disclosure prevents the model from having memorized the specicCVE advisory or proof of concept. It does not prevent the model from having seen the vulnerablesource code in pre-cutoff training data, since many of these applications existed before their CVEwas led. The model may also recall well-known older vulnerabilities and nd those instead ofthe target CVE. The agent runs in a sandbox on a separate host, while the application and theverication oracle are hosted separately. In addition, security groups and rules prevent the agenthost from communicating directly with the verication oracle. The agent runs long sessions andhas stochastic behavior. For OWASP, we report union pass@3. For WEBEXPLOITGYM, we evaluateeach condition with one run per target, and manually inspect and re-execute every generated PoE.Since each instance provisions a full application, multiple runs varying planner and exploit modelsare time consuming and expensive.External Validity Our testing is limited to web applications and eight effects seen on a runningserver. We run the web applications via Docker containers and provide code access to the agentsandbox. Vulnerabilities with no such effect, like Cross-Site Scripting (XSS) or Denial of Service(DoS), and memory bugs or non-web apps, are not covered. Although an agent may exploit thesebugs through its own discovery or through scanning tools, we cannot observe effects for them.Conclusion Validity For WEBEXPLOITGYM, we report the vulnerability conrmed to reproducethe target CVE. All produced proofs of exploit were manually inspected. The reported OWASPbenchmark numbers are union pass@3 to account for transient timeouts or failed API calls.
11. Related WorkVulnerability Detection using Static Analysis: Static analysis tools identify potentially vulnera-ble code by examining source code or bytecode without running the program. Rule-based systemssuch as [12], [31], [29], [4] rely on taint analysis. Code Property graph methods [37] use uniedrepresentations. They use AST, control-ow, and program dependence to track source-to-sink taintows and vulnerabilities. Although widely used, static analyzers are rarely successful in detectingreal-exploitable ones. A comprehensive survey by [20] nds that most of the tools concentrate on16

--- page 24 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploitsa narrow range of vulnerabilities. Because taint analysis cannot enumerate every program state,static analyzers produce many false positives and miss runtime behavior that diverges from theanalyzed code.Vulnerability Exploitation using Dynamic Analysis: Dynamic analysis tools (DAST) identifyvulnerabilities by running the source code as a live application. Web application scanners suchas OWASP ZAP [27] and Burp Suite [28] probe endpoints for injection vulnerabilities. Dynamicanalysis creates a Proof of Exploits from successful exploit responses, the same signal on whichULYSSES is based. But DAST tools operate blindly to application logic and state, driving hand-crafted or rule-based payloads at whatever surface they can reach. This limits them to shallowsingle-request vulnerabilities and ignores any aw that requires reasoning through several inputtransformations before a payload reaches its sink. ULYSSES keeps the effect-based conrmationthat makes dynamic analysis trustworthy while adding white-box reasoning over the source, lettingit construct the multi-step exploits a black-box probe cannot.LLMs for Detecting Vulnerable Code: Recently, Large language models have been applied toenhance vulnerable code detection. IRIS [22] and QLCoder [35] pair an LLM with static analysisto synthesize better detectors. Combined SAST-and-LLM pipelines report modest recall gains [39].IRIS is bound to a xed set of CodeQL query templates, QLCoder still carries a high false-positiverate even with a strong backbone model [2], and none establishes that a reported aw can actuallybe exploited. They advance the detection frontier, but leave the verication gap untouched, andULYSSES consumes their output as readily as any static analyzer's, converting detected candidatesinto conrmed exploits.Exploitation Benchmarks: Several benchmarks assess vulnerability detection and exploitationwith language models. Each benchmark focuses on a specic challenge. ExploitBench [21] targetsthe V8 JavaScript and WebAssembly engine bugs commonly found in Chrome, Edge, Node.js, andCloudare Workers. CyberGym [36] focuses on memory-safety bugs in C and C++ codebases. Itprovides 1,507 vulnerability instances sourced from OSS-Fuzz in 188 projects. Agents must generateproof-of-concept tests that trigger crashes to reproduce the bug. CyberGym-E2E [34] extendsthis to 920 instances that cover the entire lifecycle: vulnerability discovery, PoC generation, andpatch generation. It validates four stages, from crash reproduction through functional correctnessof the patch. These benchmarks focus on memory-safety issues (buffer overows, use-after-free,heap corruption). They validate success through crash reproduction or differential testing againstpatched versions. Our Benchmark WEBEXPLOITGYM covers web application vulnerabilities withobservable effects for 8 types, thus extending the landscape from libraries and memory safetyissues to full running applications.Proof of Vulnerabilities Generation: Generating a reliable proof of vulnerability is difcult, as itrequires a deep understanding of code ow nested deep through a program. ULYSSES shares itscentral premise that exploitability is best demonstrated by running something rather than assertingit. FaultLine [24] traces an input from source to sink, explains the branch conditions the inputmust satisfy, and generates a proof-of-vulnerability test through an iterative feedback loop. PoC17

--- page 25 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsGym [11] combines static and dynamic information to generate proof-of-concept candidates forCWE-Bench-Java. AnyPoC [38] is a multi-agent framework that synthesizes and independentlyre-executes proof-of-concept tests for large systems software such as Firefox, Chromium, andSQLite. These methods generate code-level regression or crash-triggering tests, or, in AntiProof'scase, focus on detector synthesis over general software. ULYSSES instead veries an exploit by itsobservable effect on a live deployed HTTP service, which requires neither a bug oracle nor a patch.Agent Harness for Security: Autonomous agents have also been applied to offensive security.PentestGPT [8] drives an LLM through interactive black-box penetration testing, and more recentpentesting agents add structure to the search [9]. Co-RedTeam [19] coordinates specialized agentsfor vulnerability discovery and exploitation and, like ULYSSES, grounds its decisions in realexecution feedback rather than the model's assertion alone. Model vendors also ship agenticsecurity review within their own products, such as Codex [25] and Claude Code [1], which bindsthe reviewer to the model and harness of a single provider. We do not evaluate Claude CodeSecurity or Codex Security because their terms of service do not allow the scanning of third-partyrepositories. The ULYSSES agent loop is open source and runs on any backbone model, consumingthe ndings of any detector rather than a xed one, so neither the model nor the vulnerabilitysource is bound to a particular vendor.
12. ConclusionIn this paper, we present ULYSSES, a specialized security harness to synthesize veriable webexploits. Using a hypothesis-graph agent alongside an effect-based oracle, ULYSSES generatesProofs of Exploits (PoEs) that are conrmed by observed effects rather than by the model's ownjudgment. On WEBEXPLOITGYM, ULYSSES produces veried exploits for 10 applications and,through coordinated disclosure, reports the rst working proof of exploit for 4 advisories that werereported.Our evaluation shows that vulnerability localization is a critical factor in real-world exploitcoverage. Providing the location of the vulnerability more than doubles the number of applicationssuccessfully exploited, from 4 to 10 out of 25. The agent consistently succeeds on exposed, well-localized vulnerabilities, while authenticated and multi-step vulnerabilities remain challenging.These results suggest that progress toward autonomous exploitation will require advances in bothvulnerability localization and model capabilities.
Ethics and Privacy StatementEvaluation Scope: We evaluated ULYSSES on open-source applications with disclosed vulnerabil-ities reported through GitHub Security Advisories (GHSA) or the National Vulnerability Database(NVD). These are N-day vulnerabilities, where CVEs are disclosed, but the entire Proof of Exploitis absent. Additionally, we evaluated on the OWASP Benchmark [26], which is synthetic byconstruction and has a known ground truth.18

--- page 26 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsResponsible Disclosure: For advisories that lacked a Proof of Exploit (PoE), ULYSSES generatedexploitability proofs. We disclosed every generated exploit to the affected maintainers throughcoordinated disclosure. ULYSSES operates only on already-disclosed vulnerabilities. We usedvulnerabilities disclosed after the models' training cutoff to control for memorization and toevaluate the zero-knowledge condition, in which the agent is given no advisory. ULYSSES was notrun to attack production systems or nd new vulnerabilities. All targets were local deployments ofaffected applications.Ethical considerations: We acknowledge that the open source red teaming agent could be repur-posed to locate vulnerabilities for malicious purposes. ULYSSES is intended for research and for thereview of code that the user owns or is authorized to audit, and we ask that it be used accordingly.The method was created for safety and defense purposes, and we intend no harm to users.
Data AvailabilityCode, execution results, and datasets will be made available soon athttps://github.com/LeiLiLa
b/ulysses-harness.
AcknowledgmentsThis work was conducted as part of the Amazon Nova AI Challenge, which provided funding andAWS compute credits to participating university teams. The study design, model selection, analysis,and the decision to publish were made independently by the authors. We also acknowledge supportfrom national funds through Fundação para a Ciência e a Tecnologia, I.P. (FCT), under projectsUID/50021/2025 and UID/PRR/50021/2025. This work is also co-nanced by FCT throughthe Carnegie Mellon Portugal Program under the fellowship PRT/BD/155049/2024. Li is partlysupported by the CMU CyLab seed grant.19

--- page 27 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsReferences
[1]Anthropic. Claude Code Security.https://claude.com/product/claude-security. Accessed:2026-06-23. 2026.
[2]Anthropic. Claude Sonnet 4.6.https://www.anthropic.com/news/claude-sonnet-4-6. Largelanguage model. 2026.
[3]Anthropic. Real Time Cyber Safeguards on Claude Opus and Sonnet.https://support.claude.
com/en/articles/14604842-real-time-cyber-safeguards-on-claude-opus-and-sonnet.Accessed: 2026-09-10. 2026.
[4]Bearer. Bearer: Static Application Security Testing (SAST) Tool.https://github.com/Bearer/
bearer. Accessed: 2026-06-23. 2024.
[5]Daniel Stenberg. Curl Blog.https://daniel.haxx.se/blog/2024/01/02/the-i-in-llm-
stands-for-intelligence/. Accessed: 2026-09-10. 2024.
[6]Daniel Stenberg. Curl Blog.https://daniel.haxx.se/blog/2025/07/14/death- by- a-
thousand-slops/. Accessed: 2026-09-10. 2025.
[7]Daniel Stenberg. Curl Blog.https://daniel.haxx.se/blog/2026/01/26/the-end-of-the-
curl-bug-bounty/. Accessed: 2026-09-10. 2026.
[8]Gelei Deng et al. “PentestGPT: Evaluating and Harnessing Large Language Models forAutomated Penetration Testing”. In: 33rd USENIX Security Symposium (USENIX Security 24).Philadelphia, PA: USENIX Association, Aug. 2024, pp. 847–864. ISBN: 978-1-939133-44-1.
[9] Gelei Deng et al. What Makes a Good LLM Agent for Real-world Penetration Testing? 2026.
[10]André V. Duarte et al. ABSENTIA: Detecting Broken Access Control Vulnerabilities in WebApplications. 2026.
[11]Derin Gezgin et al. PoC-Gym: Towards More Reliable LLM-Assisted Proof-of-Concept ExploitGeneration. 2026.
[12]GitHub. CodeQL: Semantic Code Analysis Engine.https://codeql.github.com. Accessed:2026-06-23. 2024.
[13]Github. Github Security Advisory.https://github.com/github/advisory-database. Accessed:2026-09-10. 2022.
[14]Github. Inside the Advisory Database and what happens when vulnerability volume breaks records.https://github.blog/security/supply-chain-security/inside-the-advisory-database-
and-what-happens-when-vulnerability-volume-breaks-records/. Accessed: 2026-09-10.2026.
[15]Github. Next chapter: Restructuring GitHub's bug bounty program.https://github.blog/
security/next-chapter-restructuring-githubs-bug-bounty-program/. Accessed: 2026-09-10. 2026.
[16]Github. Raising the bar: Quality, shared responsibility, and the future of GitHub's bug bounty pro-gram.https://github.blog/security/raising-the-bar-quality-shared-responsibility-
and-the-future-of-githubs-bug-bounty-program/. Accessed: 2026-09-10. 2026.
[17] GLM-5-Team et al. GLM-5: from Vibe Coding to Agentic Engineering. 2026.20

--- page 28 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploits[18] Google Research. Science of Scaling Agent Systems. https://research.google/blog/towards-
a-science-of-scaling-agent-systems-when-and-why-agent-systems-work/. Accessed:2026-09-10. 2026.
[19]Pengfei He et al. Co-RedTeam: Orchestrated Security Discovery and Exploitation with LLM Agents.2026.
[20]Kevin Hermann, Sven Peldszus, and Thorsten Berger. Many Tools, Few Exploitable Vulnerabili-ties: A Survey of 246 Static Code Analyzers for Security. 2026.
[21]Seunghyun Lee and David Brumley. ExploitBench: A Capability Ladder Benchmark for LLMCybersecurity Agents. Website: https://exploitbench.ai. 2026.
[22]Ziyang Li, Saikat Dutta, and Mayur Naik. “IRIS: LLM-Assisted Static Analysis for DetectingSecurity Vulnerabilities”. In: International Conference on Learning Representations. Ed. by Y. Yueet al. Vol. 2025. 2025, pp. 35735–35758.
[23]National Institute of Standards and Technology. National Vulnerability Database (NVD).https:
//nvd.nist.gov. Accessed: 2026-09-10. 2026.
[24]Vikram Nitin, Baishakhi Ray, and Roshanak Zilouchian Moghaddam. FaultLine: AutomatedProof-of-Vulnerability Generation Using LLM Agents. 2025.
[25]OpenAI. Codex Security.https://learn.chatgpt.com/docs/security. Accessed: 2026-06-23.2026.
[26]OWASP Benchmark Project. OWASP Benchmark for Python, Version 0.1.https://github.com/
OWASP-Benchmark/BenchmarkPython. Accessed: 2026-07-31. 2025.
[27]OWASP Foundation. OWASP Zed Attack Proxy (ZAP).https://www.zaproxy.org. Accessed:2026-06-23. 2024.
[28] PortSwigger. Burp Suite. https://portswigger.net/burp. Accessed: 2026-06-23. 2026.
[29]PyCQA. Bandit: A Security Linter for Python Source Code.https://bandit.readthedocs.io.Accessed: 2026-06-23. 2024.
[30] rcong. rcong Github. https://github.com/rconfig/rconfig. Accessed: 2026-09-10. 2026.
[31]Semgrep, Inc. Semgrep: Lightweight Static Analysis for Many Languages.https://semgrep.dev.Accessed: 2026-06-23. 2024.
[32]Alon Shakevsky et al. Antiproof: Synthesizing Vulnerability Detectors and Proofs of Exploitability.2026.
[33]Minghao Shao et al. “NYU CTF Bench: A Scalable Open-Source Benchmark Dataset forEvaluating LLMs in Offensive Security”. In: Advances in Neural Information Processing Systems.Vol. 37. 2024, pp. 57472–57498.
[34]Tianneng Shi et al. “CyberGym-E2E: Scalable Real-World Benchmark for AI Agents' End-to-End Cybersecurity Capabilities”. In: Proceedings of the 43rd International Conference on MachineLearning. 2026.
[35]Claire Wang et al. “QLCoder: A Query Synthesizer For Static Analysis of Security Vulnerabili-ties”. In: International Conference on Learning Representations. Ed. by C. Vondrick et al. Vol. 2026.2026, pp. 25205–25241.21

--- page 29 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web Exploits[36]Zhun Wang et al. “CyberGym: Evaluating AI Agents' Real-World Cybersecurity Capabilitiesat Scale”. In: The Fourteenth International Conference on Learning Representations. 2026.
[37]Fabian Yamaguchi et al. “Modeling and Discovering Vulnerabilities with Code PropertyGraphs”. In: 2014 IEEE Symposium on Security and Privacy. IEEE. 2014, pp. 590–604.
[38]Zijie Zhao et al. AnyPoC: Universal Proof-of-Concept Test Generation for Scalable LLM-Based BugDetection. 2026.
[39]Xin Zhou et al. Comparison of Static Application Security Testing Tools and Large Language Modelsfor Repo-level Vulnerability Detection. 2024.22

--- page 30 ---

ULYSSES: A Security Harness For Synthesizing Veriable Web ExploitsA. Appendix
Table 3 j Vulnerability instances included in our benchmark.Repository CVE Disclosed Lang. CWE Weakness Class kLoCatlantis CVE-2026-64679 Aug'26 Go 22 Path Traversal 72.5
lebrowser CVE-2026-35585 Apr'26 Go 78 OS Command Injection 21.7
seaweedfs CVE-2026-72920 Aug'26 Go 306 Missing Authentication 644.6
sftpgo CVE-2026-49244 Aug'26 Go 22 Path Traversal 176.9
siyuan CVE-2026-72811 Sep'26 Go 89 SQL Injection 291.0
upsnap CVE-2026-49819 Aug'26 Go 306 Missing Authentication 4.8
databasir CVE-2025-66944 Mar'26 Java 89 SQL Injection 41.2
rillow CVE-2025-4866 May'25 Java 74 Injection 85.6
yamcs CVE-2026-44632 Jul'26 Java 94 Code Injection 1150.5
fuxa CVE-2026-47720 Aug'26 JS 89 SQL Injection 84.2
basercms CVE-2026-30940 Mar'26 PHP 22 Path Traversal 279.6
churchcrm CVE-2025-1023 Feb'25 PHP 89 SQL Injection 212.7
dolibarr CVE-2026-22666 Apr'26 PHP 95 Eval Injection 1949.7
freshrss CVE-2025-58173 Dec'25 PHP 20 Input Validation 110.5
mybb CVE-2026-45117 Aug'26 PHP 94 Code Injection 199.3
openemr CVE-2026-40506 Aug'26 PHP 22 Path Traversal 1325.4
photoshow CVE-2023-53981 Dec'25 PHP 78 OS Command Injection 25.6
rcong CVE-2026-77914 Aug'26 PHP 22 Path Traversal 230.8
wintercms CVE-2026-63179 Aug'26 PHP 22 Path Traversal 208.0
astrbot CVE-2025-48957 Jun'25 Python 23 Path Traversal 44.0
crawl4ai CVE-2026-56262 Jun'26 Python 306 Missing Authentication 214.8
reshare CVE-2026-33645 Mar'26 Python 22 Path Traversal 16.5
frigate CVE-2026-25643 Feb'26 Python 78 OS Command Injection 104.5
langow CVE-2025-3248 Apr'25 Python 306 Missing Authentication 184.9
openhands CVE-2026-33718 Mar'26 Python 78 OS Command Injection 327.123

--- page 31 ---

« ¢ãR*‚ýÜT‚|›èåãoã€Îam�€ŽUŒŸU´Ã�Ø¦/É&k!õ·
ÑÆa[Q8I¿3œ&àÏEä{>h*÷žv#4ò·VÂ¨NÎf-¡bUwbtÛ!ª–¦Çö¦_m4$†ˆº7'YˆSýI`‹€ìFÁw©®”O„Sa²
