Hi again,
i was finally able to get my hands on a test environment for this issue. so now with the most recent Microsoft recommendations to enforce MFA through conditional access the only way to really track the changes is through entra-id wodle integration and to look for conditional access policy change events. (o365 integration also detects changes but lacks information on what was changed in the policy). Whenever a new user is added the policy is automatically applied and that does not generate an event. however what can be observed is whenever someone is added to an exclusion list for the policy (indicating mfa enforcement has been disabled).
There is an issue where readability of the event is quite impractical compared to the old detection of MFA enable/disable events. It relies on finding the difference between the values of the fields data.targetResources.modifiedProperties.oldValue and data.targetResources.modifiedProperties.newValue which a very long hard to read jsons. additionally instead of seeing the email or display name of the user whose MFA enforcement was altered we only get to see the long user ID (Object ID in Entra)
here is an example log, where a user is removed from an exception and enforcement of MFA is enabled. If it were disabled the newValue would have the Object ID of the user in the excludedusers part:
{
"_index": "wazuh-alerts-4.x-2026.01.13",
"_id": "eventid",
"_version": 1,
"_score": null,
"_source": {
"cluster": {
"node": "worker-node01",
"name": "wazuh"
},
"agent": {
"name": "test-wazuh-manager-2",
"id": "000"
},
"data": {
"azure_aad_tag": "microsoft-entra_id",
"activityDateTime": "2026-01-13T13:44:09.0356648Z",
"additionalDetails": [
{
"value": "Conditional Access",
"key": "Category"
}
],
"result": "success",
"azure_tag": "azure-ad-graph",
"activityDisplayName": "Update conditional access policy",
"operationType": "Update",
"loggedByService": "Conditional Access",
"correlationId": "correlationid",
"id": "IPCGraph_fdlongid",
"targetResources": [
{
"groupType": null,
"displayName": "Require multifactor authentication for all users",
"modifiedProperties": [
{
"newValue": "{\"id\":\"id1\",\"templateId\":\"id2\",\"displayName\":\"Require multifactor authentication for all users\",\"createdDateTime\":\"2026-01-13T13:20:24.8973136+00:00\",\"modifiedDateTime\":\"2026-01-13T13:44:08.4316185+00:00\",\"state\":\"enabled\",\"conditions\":{\"applications\":{\"includeApplications\":[\"All\"],\"excludeApplications\":[],\"includeUserActions\":[],\"includeAuthenticationContextClassReferences\":[],\"applicationFilter\":null},\"users\":{\"includeUsers\":[\"All\"],\"excludeUsers\":[],\"includeGroups\":[],\"excludeGroups\":[],\"includeRoles\":[],\"excludeRoles\":[\"long-role-id\"]},\"userRiskLevels\":[],\"signInRiskLevels\":[],\"clientAppTypes\":[\"all\"],\"servicePrincipalRiskLevels\":[]},\"grantControls\":{\"operator\":\"OR\",\"builtInControls\":[\"mfa\"],\"customAuthenticationFactors\":[],\"termsOfUse\":[]}}",
"displayName": "ConditionalAccessPolicy",
"oldValue": "{\"id\":\"
id1 \",\"templateId\":\"id2\",\"displayName\":\"Require multifactor authentication for all users\",\"createdDateTime\":\"2026-01-13T13:20:24.8973136+00:00\",\"modifiedDateTime\":\"2026-01-13T13:40:11.6337136+00:00\",\"state\":\"enabled\",\"conditions\":{\"applications\":{\"includeApplications\":[\"All\"],\"excludeApplications\":[],\"includeUserActions\":[],\"includeAuthenticationContextClassReferences\":[],\"applicationFilter\":null},\"users\":{\"includeUsers\":[\"All\"],\"excludeUsers\":[\"id of user (doess not use email, need to cross-reference with entra-id)\"],\"includeGroups\":[],\"excludeGroups\":[],\"includeRoles\":[],\"excludeRoles\":[\"role id\"]},\"userRiskLevels\":[],\"signInRiskLevels\":[],\"clientAppTypes\":[\"all\"],\"servicePrincipalRiskLevels\":[]},\"grantControls\":{\"operator\":\"OR\",\"builtInControls\":[\"mfa\"],\"customAuthenticationFactors\":[],\"termsOfUse\":[]}}"
}
],
"id": "policy ID",
"type": "Policy",
"userPrincipalName": null
}
],
"category": "Policy",
"initiatedBy": {
"app": {
"servicePrincipalName": "null",
"displayName": "ADIbizaUX",
"appId": "aaplication iD",
"servicePrincipalId": "null"
},
"user": {
"agentType": "notAgentic",
"homeTenantId": "null",
"displayName": "Display name of user that made the change",
"ipAddress": "IP address of the user that made the change",
"id": "long user ID",
"userType": "Member",
"homeTenantName": "null",
"userPrincipalName": "email of the user that made the change"
}
}
},
"manager": {
"name": "test-wazuh-manager-2"
},
"log": {
"file": {
"path": "/var/ossec/logs/alerts/alerts.json"
},
"offset": 250255
},
"rule": {
"firedtimes": 57,
"mail": false,
"level": 3,
"description": "Azure: AD Update conditional access policy",
"groups": [
"azure"
],
"id": "87802"
},
"decoder": {
"name": "json"
},
"fileset": {
"name": "alerts"
},
"tags": [
"beats_input_codec_plain_applied"
],
"input": {
"type": "log"
},
"ecs": {
"version": "1.6.0"
},
"service": {
"type": "wazuh"
},
"host": "test-wazuh-manager-2",
"@version": "1",
"location": "Azure",
"id": "1768312267.406583",
"event": {
"module": "wazuh",
"dataset": "wazuh.alerts"
},
"fields": {
"index_prefix": "wazuh-alerts-4.x-"
},
"timestamp": "2026-01-13T13:51:07.850+0000"
},
"fields": {
"timestamp": [
"2026-01-13T13:51:07.850Z"
]
},
"highlight": {
"location": [
"location"
]
},
"sort": [
1768312267850
]
}