Gauntlet
Gauntlet Documentation
Comprehensive guides covering every page, tab, and option.
How It Works
⚠️ Authorized Testing Only
Gauntlet orchestrates Gearbox, which performs active security testing of physical hardware devices and their network interfaces. Testing devices you do not have explicit authorization to assess is illegal under laws including the CFAA (US), CMA (UK), and equivalent legislation worldwide. Always obtain signed Rules of Engagement (RoE) or Statement of Work (SoW) that explicitly covers the physical device under test before beginning any assessment. pr0t31n does not condone unauthorized testing.
🛡️ Sensitive Data Handling
Hardware assessments may capture proprietary firmware, device configurations, network traffic (PCAP), authentication credentials, and other sensitive data. Handle all collected evidence in compliance with your organization's data protection policies and applicable regulations (GDPR, CCPA, HIPAA, ITAR). Store evidence in encrypted, access-controlled locations. Sanitize or destroy evidence per your data retention policy upon engagement completion.
Overview
Gauntlet is the web-based management platform for hardware, OT, ICS, and IoT security assessments. It wraps Gearbox — a multi-tool hardware testing engine — in a structured project management layer with real-time console streaming, multi-device collaboration, comprehensive evidence management, and findings aggregation. The typical workflow is:
- Define the device — Create a project describing the physical device, its sub-components, interfaces, and specific port instances
- Launch the assessment — Start Gearbox from the browser; it walks through every assigned module on every interface instance automatically
- Interact in real time — Answer prompts, capture photos from a mobile companion, and watch findings stream in live
- Review and manage findings — Filter, override, group, rename, and mark false positives across all discovered issues
- Export results — Download the full project as JSON or ZIP for reporting
Gauntlet runs as a Flask/SocketIO application on port 5700 over HTTPS with session-based authentication. It supports 34 visual themes with dark/light mode toggle.
New Project Wizard
The wizard guides you through defining a new hardware assessment project in five steps. All fields are saved into a YAML configuration file that Gearbox reads to determine what to test.
Step 1 — Client & Engagement Information
| Field | Required | Description |
|---|---|---|
| Client Name | Yes | Full legal name of the client organization. Appears on reports and export metadata. |
| Client Short Name | Yes | Abbreviated identifier (e.g., ACME). Used in directory paths, filenames, and finding references. Keep it short and alphanumeric. |
| Year | Yes | Engagement year. Defaults to the current year. Determines the directory path: <clients_base>/<client_short>/<year>/gearbox/ |
| Start Date | No | Engagement start date. Informational — included in exports and reports. |
| End Date | No | Engagement end date. Informational — included in exports and reports. |
| Report Version | No | Version string for the final report (defaults to "1.0"). Increment for re-assessments of the same device. |
Step 2 — Consultant & Point of Contact
| Field | Required | Description |
|---|---|---|
| Consultant Name | No | Name of the tester performing the assessment |
| Consultant Title | No | Job title (e.g., Senior Security Engineer) |
| Consultant Email | No | Contact email for the tester |
| Client POC Name | No | Client point of contact for the engagement |
| Client POC Phone | No | POC phone number |
| Client POC Email | No | POC email address |
All consultant/POC fields are included in JSON exports and report metadata.
Step 3 — Device Under Test
| Field | Required | Description |
|---|---|---|
| Device Name | Yes | Name of the hardware device being assessed (e.g., "Industrial Control Unit"). Used in directory naming and report headers. |
| Device Model Number | No | Manufacturer model number (e.g., ICU-3000-A). Included in metadata. |
| Software/Firmware Version | No | Current firmware or software version on the device. Critical for vulnerability correlation. |
Step 4 — Subdevices & Interfaces
This is the most important step. Here you model the physical structure of the device under test.
Hierarchy
- Subdevice — A distinct physical component of the device (e.g., "Controller Unit", "Display Panel", "Sensor Module"). Add as many as needed with the Add Subdevice button.
- Interface — A communication interface type on a subdevice. Select from the dropdown:
Each interface type determines which test modules Gearbox will execute.Category Interface Types Network Ethernet, Ethernet_tap (passive tap), WiFi USB USB Video HDMI, Dvi, sdi, Dp (DisplayPort), Rca, Aux Serial DB9 (serial + CAN bus) Wireless Bluetooth, Zigbee, SubGHz, UWB, ZWave, LoRa, RFID Other SmartCard - Instance — A specific physical port or connection point (e.g., "Front Panel RJ45", "Rear USB-A Port 1"). Every instance gets its own test run through all applicable modules.
Operations
- Add Subdevice — Creates a new named subdevice
- Remove Subdevice — Deletes a subdevice and all its interfaces/instances
- Add Interface — Adds an interface type to a subdevice (from the dropdown)
- Remove Interface — Removes an interface and all its instances
- Add Instance — Adds a physical port/connector to an interface, with a location label
- Remove Instance — Removes a specific instance
Step 5 — Target Directory (Optional)
Optionally specify a custom output directory for the project. If left blank, Gauntlet auto-builds a structured path:
<clients_base>/<client_short>/<year>/gearbox/<client_short>_<YYYYMMDD_HHMMSS>/
The clients base directory is platform-dependent: /clients (Linux), /Users/Shared/clients (macOS), or C:\clients (Windows).
Editing an Existing Project
The Edit Project page uses the same form as the wizard, pre-populated with the current configuration. You can modify any field, add or remove subdevices/interfaces/instances, and save. If the client short name or device name changes, the YAML filename is updated. Stale progress entries for removed interfaces are automatically cleaned up.
Project Dashboard
After creating or selecting a project, you enter the project dashboard — a tabbed interface that covers every aspect of the assessment.
Summary Tab
The overview dashboard showing project status at a glance.
- Progress Gauge — Circular chart showing completed modules vs total modules and completed instances vs total instances
- Risk Breakdown — Color-coded distribution of finding severity: Critical, High, Medium, Low, Info
- Project Information — Client name, device, model number, software version, consultant details, engagement dates
- Instance Progress Table — Per-subdevice/interface/instance breakdown showing which modules are complete, running, pending, skipped, or N/A
- Integrity Alerts — Warnings when modules were reset due to missing evidence (e.g., a required photo was skipped)
Summary Tab Actions
| Button | Description |
|---|---|
| Edit Project | Opens the project edit wizard to modify device configuration |
| Export ZIP | Downloads the entire project directory as a portable ZIP archive |
| Export JSON | Exports structured project data (instances, findings, evidence references) as JSON |
| Delete Project | Permanently removes the project and optionally its directory (confirmation required) |
| Reset Project | Clears all output (findings, logs, evidence, progress) while keeping the YAML configuration intact for re-testing |
Testing / Console Tab
The live testing console where you launch and monitor the Gearbox assessment.
Controls
| Button | Description |
|---|---|
| ▶ Start Gearbox | Launches Gearbox as a managed subprocess with sudo. Passes the project YAML, network interface URLs for QR codes, and the output directory. Disabled while Gearbox is already running for this project. |
| ■ Kill Gearbox | Sends SIGTERM to the entire process tree (sudo → gearbox → all child tools). Gearbox's signal handler runs cleanup (kills Responder, stops Nessus, reverts DHCP). If the process doesn't exit within 8 seconds, SIGKILL is sent. Confirmation required. |
| Show QR | Displays QR codes for each network interface on the host machine, allowing mobile devices to join the session for photo capture |
| View Processes | Opens the subprocess tree showing every running child process (PID, command, status) with individual kill buttons |
Console Features
- Real-time stdout/stderr streaming via Socket.IO with color-coded output (stdout = normal, stderr = red, status updates highlighted, findings highlighted)
- Console history ring buffer (2,000 entries) preserved in memory and on disk — late-joining devices receive full history
- Auto-scroll with scroll-lock detection (scrolling up pauses auto-scroll)
- Password prompts are masked in the console echo
Interactive Prompts
When Gearbox needs user input (e.g., photo confirmation, IP address, Nessus credentials), a modal dialog appears on all connected devices simultaneously. Any device can answer — first response wins. Prompts support:
- Text input — Free-form answers (IP addresses, hostnames)
- Password input — Masked input for credentials
- Choice selection — Multiple-choice options
- Photo confirmation — Confirm photo quality or request retake
Each prompt has a 30-minute timeout. If no answer is provided, Gearbox continues with a default or skips the module.
Live Progress Sidebar
A real-time sidebar shows per-module status updates: pending → running → complete/skipped/na/error. Status arrives via __GB_STATUS__ tokens and /api/live_progress polling.
Findings Tab
Complete list of all security findings discovered during the assessment.
Display & Sorting
Findings are sorted by risk severity (Critical first), then alphabetically by title. Each row shows: title, risk badge, IP:port, tool/source, and CVE IDs.
Filtering
| Filter | Description |
|---|---|
| Risk Level | Filter by severity: All, Critical, High, Medium, Low, Informational, Unknown |
| Search | Free-text search across finding title, description, IP, port, tool name |
| False Positives Toggle | Switch to view all findings marked as false positives, with a Recover button on each |
Finding Actions
| Action | Description |
|---|---|
| View Details | Click any finding to open a detail modal showing: full title, risk, IP, port, description, CVEs, tools used, commands executed, output files, and classification status |
| View Output File | View the associated evidence file in a modal — text files up to 5 MB, PCAP files parsed via dpkt into readable summaries, and images rendered inline |
| Risk Override | Change the risk level to any value (Critical, High, Medium, Low, Informational, Unknown). Propagates to findings.jsonl, all SQLite databases, and creates an audit entry in finding_risk_changes.jsonl. The change persists across Gearbox re-runs via risk_overrides.yaml. |
| Rename | Change the finding's display title. The original title is preserved in the audit trail via finding_name_changes.jsonl. |
| Group | Select multiple related findings and merge them under a single title. A new finding is created with the highest risk level and combined evidence. Originals are soft-deleted with audit markers. |
| Delete | Soft-delete — moves the finding to deleted_findings.jsonl (viewable in the Deleted tab) |
| Mark False Positive | Moves the finding to falsePositives.json and falsePositives.csv. Removes it from the active findings list. |
| Recover FP | Moves a false-positive finding back to the active findings list |
Classification States
Findings can be classified as: Unconfirmed (default — tool-generated), Confirmed (tester-validated), or Validated (independently verified).
Targets Tab
All discovered hosts and open ports from the assessment.
- Observed IPs — Table showing IP address, MAC address, hostname, OS, discovery sources, associated instances, first-seen timestamp, and IP-level tools run (Nessus, Responder, tcpdump, tshark)
- Open Ports — Expandable per-IP list showing port, protocol, service, version, timestamp, and which tools produced output for that port (nmap, sslscan, testssl, nuclei, ssh-audit, etc.)
Data is sourced from the Gearbox SQLite database (discovered_hosts and open_ports tables) and observed_ips.csv from passive traffic capture.
Evidence Tab
File-based evidence management organized by the device's physical structure.
Evidence Tree
A hierarchical browser: Subdevice → Interface → Instance → Module. Each module shows a status badge (pending, running, complete, skipped, N/A). Click to expand and see individual files.
Evidence Operations
| Action | Description |
|---|---|
| Upload Evidence | Upload files for any module. Files are validated for correct type and content — for example, Nessus uploads must be valid XML, PCAP uploads must have correct magic bytes. When evidence is uploaded, Gauntlet automatically parses findings from supported formats (Nessus XML/CSV, Nmap XML, sslscan, testssl, ssh-audit, shcheck, nuclei JSON). |
| Replace Evidence | Replace an existing evidence file; the old file is archived to the project's deleted/ directory |
| Clear Module | Reset a module to pending status and archive all its evidence files — allows re-running without resetting the entire project |
| View Evidence | View files in-browser: images rendered inline, text displayed as preformatted output, PCAP parsed with dpkt (up to 5,000 packets) |
| Set Photo Context | Set the target module/instance so mobile uploads are automatically filed into the correct directory |
Special Evidence Directories
- _Tools/ — Device-level tool photos, organized by interface type
- _Photos/ — Per-subdevice photos in three views: FRONT, BACK, and INTERFACES
Observations Tab
Tool observations and notable events during the assessment. Observations arrive in real time from Gearbox via __GB_OBSERVATION__ tokens. Findings automatically create synthetic observations. For completed projects without live observation data, observations are reconstructed from findings.jsonl to provide a high-level summary.
Logs Tab
Combined log viewer with three views:
- Combined Logs — Merged timeline of all Gearbox and Gauntlet entries
- Gearbox Logs — Tool-specific entries parsed from
__GB_LOG__tokens with severity levels: INFO, WARNING, ERROR, FATAL, FINDING, PROMPT, ANSWER, STATUS, DONE - Gauntlet Logs — Application-level events: device joins/disconnects, UI actions, with session ID, IP, user agent, and active tab
Log Features
- Time-range filter — From/To datetime pickers to narrow the view to a specific window
- Error-count pills — Tab badges show the error count only (not total log count), using the levels ERROR, EXCEPTION, TOOL_ERROR, FATAL, CRITICAL
- Auto-refresh — Live updates via Socket.IO events
Errors Tab
All errors encountered during the assessment, auto-categorized into three types:
- Communication — Network, socket, timeout, DNS errors
- Tool — Subprocess failures, non-zero exit codes, permission errors
- Gearbox — Internal errors from the engine itself
Error types include ERROR, WARNING, FATAL, STDERR, and TOOL_ERROR. Features include time-range filtering (From/To datetime pickers) and error-count pills that reflect only error-level entries.
Deleted Tab
Archive of all deleted and archived items — evidence files that were replaced, findings that were deleted, and modules that were cleared. Shows original filename, archive timestamp, and file size. You can view the content of deleted files (images rendered, text displayed).
Testing Modules by Interface Type
Each interface type has a predefined set of test modules that Gearbox executes. The table below shows the primary modules and their tools.
Ethernet Modules
| Module | Tools | What It Tests |
|---|---|---|
| Photo | gowitness | Physical port documentation (required — cannot be skipped) |
| Ethtool | ethtool | Interface statistics, speed, duplex, driver info |
| ConfigDiscovery | tcpdump | Passive network configuration discovery |
| TrafficCollector | tcpdump, tshark | Packet capture for protocol analysis |
| NmapLive | nmap -sn | Live host detection on the connected network |
| NmapPort | nmap -sV | Port scanning with service/version detection |
| BannerGrab | socket, curl | Service banner collection from open ports |
| Web | curl, gowitness, wget, openssl | Web application screenshots, spidering, certificate inspection |
| SSL | sslscan, testssl.sh, shcheck | TLS cipher suites, certificate analysis, security headers |
| SSH | nmap, ssh-audit | SSH algorithm enumeration, key exchange audit, hardening assessment |
| SMB | nmap, smbmap, responder | SMB share enumeration, access testing, credential poisoning |
| NFS | nmap | NFS mount enumeration and access testing |
| FTP | nmap | FTP service enumeration and anonymous access |
| Nessus | Nessus | Enterprise vulnerability scanning |
| Nuclei | nuclei | Template-based CVE and misconfiguration scanning |
| Responder | responder | LLMNR/NBT-NS/mDNS poisoning for credential capture |
USB Modules
| Module | Tools | What It Tests |
|---|---|---|
| Photo | gowitness | Physical port documentation |
| UsbPower | usbmon | USB power delivery analysis |
| Keyboard | hid-tools | HID keyboard device enumeration |
| KeyCombos | hid-tools | Key combination injection testing |
| Mouse | hid-tools | HID mouse device enumeration |
| BashBunny | bash-bunny | USB attack payload execution |
Video Modules (HDMI, DVI, DisplayPort, SDI)
| Module | Tools | What It Tests |
|---|---|---|
| Photo | gowitness | Physical port documentation |
| PortType | v4l2-ctl, udevadm | Port type identification (input/output) |
| Input/Output | ffmpeg, v4l2 | Video signal capture and analysis |
| EDID | get-edid, read-edid, edid-decode | EDID data extraction — reveals display capabilities, serial numbers, manufacturer data |
| HdmiDDC | ddcutil, ddccontrol | DDC/CI control channel — test for unauthorized display control |
| HdmiHDCP | hdcp-check, v4l2-ctl | HDCP content protection status verification |
| HdmiCEC | cec-client | CEC bus command injection — power control, input switching, OSD text |
Wireless & RF Modules
| Interface | Modules | Key Tools |
|---|---|---|
| WiFi | WiFi | airmon-ng, airodump-ng, aircrack-ng, reaver, bully, wifite, bettercap, mdk4, hcxdumptool |
| Bluetooth | Bluetooth | bluetoothctl, btmgmt, btmon, gatttool, sdptool, l2ping, bettercap, crackle, ubertooth-btle |
| Zigbee | Sniff, Flood | whsniff, zbdump, zbstumbler, scapy |
| SubGHz | SubGHz | rfcat, rtl_433, hackrf_transfer, hackrf_sweep, urh_cli |
| UWB | UWB | uwb-sniffer |
| RFID | RFIDSniff, RFIDReplay | proxmark3, chameleon_cli |
| ZWave | ZWave | ezwave, rtl_433 |
| LoRa | LoRa | rtl_433, urh_cli |
| SmartCard | SmartCard | pcsc_scan, opensc-tool, gp |
Serial & Passive Modules
| Interface | Modules | Tools |
|---|---|---|
| DB9 | SerialDetect, CanAssess | sigrok, minicom, can_detect, candump, canplayer |
| Ethernet_tap | Tcpdump_running, Tcpdump_boot, Tcpdump_shutdown | tcpdump (passive capture during device running, boot, and shutdown states) |
Multi-Device Collaboration
Gauntlet supports simultaneous participation from multiple devices during a physical assessment.
- Socket.IO Rooms — All devices viewing the same project share a room. Console output, prompts, findings, and status updates are broadcast to everyone.
- QR Code Join — The Testing tab displays QR codes for each network interface on the host machine. Mobile devices scan the QR to open a companion page (
/join/<project_id>) for photo capture and prompt answering. - Photo Context — The desktop Evidence tab can set a target context (module/instance) so mobile photo uploads are automatically filed into the correct evidence directory without the mobile user selecting it.
- Prompt Collaboration — When Gearbox asks for input, the prompt appears on all connected devices. The first response wins — useful for distributed teams where one person is at the keyboard and another is at the device.
- Late Join — Devices joining mid-assessment receive the full console history and current state, so they can catch up without missing context.
Nessus Integration
To use the Nessus vulnerability scanner during assessments, set environment variables before starting Gauntlet:
export NESSUS_USER=admin
export NESSUS_PASS=yourpassword
python3 app.py
Gauntlet forwards these to Gearbox as --nessus-user / --nessus-pass CLI arguments, ensuring credentials survive the sudo boundary. Gearbox handles scan creation, launching, status polling, and result export. Nessus findings are automatically ingested into the findings store.
Automated Evidence Parsing
When evidence files are uploaded (or generated by Gearbox), Gauntlet automatically detects the tool that produced them and extracts security findings. Supported formats:
| Format | Detection Method | Findings Extracted |
|---|---|---|
| Nessus XML (.nessus) | XML root element <NessusClientData_v2> | Plugin findings with severity, CVE, description |
| Nessus CSV | CSV header containing "Plugin ID" | Tabular finding data |
| Nmap XML | XML root <nmaprun> | Open ports, services, script output |
| sslscan output | Content matching sslscan patterns | Cipher suites, certificate issues, protocol versions |
| testssl.sh output | Content matching testssl patterns (or JSON) | TLS vulnerabilities, cipher issues, HSTS/HPKP status |
| ssh-audit output | Content matching ssh-audit patterns | Weak algorithms, key exchange issues, host key problems |
| shcheck output | Content matching shcheck patterns | Missing security headers (HSTS, CSP, X-Frame-Options) |
| nuclei JSON | Valid JSON with nuclei finding structure | Template-matched CVEs and misconfigurations |
| PCAP (.pcap/.pcapng) | Magic bytes verification | Parsed with dpkt for human-readable packet summaries |
Export & Import
Export Options
| Format | Description |
|---|---|
| ZIP Export | Downloads the entire project directory as a portable ZIP archive. Includes YAML config, all findings files, evidence, logs, databases, and metadata. Uses explicit Content-Length streaming for reliable HTTPS downloads. Filename: gauntlet-<client>-<device>-<datetime>.zip |
| JSON Export | Structured JSON with full project hierarchy: project info, subdevices → interfaces → instances → per-instance photos, subnets, live IPs, ports (with URLs, screenshots, scrapes, certificates, findings). Saved to the project directory and returned as a download. Filename: <CLIENT>-<YEAR>-<DEVICE>-export.json |
Import Options
| Method | Description |
|---|---|
| YAML Path Import | Register an existing Gearbox YAML by providing its absolute filesystem path. De-duplicates against already registered projects. |
| ZIP Import | Upload a Gauntlet-exported ZIP (up to 4 GB). Extracts to the canonical clients directory structure. Protected against path traversal. De-duplicates against existing projects. |
| Auto-Discovery | On home page load, Gauntlet scans the clients directory tree for project_meta.json files with tool=gearbox and auto-imports any unregistered projects. |
Gearbox Communication Protocol
Gearbox communicates with Gauntlet through structured protocol tokens in stdout:
| Token | Format | Purpose |
|---|---|---|
__GB_PROMPT__: | JSON | Interactive prompt requiring user input — triggers a modal dialog on all connected devices. Includes question text, input type (text/password/photo/choice), and optional answer choices. |
__GB_STATUS__: | JSON | Module progress update with subdevice, interface, instance, module name, and status (pending/running/complete/skipped/na/error). Drives the progress dashboard. |
__GB_FINDING__: | JSON | Security finding — immediately written to findings.jsonl, broadcast to all connected clients, and stored as an observation. |
__GB_LOG__: | Text | Structured log message with severity prefix ([INFO], [ERROR], [WARNING], [FATAL]). ERROR/WARNING/FATAL entries are auto-classified into the error buffer. |
__GB_OBSERVATION__: | JSON | Tool observation event with title, description, tool name, and associated output file. |
Prompt responses are written to Gearbox's stdin. When multiple clients are connected, the first response wins.
Process Management
- Sequential Execution — Only one Gearbox instance runs at a time per Gauntlet server. Additional requests are placed in a disk-persisted queue.
- Queue Persistence — The execute queue is saved to
execute_queue.jsonand survives Gauntlet restarts. When the current assessment completes, the next queued job auto-starts. - Graceful Shutdown — SIGTERM allows Gearbox to run cleanup (kills Responder, stops Nessus, reverts DHCP). SIGKILL fallback after 8 seconds. Full process tree termination via psutil.
- Subprocess Tree — View and manage every running subprocess from the Testing tab. Kill individual child processes without terminating the entire assessment.
- System Cleanup — Dedicated cleanup action that kills any running Responder, stops Nessus scans, and reverts the test interface to DHCP defaults.
Integration Points
| Integration | Endpoint | Description |
|---|---|---|
| Nexus Hub | GET /api/nexus-status | Unauthenticated health probe returning app name, version, hostname, and scanning status |
| Arbiter | GET /api/arbiter-projects | Normalized project list with engagement metadata for enrichment |
| Arbiter | GET /api/projects/<id>/status | Real-time scan status polling (running/queued/complete/idle/error + queue position) |
| Arbiter | POST /api/execute-project | Remote project creation and execution for automation |
| Intelligence | GET /api/intel/<id> | Aggregated network intelligence using the shared pr0t31n_intel module |
Security
Transport Security
Gauntlet runs exclusively over HTTPS using a self-signed TLS certificate (ssl.crt / ssl.key). The Flask-SocketIO server binds to 0.0.0.0:5700 with ssl_context provided by the shared _auth module. All communication between the browser and Gauntlet is encrypted.
Authentication
Session-based authentication via the shared _auth.py module (identical pattern across Crucible, Vantage, Bastion, Spectre, and Gauntlet). Every request passes through _auth.auth_gate() before reaching any route. The login page is rendered at /login; successful authentication creates a session cookie.
Session Management
- Session cookie:
gauntlet_session, HttpOnly, SameSite=Lax - Session timeout: 30 minutes (configurable via
PERMANENT_SESSION_LIFETIME) - Session ping:
POST /api/session_pingextends the session without a full page reload - Password change: Available at
/auth/change-password
Security Headers
Applied via _auth.apply_security_headers() on every response:
Cache-Control: no-store, no-cache, must-revalidate, max-age=0on HTML responsesPragma: no-cacheX-Frame-Options,X-Content-Type-Options, and other standard headers
Upload Security
- Max upload size: 4 GB (for project ZIP imports)
- Photo uploads: Extension whitelist (jpg, jpeg, png, gif, webp) with content-type fallback for iOS live captures
- Path traversal protection: All file-read operations validate that the resolved path is within the project directory. The
/api/read_fileendpoint compares the absolute path against the project root and rejects any path containing..segments or falling outside the project tree. - Evidence uploads: Content validation per module type (e.g., verifying PCAP magic bytes, XML structure for Nessus files, JSON validity for structured output).
CSRF Protection
State-changing operations use POST requests with JSON bodies. The session cookie's SameSite=Lax policy provides baseline CSRF protection. Secret keys are generated and managed by the _auth module.
Process Isolation
Gearbox runs as a sudo subprocess. Gauntlet does not execute arbitrary commands from user input. The Gearbox path is resolved to the canonical install location (/opt/pr0t31n/Gearbox/gearbox.py) if the provided path is not absolute or does not exist. Nessus credentials are read from environment variables and passed as CLI arguments rather than being stored on disk.
Features
Console & Logging
Device Configuration
Evidence Management
Export & Integration
Findings Management
Intelligence & Observations
Mobile Integration
Project Management
System Management
Test Execution
Use Cases
Medical Device Security Assessment
Testing IoT and medical devices with multiple communication interfaces (Ethernet, USB, Bluetooth, Wi-Fi, serial). Gauntlet's sub-device support models complex medical systems with multiple components (controller unit, display, sensor module). Mobile photo documentation captures physical testing evidence (board photos, port configurations, label data). The module-by-module approach ensures systematic coverage of every interface, and Nessus integration provides vulnerability scanning for network-accessible components.
Network Appliance Security Audit
Systematic module-by-module testing of network infrastructure devices such as routers, switches, firewalls, and access points. The Ethernet interface modules cover traffic capture (ConfigDiscovery, TrafficCollector), live host discovery (NmapLive), port scanning (NmapPort), service probing (BannerGrab, SSL, SSH, SMB, NFS, FTP), web application testing (Web, Nuclei), and credential attack simulation (Responder). Progress tracking shows exactly which modules have completed per port.
IoT Device Penetration Test
Testing consumer and industrial IoT devices across all communication interfaces. Gauntlet supports wireless protocols (Wi-Fi, Bluetooth, Zigbee, Z-Wave, LoRa, Sub-GHz, UWB, RFID), wired connections (Ethernet, USB, serial DB9), and video interfaces (HDMI, DVI, DisplayPort, SDI). The Ethernet tap interface enables passive traffic capture during boot, operation, and shutdown for protocol analysis.
Hardware Security Research
Structured approach to physical hardware interface testing including JTAG, SPI, I2C via the serial/DB9 interface modules (SerialDetect for bus identification, CanAssess for CAN bus analysis). USB testing covers power analysis (UsbPower), HID attacks (Keyboard, Mouse, KeyCombos), and payload injection (BashBunny). RFID testing includes sniffing and replay attacks via Proxmark3 and Chameleon tools.
Video Interface Security Analysis
Assessing video interfaces for information leakage and content protection bypass. HDMI/DVI/DisplayPort/SDI modules test EDID data extraction (get-edid, read-edid, edid-decode), DDC/CI control channel abuse (ddcutil, ddccontrol), HDCP content protection status, and CEC bus command injection (cec-client). Photo evidence captures physical connector types and signal presence.
Wireless Protocol Assessment
Testing devices that use wireless protocols. Wi-Fi modules support monitor mode (airmon-ng), passive capture (airodump-ng), WPA cracking (aircrack-ng, hcxdumptool, hcxpcapngtool), WPS attacks (reaver, bully, wash), and active attacks (wifite, bettercap, mdk4). Bluetooth modules cover classic and BLE scanning, GATT enumeration, SDP probing, traffic sniffing (btmon, ubertooth-btle), and protocol cracking (crackle). Zigbee modules use whsniff, zbdump, and zbstumbler for network discovery and flooding tests.
CLI Reference
Command Examples
Start Gauntlet
Launch the Gauntlet web application on port 5700 with HTTPS. The server binds to 0.0.0.0, making it accessible from any network interface.
Access Gauntlet Web UI
Open the Gauntlet web interface in a browser. Accept the self-signed certificate warning on first access. The login page authenticates via the shared _auth module.
Gearbox Launch Command (internal)
The command Gauntlet uses internally to launch Gearbox. The -E flag preserves environment variables through sudo. --join-interfaces passes network interface URLs for QR code generation. --project-dir specifies the output directory.
Gearbox with Nessus Credentials
When Nessus environment variables are set (NESSUS_USER, NESSUS_PASS), Gauntlet appends these as CLI arguments to the Gearbox invocation so credentials survive the sudo boundary.
Third-Party Tool Invocations
Commands and flags used when this tool invokes third-party dependencies during operation.
Finding Nomenclature
Finding Identity
Gearbox findings use the catalogue ID prefix GB-NNN (e.g., GB-001, GB-042). Each finding is assigned a UUID for unique identification within the project. Findings are stored in findings.jsonl (one JSON object per line) and optionally in a SQLite database (gearbox.db).
Risk Levels
Findings use five risk levels, always uppercase: CRITICAL, HIGH, MEDIUM, LOW, INFO. The UI also recognizes Informational (legacy) and Unknown for unclassified findings. Risk colors: Critical=magenta (#FF00FF), High=red (#E7716F), Medium=amber (#FFC000), Low=green (#92D050), Informational=light blue (#BDD7EC), Unknown=gray (#A0AEC0).
Hardware-Specific Fields
Gearbox findings include hardware-specific fields beyond the universal schema:
- subdevice: The sub-device this finding pertains to (e.g., "Controller Unit", "Sensor Module")
- interface: The interface type tested (e.g., "Ethernet", "USB", "Bluetooth")
- instance: The specific interface instance (e.g., "eth1", "usb_a_front")
- classification: Finding validation status: Unconfirmed, Confirmed, or Validated
- tools_used: List of tools that produced or contributed to this finding
- commands_used: List of commands executed to discover this finding
- output_files: List of evidence file paths (relative to project directory)
Finding Grouping
Related findings can be merged under a single display title. For example, multiple SSL certificate findings on different ports can be grouped as "SSL Certificate Issues." Grouping:
- Creates a new finding with a fresh UUID and the grouped title
- Inherits the highest risk level from all originals
- Combines all output_files and affected items
- Merges all tools_used lists (deduplicated)
- Soft-deletes originals to
deleted_findings.jsonlwith_grouped_intomarkers - Records the operation in
finding_grouping_changes.jsonlfor audit
Finding Lifecycle
A finding can transition through these states:
- Active: Present in
findings.jsonl, displayed in the Findings tab - Risk-adjusted: Risk level overridden by the tester (persisted to JSONL and DB)
- Renamed: Title changed for clarity (audit logged)
- Grouped: Original soft-deleted; new grouped finding created
- Deleted: Moved to
deleted_findings.jsonl(recoverable via the deleted findings view) - False Positive: Moved to
falsePositives.json+falsePositives.csv(recoverable)
Action Items
Module-Based Progress Tracking
Gauntlet does not use a traditional action-items model. Instead, it tracks progress through a module-based completion system. Each interface instance has a set of assigned test modules, and the module status (pending, running, complete, failed) drives the progress dashboard.
Progress Calculation
Progress is computed as completed modules divided by total modules across all instances. When Gearbox emits a __GB_STATUS__ token with a module's completion status, the progress counter updates in real time. When all modules across all instances show as completed, the project status transitions to "complete."
Module Status States
| Status | Meaning |
|---|---|
| Pending | Module has not yet been started |
| Running | Module is currently executing (Gearbox is actively testing) |
| Complete | Module finished successfully with or without findings |
| Failed | Module encountered an error during execution |
| Skipped | Module was bypassed (e.g., interface not accessible) |
Evidence Verification
Each module defines expected evidence files (output types, patterns, photo requirements). The evidence verification system (/api/check_evidence) validates whether required files exist for completed modules. Modules missing required evidence can be individually reset and re-run without affecting other modules.
Observations
The observations panel synthesizes action-worthy insights from findings automatically. Each finding is converted to an observation entry with timestamp, title, description, tools used, risk level, and associated output file. For completed projects, observations are reconstructed from findings.jsonl, providing a high-level summary of what was found and where.
Sequential Queue
When multiple projects need testing, the execute queue manages the order. Only one Gearbox instance runs at a time. The queue is persisted to disk and survives Gauntlet restarts. When the current test completes, the next queued job auto-starts without manual intervention.
Output Files
| File | Format | Description |
|---|---|---|
meta.json |
JSON | Tool identity and engagement metadata |
findings.json |
JSON | Universal findings array v1.1 |
findings.csv |
CSV | CSV mirror of findings |
scan.log |
TXT | Human-readable timestamped log |
Invocation Methods
| Method | Usage |
|---|---|
| CLI — Direct |
cd /opt/pr0t31n/Gauntlet && python3 app.py
Run directly with command-line arguments. |
| Web UI |
https://localhost:5700
Flask web interface — start the app then open in browser. |
Integration
Depends On
- Gearbox
Used By
- Nexus (health check)
Third-Party Dependencies & Credits
| Tool / Library | Developer | Type | Link |
|---|---|---|---|
| Flask | Pallets / Armin Ronacher | python | https://github.com/pallets/flask |
| Flask-SocketIO | Miguel Grinberg | python | https://github.com/miguelgrinberg/Flask-SocketIO |
| dpkt | Dug Song / Google / kbandla | python | https://github.com/kbandla/dpkt |
| psutil | Giampaolo Rodola | python | https://github.com/giampaolo/psutil |
Metadata
| Name | Gauntlet |
| Category | Management |
| Version | 1.12.0 |
| Install Path | /opt/pr0t31n/Gauntlet |
| Main File | app.py |
| Port | 5700 |
| GitHub | https://github.com/pr0t31n/Gauntlet.git |
| Requires | Gearbox, Shared |