{"adoption": {"forks": 229, "observed_at": "2026-08-28T04:05:22.726369+00:00", "stars": 1692}, "canonical_url": "https://ross.abutalabs.com/products/mfasweep", "card": {"archived": false, "artifact_type": "cli-tool", "description": "A tool for checking if MFA is enabled on multiple Microsoft Services", "domain": ["security", "penetration-testing", "cloud-computing"], "enriched": true, "function": ["security", "penetration-testing", "auth", "cli"], "health_score": 66, "homepage": null, "language": "PowerShell", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["dafthack/MFASweep"], "name": "dafthack/MFASweep", "platform": ["windows", "cli", "cross-platform"], "pushed_at": "2026-04-13T17:19:09+00:00", "repo": "dafthack/MFASweep", "stars": 1692, "tags": ["mfa", "microsoft-365", "azure", "adfs", "conditional-access", "red-team", "powershell"], "topics": [], "urls": [], "use_cases": ["check if MFA is enabled across Microsoft services for an account", "find Microsoft services left single-factor due to conditional access gaps", "audit MFA inconsistencies in a Microsoft 365 tenant", "test whether ADFS allows single-factor login", "pentest Azure AD accounts for MFA bypasses", "verify conditional access policy coverage per protocol"], "what_it_is": "MFASweep is a PowerShell script that attempts to log in to multiple Microsoft services with provided credentials to detect whether MFA is enforced on each. It covers Graph API, Azure Resource Manager, Exchange Web Services, the M365 web portal with various user agents, Active Sync, and on-prem ADFS.", "when_to_avoid": ["you lack authorization to test the target account (account lockout and legal risk)", "you need a continuous MFA monitoring solution rather than a point-in-time check", "you need non-Microsoft identity provider coverage"], "when_to_choose": ["you have authorized credentials and need to audit MFA enforcement across Microsoft services", "you are doing a security assessment of an Azure AD/M365 tenant", "you want to detect protocols bypassing conditional access policies"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mfasweep", "repo": "dafthack/MFASweep", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "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:05:22.726369+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:22.726369+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:38:13.323263+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "52dcc6cd40b05febd76095aa7a6da28d79a77c4cf769c5ba5cbbde97ee906023", "fetched_at": "2026-08-28T04:05:22.726369+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dafthack/MFASweep"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 77, "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": 2171, "days_push": 142, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}