{"adoption": {"forks": 175, "observed_at": "2026-08-28T04:03:29.604415+00:00", "stars": 1077}, "canonical_url": "https://ross.abutalabs.com/products/privexchange", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Exchange your privileges for Domain Admin privs by abusing Exchange", "domain": ["security", "penetration-testing", "windows"], "enriched": true, "function": ["security", "penetration-testing", "http-client"], "health_score": 20, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["dirkjanm/PrivExchange"], "name": "dirkjanm/PrivExchange", "platform": ["python", "cli", "windows"], "pushed_at": "2020-01-23T19:48:51+00:00", "repo": "dirkjanm/PrivExchange", "stars": 1077, "tags": ["active-directory", "exchange", "ntlm-relay", "privilege-escalation", "red-team", "impacket", "proof-of-concept", "linux", "macos"], "topics": [], "urls": [], "use_cases": ["abuse Exchange push subscriptions to capture SYSTEM authentication", "relay NTLM authentication to escalate to Domain Admin", "demonstrate Exchange privilege escalation vulnerabilities in pentests", "test whether Exchange servers are patched against PrivExchange attacks", "integrate an Exchange attack module into ntlmrelayx workflows"], "what_it_is": "PrivExchange is a set of Python proof-of-concept tools that abuse Exchange Web Services push notifications to relay authentication and escalate privileges to Domain Admin. It includes a standalone attack tool and an ntlmrelayx attack module for credential-less exploitation.", "when_to_avoid": ["you need a maintained tool with recent updates and support for modern Exchange", "you are not authorized to test the target environment", "your target runs patched Exchange with the vulnerability mitigated"], "when_to_choose": ["you are performing an authorized penetration test against an Active Directory environment with Exchange", "you need to verify whether Exchange servers are vulnerable to the pushSubscription abuse", "you want a lightweight impacket-based relay attack tool"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/privexchange", "repo": "dirkjanm/PrivExchange", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "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:03:29.604415+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:29.604415+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:53:14.508422+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "02278653b0f93d0519f24886bd2bca418d1b4e6bf2e83e15ca40a1ff91d541ed", "fetched_at": "2026-08-28T04:03:29.604415+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dirkjanm/PrivExchange"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2781, "days_push": 2414, "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}}