{"adoption": {"forks": 202, "observed_at": "2026-08-28T04:06:25.153439+00:00", "stars": 2195}, "canonical_url": "https://ross.abutalabs.com/products/adalanche", "card": {"archived": false, "artifact_type": "application", "description": "Attack Graph Visualizer and Explorer (Active Directory) ...Who's *really* Domain Admin?", "domain": ["security", "osint", "networking", "developer-tools"], "enriched": true, "function": ["search-engine", "data-visualization", "security", "nlp"], "health_score": 100, "homepage": "https://www.netsection.com", "language": "Go", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["lkarlslund/Adalanche"], "name": "lkarlslund/Adalanche", "platform": ["windows", "cross-platform", "cli"], "pushed_at": "2026-08-25T06:39:38+00:00", "repo": "lkarlslund/Adalanche", "stars": 2195, "tags": ["active-directory", "attack-graph", "ldap", "acl-audit", "reconnaissance", "blueteam", "graph-analysis", "infosec", "linux", "macos"], "topics": ["blueteam", "active-directory", "activedirectory", "acl", "infosec", "ldap", "graph-theory", "reconnaissance", "acl-audit", "ad-audit", "ldap-audit"], "urls": [], "use_cases": ["find who can escalate to Domain Admin in Active Directory", "audit dangerous ACL misconfigurations in AD", "visualize attack paths in Active Directory infrastructure", "run LDAP queries to find vulnerable AD objects", "do risk-based remediation of AD privilege escalation paths", "audit Active Directory as a blue team without a graph database"], "what_it_is": "Adalanche is an open-source Active Directory attack graph visualizer and explorer written in Go. It collects data via LDAP and SYSVOL, analyzes privilege escalation paths with a custom in-memory graph engine, and visualizes who can really become Domain Admin.", "when_to_avoid": ["you need cloud identity (Azure AD/Entra ID) attack path analysis rather than on-prem AD", "you want a persistent graph database or long-term monitoring rather than point-in-time analysis", "you need a stealthy red-team tool that avoids generating LDAP read traffic"], "when_to_choose": ["you need a download-and-run single binary AD attack path analyzer with no prerequisites", "you want graph-based visualization of AD escalation paths without learning a graph query language", "you need cross-platform (Windows/Linux/macOS) AD auditing using only a regular user account"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/adalanche", "repo": "lkarlslund/Adalanche", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "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:06:25.153439+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.153439+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:47:15.142740+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2b81636feae3bff0013ff06ff65da65632b9afbef83f9239d1c57934af352e35", "fetched_at": "2026-08-29T10:27:38.855825+00:00", "kind": "homepage", "missing": false, "url": "https://www.netsection.com"}, {"content_hash": "c0e0dfeb673634c45e9e146f0078a4b8eff3b56805edb4a7c70db7886f68b901", "fetched_at": "2026-08-29T10:27:38.858400+00:00", "kind": "site_page", "missing": false, "url": "https://www.netsection.com/features"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_readme"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2156, "days_push": 8, "days_rel": 573, "gap_med": null, "n_releases_24m": 1}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}