Back to Checks
Organization has mailbox auditing enabled
exchange_organization_mailbox_auditing_enabled
Service: exchangeSeverity: high
OfficialBuilt-inVerified
Categories:logginge3
Resource Type:NotDefined
Microsoft 365 Exchange Online organization setting AuditDisabled controls tenant-wide mailbox auditing. This evaluates whether it is False so default audit events are recorded for owner, delegate, and admin across all mailboxes, taking precedence over per-mailbox settings.
Risk
Disabling tenant-wide auditing lets mailbox activity go unrecorded. Adversaries or insiders could exfiltrate data, alter or delete messages, or send as users without trace, undermining confidentiality, integrity, and effective incident response.
Run this check with Prowler
Run in Prowler CloudRun
prowler m365 --checks exchange_organization_mailbox_auditing_enabledRecommendation
Ensure AuditDisabled=False to keep mailbox auditing on by default.
- Apply least privilege and minimize audit bypass
- Define retention and review audit logs
- Alert on risky actions (e.g., hard delete, rule changes)
- Layer with defense in depth for email access
Remediation
CLI
Set-OrganizationConfig -AuditDisabled $falseOther
1Open PowerShell and connect to Exchange Online: Connect-ExchangeOnline
2Run: Set-OrganizationConfig -AuditDisabled $false
3Verify: Get-OrganizationConfig | Select-Object AuditDisabled (should be False)
Check Code
from typing import List
from prowler.lib.check.models import Check, CheckReportM365
from prowler.providers.m365.services.exchange.exchange_client import exchange_client
class exchange_organization_mailbox_auditing_enabled(Check):
"""Check if Exchange mailbox auditing is enabled.
Attributes:
metadata: Metadata associated with the check (inherited from Check).
"""
def execute(self) -> List[CheckReportM365]:
"""Execute the check for Exchange mailbox auditing.
This method checks if mailbox auditing is enabled in the Exchange organization configuration.
Returns:
List[CheckReportM365]: A list of reports containing the result of the check.
"""
findings = []
organization_config = exchange_client.organization_config
if organization_config:
report = CheckReportM365(
metadata=self.metadata(),
resource=organization_config,
resource_name=organization_config.name,
resource_id=organization_config.guid,
)
report.status = "FAIL"
report.status_extended = (
"Exchange mailbox auditing is not enabled on your organization."
)
if not organization_config.audit_disabled:
report.status = "PASS"
report.status_extended = (
"Exchange mailbox auditing is enabled on your organization."
)
findings.append(report)
return findingsReferences
- https://o365reports.com/2020/01/21/enable-mailbox-auditing-in-office-365-powershell/
- https://learn.microsoft.com/en-us/purview/audit-mailboxes?view=o365-worldwide
- https://learn.microsoft.com/en-us/powershell/module/exchange/set-organizationconfig?view=exchange-ps#-auditdisabled
- https://techcommunity.microsoft.com/blog/microsoft-security-blog/exchange-online-mailbox-auditing-enabled-by-default/361324