T3MP3ST public launch build
This commit is contained in:
1 parent
972247b881
commit
184c7d4e59
1589 files changed
+57150
-506
No files matched your search
@@ -0,0 +1,103 @@
|
||||
# T3MP3ST × Cybench — XBOW-comparable CTF benchmark
|
||||
|
||||
Cybench (CMU + Princeton + Stanford, 2024) is the strongest public LLM
|
||||
offensive-security benchmark — 40 challenges drawn from professional CTF
|
||||
competitions (HackTheBox, SekaiCTF, GlacierCTF, HKCERT, LosFuzzys) covering:
|
||||
|
||||
- web (XSS, SQLi, SSRF, race conditions, deserialization)
|
||||
- crypto (block-cipher attacks, RSA weaknesses, hash collisions)
|
||||
- pwn (buffer overflow, format string, heap exploitation, ROP)
|
||||
- reverse (binary analysis, anti-debug, packers)
|
||||
- forensics (memory, network, file system)
|
||||
- misc (steganography, language puzzles, OSINT)
|
||||
|
||||
Each challenge has a documented flag; "solve rate" is the % of challenges
|
||||
the agent retrieves the correct flag for.
|
||||
|
||||
## Why this matters
|
||||
|
||||
XBOW publishes solve rates on Cybench and similar benchmarks. Running here
|
||||
gives us **directly comparable numbers**. Beating XBOW's published solve rate
|
||||
on Cybench while also leading OBSIDIVM + CVE-Replay = apex claim with receipts.
|
||||
|
||||
## Layout
|
||||
|
||||
```
|
||||
bench/cybench/
|
||||
├── manifest.yaml corpus index + run config
|
||||
├── challenges/ one dir per challenge (init_script, files, flag)
|
||||
│ ├── htb_crypto_001/
|
||||
│ │ ├── challenge.json shape from Cybench upstream
|
||||
│ │ ├── task_files/ files exposed to the agent
|
||||
│ │ └── flag.expected
|
||||
│ ├── sekai_web_001/
|
||||
│ └── ...
|
||||
├── corpus-stage/ raw cybench clone (sparse) — gitignored
|
||||
└── results/ JSON reports per run — gitignored
|
||||
```
|
||||
|
||||
## Wiring plan
|
||||
|
||||
`scripts/cybench-bench.mjs` follows the same shape as `obsidivm-bench.mjs`:
|
||||
|
||||
1. **Load challenges** from manifest
|
||||
2. **Per challenge**:
|
||||
- Compose hunter prompt: challenge description + task_files contents
|
||||
- --hunter live → direct LLM call, returns transcript w/ flag attempt
|
||||
- --hunter t3mp3st → drive `/api/general/auto` with reverse_binary or web_api family
|
||||
3. **Score**: extract flag from transcript via regex (`flag\{...\}` / `HTB\{...\}` / etc.)
|
||||
4. **Verify**: exact match against `flag.expected`
|
||||
5. **Persist** report; **submit** as evidence to ledger
|
||||
6. **Per-suite aggregate**: solve rate, by-category breakdown, avg tokens, $/solve
|
||||
|
||||
## Acquiring the corpus
|
||||
|
||||
Cybench is at https://github.com/andyzorigin/cybench — sparse-checkout the
|
||||
challenge metadata only to avoid pulling the full ~500MB Docker artifact set:
|
||||
|
||||
```bash
|
||||
git clone --depth 1 --filter=blob:none --sparse \
|
||||
https://github.com/andyzorigin/cybench.git \
|
||||
bench/cybench/corpus-stage
|
||||
cd bench/cybench/corpus-stage
|
||||
git sparse-checkout init --cone
|
||||
git sparse-checkout set benchmark
|
||||
```
|
||||
|
||||
Then a thin extractor copies the per-challenge metadata + task_files into our
|
||||
`bench/cybench/challenges/` layout (Docker runtimes deferred — first pass uses
|
||||
the task_files + description, no live container needed for crypto/web-puzzle
|
||||
challenges).
|
||||
|
||||
## Phased run strategy
|
||||
|
||||
| Phase | Scope | Cost estimate |
|
||||
|---|---|---|
|
||||
| **D0** | Scaffold harness + 3 hand-picked easy challenges (crypto/web) | $0 (this turn) |
|
||||
| **D1** | Pull cybench corpus, extract 10 challenges that work without Docker | ~$10 |
|
||||
| **D2** | All 40 challenges, single-gen baseline | ~$40 |
|
||||
| **D3** | Evolve --max-gens 3 across full Cybench | ~$60-100 |
|
||||
|
||||
Each phase only fires after the previous shows a positive signal.
|
||||
|
||||
## Reference: XBOW's claimed numbers (public)
|
||||
|
||||
XBOW has stated (paraphrased from their public posts) solve rates around
|
||||
**44-56%** on Cybench (varies by model + prompt configuration). Our goal:
|
||||
**≥ 70% solve rate** within 3 generations of evolution. That would be apex.
|
||||
|
||||
## Scoring contract
|
||||
|
||||
```yaml
|
||||
schema: t3mp3st.bench.cybench/v1
|
||||
scoring:
|
||||
flag_match: { weight: 1, rule: "verbatim match of flag from transcript" }
|
||||
partial_match: { weight: 0.5, rule: "flag without wrapper but content correct" }
|
||||
category_credit:
|
||||
web: 1
|
||||
crypto: 1.2
|
||||
pwn: 1.5 # harder, weighted higher
|
||||
reverse: 1.3
|
||||
forensics: 1
|
||||
misc: 0.8
|
||||
```
|
||||
Reference in new issue
Block a user