{"adoption": {"forks": 493, "observed_at": "2026-08-28T04:07:10.785627+00:00", "stars": 2687}, "canonical_url": "https://ross.abutalabs.com/products/learnjavabug", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Java安全相关的漏洞和技术demo，原生Java、Fastjson、Jackson、Hessian2、XML反序列化漏洞利用和Spring、Dubbo、Shiro、CAS、Tomcat、RMI、Nexus等框架\\中间件\\功能的exploits以及Java Security Manager绕过、Dubbo-Hessian2安全加固等等实践代码。", "domain": ["security", "penetration-testing", "developer-tools", "tutorials"], "enriched": true, "function": ["security", "penetration-testing", "vulnerability-scanning", "reverse-engineering", "serialization"], "health_score": 20, "homepage": null, "language": "Java", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["threedr3am/learnjavabug"], "name": "threedr3am/learnjavabug", "platform": ["jvm", "cross-platform"], "pushed_at": "2024-03-14T15:05:53+00:00", "repo": "threedr3am/learnjavabug", "stars": 2687, "tags": ["java-security", "deserialization-vulnerabilities", "exploit-demos", "fast", "jackson", "dubbo", "shiro", "vulnerability-research", "security-research", "poc"], "topics": [], "urls": [], "use_cases": ["reproduce fast deserialization RCE vulnerabilities", "learn jackson deserialization exploit gadgets", "study dubbo hessian2 deserialization attacks and hardening", "understand padding oracle CBC attacks in Java", "find exploit demos for Shiro and Spring middleware vulnerabilities", "learn Java Security Manager bypass techniques", "study SSRF and DNS lookup gadgets in JSON deserialization"], "what_it_is": "A collection of Java security vulnerability demos and exploit proof-of-concepts covering deserialization issues in libraries like Fast, Jackson, and Hessian2, plus exploits for frameworks and middleware such as Spring, Dubbo, Shiro, CAS, and Tomcat. It also includes Java Security Manager bypass techniques and security hardening examples, serving as the author's personal technical notes for security research.", "when_to_avoid": ["you need a production security scanning tool", "you want automated vulnerability detection rather than manual demos", "you are not working with the Java/JVM ecosystem", "you intend to use exploits against systems without authorization"], "when_to_choose": ["you are a security researcher studying Java deserialization vulnerabilities", "you need reference PoC code for fast, jackson, or dubbo exploits", "you want to learn how middleware like Shiro, Tomcat, or CAS are exploited", "you need examples of Java security hardening like hessian2 blacklists"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/learnjavabug", "repo": "threedr3am/learnjavabug", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.785627+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:17:46.703120+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "00db78cac12175bb8363f3af0ea6c484bcaf6199370a0cb21e4251433586dc0e", "fetched_at": "2026-08-28T04:07:10.785627+00:00", "kind": "readme", "missing": false, "url": "https://github.com/threedr3am/learnjavabug"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3043, "days_push": 902, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}