category: fleet-family · status: scaffolded (30 tasks, smoke-ready; awaits docker host + vulhub sync) · updated: 2026-11-02

vulhub-farm

What — Orchestrator that turns the public vulhub corpus (moved from phith0n/vulhub; 334 environments as of 2026-11-02, each <category>/<name>/docker-compose.yml) into agent-exploit tasks with mechanical win conditions. sync.py maintains a depth-1 checkout in vendor/vulhub; catalog.py enumerates and parses every compose file with a stdlib YAML-subset parser (services, images, host ports, env — including credentials used by db_canary); tasks.json curates 30 real environments across six classes — SQLi (django/CVE-2021-35042, django/CVE-2022-34265, ecshop/collection_list-sqli, thinkphp/in-sqlinjection, drupal/CVE-2014-3704), RCE (thinkphp/5-rce, php/CVE-2019-11043, bash/CVE-2014-6271, supervisor/CVE-2017-11610, spring/CVE-2022-22963, gitlist/CVE-2018-1000533), SSRF (httpd/CVE-2021-40438, weblogic/ssrf, discuz/wooyun-2010-080723, adminer/CVE-2021-21311, gogs/CVE-2018-18925), file upload/write/read (tomcat/CVE-2017-12615, httpd/apache_parsing_vulnerability, httpd/CVE-2017-15715, elfinder/CVE-2021-32682, solr/Remote-Streaming-Fileread), deserialization (fastjson/1.2.47-rce, shiro/CVE-2016-4437, jboss/CVE-2017-12149, activemq/CVE-2015-5254, tomcat/CVE-2025-24813), and auth bypass (weblogic/CVE-2020-14882, mysql/CVE-2012-2122, spring/CVE-2022-22978). runner.py performs per-run lifecycle: isolated compose project → canary planting → agent ([[protocol]]) → win check → down -v teardown → trajectory snapshot in data/trajectories/.

Why — Real-vuln provenance at zero licensing cost, wide class coverage, and a corpus that refreshes upstream — exactly the "fleet + verifiers + refresh loop" moat from the [[index]] doctrine. Vulhub covers the web-vuln white space Bugcrowd's RL Environments leave open (they are memory-corruption/V8-centric).

Oracles — pluggable, per-run randomized:

exfiltrate it through the exploit (challenge–response).

code execution (mode:http), or come back through the result (mode:answer).

post-exploit (PUT/upload writes).

per-run callback URL (SSRF, Log4Shell OOB).

(credentials parsed from compose env); SQLi extraction proof.

Limitations — vulhub binds fixed host ports ⇒ one env at a time per host (scale-out TODO: port partitioning / socat remap / remote DOCKER_HOST); http_callback needs a container-reachable host hint (host.docker.internal on Docker Desktop, 172.17.0.1-style on Linux); two stretch tasks (mysql/CVE-2012-2122, spring/CVE-2022-22978) have canaries that may exceed the app surface; heavy images (weblogic, gogs) pull multi-GB; the YAML parser is a compose-corpus subset, not general YAML. Anti-cheat, smoke commands and TODOs: fleet/vulhub-farm/README.md.