You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Security condition to validate: application registrations that hold federatedIdentityCredentials are currently invisible to every Entra check. Neither prowler/providers/m365/services/entra/ nor prowler/providers/azure/services/entra/ reads that collection today, while the sibling credential types are covered (entra_app_registration_client_secret_unused on m365, entra_app_registration_credential_not_expired on azure).
Why it matters:[New Check]: Application registrations should not use password credentials (client secrets) #11064's rationale for the client-secrets work recommends certificates, managed identities and federated identity credentials as the migration targets - so as tenants follow that guidance, the credential type they move to is the one the scan says nothing about. A federated identity credential grants standing token exchange to an external issuer/subject pair and has no expiry, so it sits outside the existing expiry- and unused-secret-shaped checks by construction. The highest-signal case is an FIC on an application that also holds privileged permissions: an external CI system (GitHub Actions, GitLab CI, etc.) can then mint tokens that act with those permissions, and the trust boundary lives entirely in the external provider's account/repo namespace. A related concern for a follow-up rather than this first check: for public CI issuers the subject match is exact-string, and a deleted external org or repository name can later be re-registered by an unrelated party.
Resource involved: Microsoft Entra application registrations (/applications) and their federatedIdentityCredentials collection.
Expected behavior
Resource or scope to evaluate: all application objects in the tenant, expanding federatedIdentityCredentials (via $expand on the existing applications listing, or the per-application GET /applications/{id}/federatedIdentityCredentials endpoint), joined with the application's permission grants that the existing privileged-permissions check already models.
PASS when: an application either has no federated identity credentials, or has them while holding no privileged permissions.
FAIL when: an application holds at least one federated identity credential AND privileged permissions. The finding should report appId, displayName, and each FIC's name, issuer and subject, so operators can see exactly which external identity can act with the privileged rights.
Existing patterns to follow:entra_app_registration_no_unused_privileged_permissions already iterates application registrations and models privileged permissions; entra_app_registration_client_secret_unused already extends the applications listing with a credential collection. This check is the composition of the two patterns.
Permissions / scopes: the FIC list should be covered by the existing application-read baseline, though that is worth confirming against the Graph List federatedIdentityCredentials permissions table rather than taken from here.
Microsoft Graph v1.0 only; no PowerShell needed.
Is there a reason federated identity credentials were left out of scope so far - or would a first check shaped like the two existing credential checks fit the service model?
Existing check search
Provider
Microsoft 365
New provider name
No response
Service or product area
entra
Suggested check name
entra_app_registration_federated_credential_on_privileged_appContext and goal
federatedIdentityCredentialsare currently invisible to every Entra check. Neitherprowler/providers/m365/services/entra/norprowler/providers/azure/services/entra/reads that collection today, while the sibling credential types are covered (entra_app_registration_client_secret_unusedon m365,entra_app_registration_credential_not_expiredon azure)./applications) and theirfederatedIdentityCredentialscollection.Expected behavior
federatedIdentityCredentials(via$expandon the existing applications listing, or the per-applicationGET /applications/{id}/federatedIdentityCredentialsendpoint), joined with the application's permission grants that the existing privileged-permissions check already models.appId,displayName, and each FIC'sname,issuerandsubject, so operators can see exactly which external identity can act with the privileged rights.References
federatedIdentityCredentialresource (List/Get methods,issuer/subject/audiencesproperties): https://learn.microsoft.com/en-us/graph/api/resources/federatedidentitycredential?view=graph-rest-1.0Suggested severity
Medium
Additional implementation notes
entra_app_registration_no_unused_privileged_permissionsalready iterates application registrations and models privileged permissions;entra_app_registration_client_secret_unusedalready extends the applications listing with a credential collection. This check is the composition of the two patterns.List federatedIdentityCredentialspermissions table rather than taken from here.Is there a reason federated identity credentials were left out of scope so far - or would a first check shaped like the two existing credential checks fit the service model?