Skip to content

Privilege Escalation through App Ownership

The question it answers: Which users own an app that holds high privileges, and so can act with that app’s access?

Whoever owns an app registration or enterprise app can add a client secret and sign in as the app. If the app holds Directory.ReadWrite.All, Mail.Read or a directory role, a regular user who owns it effectively holds that access too. Every user owner is listed, guests included (Guests with Elevated Access lists guests’ other elevated access).

Where in the appEntra ID › Identity Configuration › Escalation via App Ownership
WorkloadEntra ID
KindFindings list · dashboard tile
DataRead from Microsoft 365 when someone first opens it, then kept for the report cache lifetime (Settings > Data & cache, 1 hour unless changed).
LicenceNo extra licence needed.
Report id (API and MCP)entra.configuration.app-owner-escalation
ColumnKeyType
SeveritySeverityStatus
Owner typeCategoryText
AppSubjectLink
CheckSettingText
High-privilege rightsValueText
FindingFindingText
OwnerDetailText
DateWhenDate
CountNumberNumber

A findings list hides columns that no row fills. Severity is Critical, Serious, Warning, OK or Info; rows rated Critical, Serious or Warning need attention (Working with findings).

Licence: No extra licence needed.

Application permissions on the IntensiveReports app registration (all permissions):

PermissionAPIWhat it allowsNote
Application.Read.AllMicrosoft GraphRead all applications
RoleManagement.Read.DirectoryMicrosoft GraphRead all directory RBAC settings
Data sources it reads
  • GET /v1.0/servicePrincipals/{resource}/appRoleAssignedTo (cached)
  • GET /v1.0/roleManagement/directory/roleAssignments (cached)
  • GET /v1.0/servicePrincipals/{id}/owners ($batch)
  • GET /v1.0/applications?$expand=owners (cached)
GET /ir-api/v1/reports/entra.configuration.app-owner-escalation?size=100

An AI assistant reads it with the MCP tool get_report and the id entra.configuration.app-owner-escalation. The client needs the Read grant for Entra ID. See Using the API.