-
Notifications
You must be signed in to change notification settings - Fork 0
Using cazadora
cazadora is a hunting script for detecting suspicious Microsoft 365 OAuth applications in a tenant. It enumerates all registered apps and service principals via the Microsoft Graph API and runs a set of hunting rules derived from real-world OAuth attack tradecraft observed by the Huntress team. It flags applications that match known suspicious patterns for human review.
- Hunts for suspicious OAuth apps registered in an M365 tenant
- Detects apps matching common attack patterns: odd names, identity-matching names, test apps, suspicious reply URLs
- Uses device code or Azure SDK authentication (no stored credentials required)
- Outputs colour-coded results by confidence level
- Based on threat intel from observed OAuth TTPs in production tenants
Note: cazadora cannot definitively determine whether an app is malicious. Results should be treated as leads for further human investigation, not conclusive findings.
cazadora runs in a Python virtual environment.
cd /opt/cazadora/
. cazadora.sh # activates the venv environmentpython3 main.py --auth-mode device_codeNavigate to https://microsoft.com/devicelogin, enter the code shown, and authenticate with an account that has Graph API query permissions. When prompted "Are you trying to sign into Microsoft Office?" select Continue.
Warning: Never enter a device code from an untrusted source.
python3 main.py --auth-mode azure_sdkpython3 main.py --auth-mode device_code --output /output/cazadora-results.json- Apps with only non-alphanumeric characters in the name (e.g.
...) - Apps named after a tenant identity, especially where the identity is also the assigned user
- Apps named
test,test app, or similar - Apps with a reply URL matching
http://localhost:<port>/access
TBC
- Getting Started
- Cloud Access and Permissions
- Cloud Authentication via CLI
- Using Powerpipe
- Using Prowler
- Using checkov
- Using trivy
- Using poutine
- Using zizmor
- Using syft
- Using grype
- Using cazadora
- Using semgrep
- Using kubescape
- Using AzureHound
- Using BloodHound
- Using aws_list_all
- Using dockerspy
- Using ScoutSuite
- Using screen
- Using testssl.sh
- Using Trufflehog
- Using CloudFox
- Using Gitleaks
- Using betterleaks
- Using Polaris
- Using elbaph
- Other Tools