AzureFox - offensive-focused Azure situational awareness CLI
Project description
AzureFox
AzureFox is a Python CLI for offensive-focused Azure situational awareness. It is designed to help operators and testers quickly build a truthful picture of Azure identity, resource, network, secrets, and workload attack surface from management-plane read paths.
Attribution
AzureFox is inspired by CloudFox, created by Bishop Fox. The command model and operator workflow goals in this project are heavily informed by CloudFox's approach to cloud situational awareness and attack-path-focused enumeration.
This project is an independent implementation and is not affiliated with or endorsed by Bishop Fox.
Currently Supported Azure Commands
whoamiinventorynicsdnsendpointsnetwork-portsworkloadsapp-servicesfunctionsaksapi-mgmtacrdatabasesarm-deploymentsenv-varstokens-credentialsrbacprincipalspermissionsprivescrole-trustsauth-policiesmanaged-identitieskeyvaultresource-trustsstoragevmsall-checks
Quickstart
python -m venv .venv
source .venv/bin/activate
pip install 'azurefox[azure]'
azurefox --outdir /tmp/azurefox-demo whoami --output table
azurefox --outdir /tmp/azurefox-demo all-checks --output table
For local source-based development, use pip install -e '.[dev,azure]'.
Install Profiles
AzureFox keeps a small core package and uses extras for live Azure collection and contributor tooling.
pip install azurefoxinstalls the core CLI from PyPI without live Azure SDK dependencies; this is mostly useful for help output, packaging work, or fixture-based local developmentpip install -e .installs the core CLI only; this is mostly useful for help output, packaging work, or fixture-based local developmentpip install 'azurefox[azure]'installs the published AzureFox package plus the Azure SDK dependencies required for live Azure command execution; most operators should use this profilepip install -e '.[azure]'installs the Azure SDK dependencies required for live Azure command execution; most operators should use this profile when working from a local checkoutpip install -e '.[dev]'installs lint, test, and type-check tooling for contributors working without live Azure SDK dependenciespip install -e '.[dev,azure]'installs both contributor tooling and the live Azure SDK bundle; this is the normal repo development profile
The current azure extra intentionally installs the full SDK bundle used by the implemented live
commands rather than splitting dependencies per-command.
Auth Precedence
- Azure CLI credential
- Environment/service principal credential
Web auth (browser-based) via Azure CLI
If you want web-based authentication, run az login first (outside AzureFox), then run AzureFox.
AzureFox does not currently launch its own browser auth flow.
Azure CLI example:
az login
az account set --subscription <subscription-id>
azurefox inventory --subscription <subscription-id>
Non-web auth (no az login required)
If you do not want to use web auth, set service principal environment variables and pass CLI flags for tenant/subscription targeting.
Environment credential + CLI options example:
export AZURE_TENANT_ID=<tenant-id>
export AZURE_CLIENT_ID=<client-id>
export AZURE_CLIENT_SECRET=<client-secret>
azurefox whoami --tenant <tenant-id> --subscription <subscription-id>
Output Modes
--output table(default)--output json--output csv
All commands write artifacts under <outdir>/:
loot/<command>.jsonjson/<command>.jsontable/<command>.txtcsv/<command>.csvrun-summary.jsonforall-checks
Sections And All-Checks
AzureFox keeps flat standalone commands and also supports grouped execution:
azurefox all-checks
azurefox all-checks --section identity
azurefox all-checks --section config
azurefox all-checks --section secrets
azurefox all-checks --section resource
azurefox all-checks --section network
azurefox all-checks --section storage
azurefox all-checks --section compute
Treat all-checks as a broader validation pass rather than a quick spot check. It can take
materially longer than a single command, especially when a full section is producing grouped
artifacts across multiple commands.
Current section mappings:
identity:whoami,rbac,principals,permissions,privesc,role-trusts,auth-policies,managed-identitiesconfig:arm-deployments,env-varssecrets:keyvault,tokens-credentialsresource:acr,api-mgmt,databases,resource-trustsstorage:storagenetwork:nics,dns,endpoints,network-portscompute:workloads,app-services,functions,aks,vmscore:inventory
Help
AzureFox supports generic and scoped help:
azurefox help
azurefox help identity
azurefox help permissions
azurefox -h identity
azurefox -h permissions
Command help includes ATT&CK cloud leads as investigative context so users can map the output to likely tactics and techniques without treating the help text as proof that a technique occurred.
For ad hoc demos or local exploration, prefer --outdir /tmp/<name> so generated artifacts do not accumulate in the repo root.
Fixture Mode
Set AZUREFOX_FIXTURE_DIR to run against local fixture files rather than Azure APIs.
AZUREFOX_FIXTURE_DIR=tests/fixtures/lab_tenant azurefox rbac --output json
Development
pip install -e .[dev,azure]
ruff check .
pytest
CI enforces lint + unit/contract/smoke tests. Integration tests are opt-in.
License
AzureFox is licensed under the MIT License to match CloudFox's licensing model. See LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file azurefox-1.0.0.tar.gz.
File metadata
- Download URL: azurefox-1.0.0.tar.gz
- Upload date:
- Size: 82.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
153c67afee3191c3b6ebc8e0baae224404cf61a35ffacc424b45e3eafc1d2793
|
|
| MD5 |
11e2be224c195cfd681a9c07bf45c7c5
|
|
| BLAKE2b-256 |
04f873ab015e46cc5f33ced4e32a7b50fde6882a4faf3ed6ea2a793bdffb1b8f
|
Provenance
The following attestation bundles were made for azurefox-1.0.0.tar.gz:
Publisher:
release.yml on TacoRocket/AzureFox
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
azurefox-1.0.0.tar.gz -
Subject digest:
153c67afee3191c3b6ebc8e0baae224404cf61a35ffacc424b45e3eafc1d2793 - Sigstore transparency entry: 1220104766
- Sigstore integration time:
-
Permalink:
TacoRocket/AzureFox@e676ad05adad6fc299c40953b27568170b298f7a -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/TacoRocket
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e676ad05adad6fc299c40953b27568170b298f7a -
Trigger Event:
push
-
Statement type:
File details
Details for the file azurefox-1.0.0-py3-none-any.whl.
File metadata
- Download URL: azurefox-1.0.0-py3-none-any.whl
- Upload date:
- Size: 71.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e3286a7097bba58f27bb16eecf494250f0a08f9d48062eb7a571e4d811947f9
|
|
| MD5 |
608b15542dc0f8ee6e178ad7d9ddd229
|
|
| BLAKE2b-256 |
651b7496da79802e8afb71747f57ed8a4a5a8a3c543e421863300a3c221a8390
|
Provenance
The following attestation bundles were made for azurefox-1.0.0-py3-none-any.whl:
Publisher:
release.yml on TacoRocket/AzureFox
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
azurefox-1.0.0-py3-none-any.whl -
Subject digest:
1e3286a7097bba58f27bb16eecf494250f0a08f9d48062eb7a571e4d811947f9 - Sigstore transparency entry: 1220104791
- Sigstore integration time:
-
Permalink:
TacoRocket/AzureFox@e676ad05adad6fc299c40953b27568170b298f7a -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/TacoRocket
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e676ad05adad6fc299c40953b27568170b298f7a -
Trigger Event:
push
-
Statement type: