Skip to content

fix(data): rebadge ENTRA-SSPR-001 to MFA Registration Campaign semantics (closes #355)#397

Merged
Daren9m merged 1 commit into
mainfrom
fix/355-sspr-rename
Apr 30, 2026
Merged

fix(data): rebadge ENTRA-SSPR-001 to MFA Registration Campaign semantics (closes #355)#397
Daren9m merged 1 commit into
mainfrom
fix/355-sspr-rename

Conversation

@Daren9m
Copy link
Copy Markdown
Collaborator

@Daren9m Daren9m commented Apr 30, 2026

Summary

Closes #355. Surfaced upstream by Galvnyz/M365-Assess#878. The CheckID ENTRA-SSPR-001 had a name + CIS 5.2.4.1 mapping suggesting it measured Self-Service Password Reset enablement, but the Graph signal that downstream collectors actually read is the MFA Registration Campaign:

/v1.0/policies/authenticationMethodsPolicy
  → registrationEnforcement.authenticationMethodsRegistrationCampaign

These are different controls. Microsoft historically nested the registration-campaign config under the SSPR policy object in Graph for legacy reasons, but functionally it's MFA enrollment acceleration, not password reset. Result: any consumer that implements ENTRA-SSPR-001 ends up either (a) measuring the wrong setting under the SSPR label, or (b) leaving CIS 5.2.4.1 unimplemented. Both produce misleading reports.

Approach: Option C from #355

The issue listed three options. Picking Option C (rename + unmap, preserving CheckID for backwards compatibility) because:

What changed

Field Before After
name Ensure 'Self service password reset enabled' is set to 'All' Ensure MFA Registration Campaign is enabled to nudge users toward stronger methods
category SSPR AUTHMETHOD
cisM365ControlId 5.2.4.1 (removed)
cisM365Profiles [E3-L1, E5-L1] (empty)
frameworks.cis-m365-v6 populated (removed)
rationale password-reset framing Registration Campaign + AiTM/SIM-swap framing
impact helpdesk-load framing weaker-method retention + AiTM exposure framing
references SSPR Microsoft Learn pages Registration Campaign docs
impactRationale generic boilerplate refreshed for Registration Campaign

What didn't change

  • CheckID stays ENTRA-SSPR-001 (Option C tradeoff: the SSPR-prefixed CheckID name is now technically misleading, deferred to a future rename under v1.0)
  • collector stays Entra (correct)
  • scfPrimary / scfAdditional stay IAC-10.x (multifactor authentication / authentication management) — these still apply
  • remediation.portal.path stays "Entra admin center > Protection > Authentication methods > Registration campaign" — was already correct, the inconsistency was in the surrounding metadata
  • Other framework mappings (NIST 800-53, CMMC, SOC 2, ISO 27001/27002, FedRAMP, PCI-DSS, MITRE ATT&CK, NIST CSF) preserved

CIS 5.2.4.1 coverage gap

This PR explicitly leaves CIS M365 v6 §5.2.4.1 (real SSPR-enabled-for-All check) unmapped. A future ENTRA-SSPR-002 will measure actual SSPR enablement via the correct Graph endpoint. Filed in the audit-followup tracker for #375 (authentication methods) eventually.

Files

  • data/scf-check-mapping.json — surgical edit to ENTRA-SSPR-001 entry
  • data/registry.json — surgical edit (mirrors scf-check-mapping change + drops frameworks.cis-m365-v6)
  • CHANGELOG.md[Unreleased] / Fixed entry

Test plan

Out of scope

  • Filing the new ENTRA-SSPR-002 for genuine SSPR enablement — separate issue, file once a Graph endpoint is identified
  • Renaming ENTRA-SSPR-001ENTRA-AUTHMETHOD-REGCAMPAIGN-001 (Option A) — deferred to v1.0 cross-repo contract bump infrastructure
  • Updating downstream consumer code (M365-Assess, etc.) — they pull the new metadata on next sync

…ics (closes #355)

Downstream collectors read Microsoft Graph
/v1.0/policies/authenticationMethodsPolicy → registrationEnforcement.authenticationMethodsRegistrationCampaign
for this CheckID, not SSPR enablement (despite the SSPR-prefixed name and CIS
5.2.4.1 mapping). Microsoft historically nested registration-campaign config
under the SSPR policy object in Graph for legacy reasons; functionally it's
MFA enrollment acceleration.

Applied Option C from #355 (rename + unmap, preserving CheckID for backwards
compat — full A-style split deferred to v1.0 cross-repo contract infrastructure
where consumer notification is automated):

- name: "Self service password reset enabled = All" -> "MFA Registration
  Campaign enabled to nudge users toward stronger methods"
- category: SSPR -> AUTHMETHOD
- rationale + impact: rewritten for Registration Campaign + AiTM/SIM-swap
  threat framing
- references: now point at Microsoft Learn registration-campaign docs
- cisM365ControlId 5.2.4.1 dropped (RegCampaign is not 5.2.4.1)

CIS 5.2.4.1 coverage of actual SSPR enablement is now an explicit gap; future
ENTRA-SSPR-002 fills it.

Surfaced upstream by Galvnyz/M365-Assess#878.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Framework mapping count delta

Framework main this PR Δ Δ% Status
cis-controls-v8 1020 1020 0 +0.00% ✓ OK
cis-m365-v6 180 179 -1 -0.56% ⚠️ DROP
cisa-scuba 52 52 0 +0.00% ✓ OK
cmmc 1080 1080 0 +0.00% ✓ OK
eidsca 21 21 0 +0.00% ✓ OK
essential-eight 630 630 0 +0.00% ✓ OK
fedramp 1072 1072 0 +0.00% ✓ OK
gdpr 11 11 0 +0.00% ✓ OK
hipaa 501 501 0 +0.00% ✓ OK
iso-27001 1020 1020 0 +0.00% ✓ OK
iso-27002 1020 1020 0 +0.00% ✓ OK
iso-27017 1012 1012 0 +0.00% ✓ OK
mitre-attack 892 892 0 +0.00% ✓ OK
nis2 311 311 0 +0.00% ✓ OK
nist-800-171 1080 1080 0 +0.00% ✓ OK
nist-800-53 1072 1072 0 +0.00% ✓ OK
nist-csf 826 826 0 +0.00% ✓ OK
pci-dss 1052 1052 0 +0.00% ✓ OK
soc2 1103 1103 0 +0.00% ✓ OK
stig 13 13 0 +0.00% ✓ OK

Result: ✓ PASS — no framework mapping regressions detected.

@github-actions
Copy link
Copy Markdown

Content enrichment population

Overall (1105 checks): rationale 26.3% (291/1105) • impact 26.3% (291/1105) • references 26.3% (291/1105)

Framework n rationale impact references
cis-controls-v8 1020 25.1% (256/1020) 25.1% (256/1020) 25.1% (256/1020)
cis-m365-v6 179 100.0% (179/179) 100.0% (179/179) 100.0% (179/179)
cisa-scuba 52 100.0% (52/52) 100.0% (52/52) 100.0% (52/52)
cmmc 1080 26.3% (284/1080) 26.3% (284/1080) 26.3% (284/1080)
eidsca 21 100.0% (21/21) 100.0% (21/21) 100.0% (21/21)
essential-eight 630 22.2% (140/630) 22.2% (140/630) 22.2% (140/630)
fedramp 1072 27.1% (291/1072) 27.1% (291/1072) 27.1% (291/1072)
gdpr 11 100.0% (11/11) 100.0% (11/11) 100.0% (11/11)
hipaa 501 33.3% (167/501) 33.3% (167/501) 33.3% (167/501)
iso-27001 1020 26.6% (271/1020) 26.6% (271/1020) 26.6% (271/1020)
iso-27002 1020 26.6% (271/1020) 26.6% (271/1020) 26.6% (271/1020)
iso-27017 1012 26.0% (263/1012) 26.0% (263/1012) 26.0% (263/1012)
mitre-attack 892 30.7% (274/892) 30.7% (274/892) 30.7% (274/892)
nis2 311 25.7% (80/311) 25.7% (80/311) 25.7% (80/311)
nist-800-171 1080 26.3% (284/1080) 26.3% (284/1080) 26.3% (284/1080)
nist-800-53 1072 27.1% (291/1072) 27.1% (291/1072) 27.1% (291/1072)
nist-csf 826 31.1% (257/826) 31.1% (257/826) 31.1% (257/826)
pci-dss 1052 26.3% (277/1052) 26.3% (277/1052) 26.3% (277/1052)
soc2 1103 26.4% (291/1103) 26.4% (291/1103) 26.4% (291/1103)
stig 13 100.0% (13/13) 100.0% (13/13) 100.0% (13/13)

Informational only — does not gate the build. The hard release-gate for Critical/High enrichment lives in #281 (v3.2.0).

@Daren9m Daren9m merged commit 606437b into main Apr 30, 2026
9 checks passed
@Daren9m Daren9m deleted the fix/355-sspr-rename branch April 30, 2026 18:07
Daren9m added a commit that referenced this pull request May 6, 2026
Establishes docs/adr/ as the home for durable architectural decisions,
distinct from the sprint plans in docs/plans/ and the point-in-time
inventories in docs/audits/. All five ADRs land at Status: Proposed and
flip to Accepted when their implementing PR(s) merge.

- 0001 adopt ADR convention (MADR-light, location, lifecycle)
- 0002 portal-path vocabulary (Entra admin center allow/deny-list,
  Pester-enforced)
- 0003 hasAutomatedCheck=true requires a documented mechanism (schema
  conditional; gated on a service-prefix-batched audit of the ~1,038
  entries that currently claim automation without evidence)
- 0004 portal-path source-of-truth precedence (CIS-mapped: SecFrame CSV
  at build time; non-CIS: manual + lastVerified)
- 0005 coverage gaps without supported Graph API (file as
  hasAutomatedCheck=false with full mappings; resolves the ENTRA-SSPR-002
  false-claim and the CIS M365 v6 5.2.4.1 gap PR #397 left behind)

Motivated by docs/plans/399-sspr-research.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Daren9m added a commit that referenced this pull request May 7, 2026
…347 enrichment materialize

Bundles three changes that all surface from a clean rebuild against
SCF 2026.1 scf.db:

1. ENTRA-SSPR-002 hasAutomatedCheck: true -> false. The "SSPR enabled
   for admin accounts" check has been claiming automation despite no
   supported Microsoft Graph endpoint for the SSPR scope toggle (only
   the undocumented main.iam.ad.ext.azure.com internal API). Confirmed
   no collector exists in Galvnyz/M365-Assess; the related SSPR-001
   collector self-emits 'Not auto-measurable via Microsoft Graph'.
   Flipped to false with notes documenting the gap. Stale parent path
   also corrected from 'Protection >' to 'Entra ID >' under the same
   touch. Cites ADR-0005 (coverage-gap policy) and ADR-0002 (portal
   path vocabulary).

2. New ENTRA-SSPR-003 covers CIS M365 v6 5.2.4.1 (All-users SSPR
   enablement) that PR #397 dropped from SSPR-001 during the MFA
   Registration Campaign rebadge. Filed as hasAutomatedCheck: false
   with the CIS mapping restored, per ADR-0005's rule for
   compliance-relevant controls without supported automation.

3. CIS M365 v6 phase-1 enrichment fields (sectionNumber,
   assessmentStatus, cisSafeguardsByVersion, defaultValue, references)
   materialize across 156 v6 entries. v3.4.0 shipped the ingestion
   infrastructure (#347) with a CHANGELOG note flagging a rebuild was
   needed; this commit completes that pending action.

Tests: 377/377 Pester pass. Total checks 1105 -> 1106; manual checks
4 -> 6 (SSPR-002 flip + SSPR-003 add); automated 1101 -> 1100.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ENTRA-SSPR-001 mapping mismatch: collector reads MFA Registration Campaign but CheckId+name imply SSPR enablement

1 participant