Gauntlet

Management v1.12.0 Flask App :5700 — Web platform for Gearbox hardware assessments — multi-tool session orchestration, real-time findings streaming, and interactive assessment dashboard.
4
Dependencies
GB-001
Finding Prefix
5700
Port

Gauntlet Documentation

Comprehensive guides covering every page, tab, and option.

Overview New Project Wizard Project Dashboard Summary Tab Testing / Console Findings Tab Evidence Tab Targets Testing Modules Multi-Device Collaboration Mobile Companion Export & Import Themes

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:

  1. Define the device — Create a project describing the physical device, its sub-components, interfaces, and specific port instances
  2. Launch the assessment — Start Gearbox from the browser; it walks through every assigned module on every interface instance automatically
  3. Interact in real time — Answer prompts, capture photos from a mobile companion, and watch findings stream in live
  4. Review and manage findings — Filter, override, group, rename, and mark false positives across all discovered issues
  5. 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

FieldRequiredDescription
Client NameYesFull legal name of the client organization. Appears on reports and export metadata.
Client Short NameYesAbbreviated identifier (e.g., ACME). Used in directory paths, filenames, and finding references. Keep it short and alphanumeric.
YearYesEngagement year. Defaults to the current year. Determines the directory path: <clients_base>/<client_short>/<year>/gearbox/
Start DateNoEngagement start date. Informational — included in exports and reports.
End DateNoEngagement end date. Informational — included in exports and reports.
Report VersionNoVersion string for the final report (defaults to "1.0"). Increment for re-assessments of the same device.

Step 2 — Consultant & Point of Contact

FieldRequiredDescription
Consultant NameNoName of the tester performing the assessment
Consultant TitleNoJob title (e.g., Senior Security Engineer)
Consultant EmailNoContact email for the tester
Client POC NameNoClient point of contact for the engagement
Client POC PhoneNoPOC phone number
Client POC EmailNoPOC email address

All consultant/POC fields are included in JSON exports and report metadata.

Step 3 — Device Under Test

FieldRequiredDescription
Device NameYesName of the hardware device being assessed (e.g., "Industrial Control Unit"). Used in directory naming and report headers.
Device Model NumberNoManufacturer model number (e.g., ICU-3000-A). Included in metadata.
Software/Firmware VersionNoCurrent 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:
    CategoryInterface Types
    NetworkEthernet, Ethernet_tap (passive tap), WiFi
    USBUSB
    VideoHDMI, Dvi, sdi, Dp (DisplayPort), Rca, Aux
    SerialDB9 (serial + CAN bus)
    WirelessBluetooth, Zigbee, SubGHz, UWB, ZWave, LoRa, RFID
    OtherSmartCard
    Each interface type determines which test modules Gearbox will execute.
  • 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

ButtonDescription
Edit ProjectOpens the project edit wizard to modify device configuration
Export ZIPDownloads the entire project directory as a portable ZIP archive
Export JSONExports structured project data (instances, findings, evidence references) as JSON
Delete ProjectPermanently removes the project and optionally its directory (confirmation required)
Reset ProjectClears 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

ButtonDescription
▶ Start GearboxLaunches 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 GearboxSends 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 QRDisplays QR codes for each network interface on the host machine, allowing mobile devices to join the session for photo capture
View ProcessesOpens 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

FilterDescription
Risk LevelFilter by severity: All, Critical, High, Medium, Low, Informational, Unknown
SearchFree-text search across finding title, description, IP, port, tool name
False Positives ToggleSwitch to view all findings marked as false positives, with a Recover button on each

Finding Actions

ActionDescription
View DetailsClick 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 FileView 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 OverrideChange 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.
RenameChange the finding's display title. The original title is preserved in the audit trail via finding_name_changes.jsonl.
GroupSelect 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.
DeleteSoft-delete — moves the finding to deleted_findings.jsonl (viewable in the Deleted tab)
Mark False PositiveMoves the finding to falsePositives.json and falsePositives.csv. Removes it from the active findings list.
Recover FPMoves 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

ActionDescription
Upload EvidenceUpload 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 EvidenceReplace an existing evidence file; the old file is archived to the project's deleted/ directory
Clear ModuleReset a module to pending status and archive all its evidence files — allows re-running without resetting the entire project
View EvidenceView files in-browser: images rendered inline, text displayed as preformatted output, PCAP parsed with dpkt (up to 5,000 packets)
Set Photo ContextSet 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

ModuleToolsWhat It Tests
PhotogowitnessPhysical port documentation (required — cannot be skipped)
EthtoolethtoolInterface statistics, speed, duplex, driver info
ConfigDiscoverytcpdumpPassive network configuration discovery
TrafficCollectortcpdump, tsharkPacket capture for protocol analysis
NmapLivenmap -snLive host detection on the connected network
NmapPortnmap -sVPort scanning with service/version detection
BannerGrabsocket, curlService banner collection from open ports
Webcurl, gowitness, wget, opensslWeb application screenshots, spidering, certificate inspection
SSLsslscan, testssl.sh, shcheckTLS cipher suites, certificate analysis, security headers
SSHnmap, ssh-auditSSH algorithm enumeration, key exchange audit, hardening assessment
SMBnmap, smbmap, responderSMB share enumeration, access testing, credential poisoning
NFSnmapNFS mount enumeration and access testing
FTPnmapFTP service enumeration and anonymous access
NessusNessusEnterprise vulnerability scanning
NucleinucleiTemplate-based CVE and misconfiguration scanning
ResponderresponderLLMNR/NBT-NS/mDNS poisoning for credential capture

USB Modules

ModuleToolsWhat It Tests
PhotogowitnessPhysical port documentation
UsbPowerusbmonUSB power delivery analysis
Keyboardhid-toolsHID keyboard device enumeration
KeyComboshid-toolsKey combination injection testing
Mousehid-toolsHID mouse device enumeration
BashBunnybash-bunnyUSB attack payload execution

Video Modules (HDMI, DVI, DisplayPort, SDI)

ModuleToolsWhat It Tests
PhotogowitnessPhysical port documentation
PortTypev4l2-ctl, udevadmPort type identification (input/output)
Input/Outputffmpeg, v4l2Video signal capture and analysis
EDIDget-edid, read-edid, edid-decodeEDID data extraction — reveals display capabilities, serial numbers, manufacturer data
HdmiDDCddcutil, ddccontrolDDC/CI control channel — test for unauthorized display control
HdmiHDCPhdcp-check, v4l2-ctlHDCP content protection status verification
HdmiCECcec-clientCEC bus command injection — power control, input switching, OSD text

Wireless & RF Modules

InterfaceModulesKey Tools
WiFiWiFiairmon-ng, airodump-ng, aircrack-ng, reaver, bully, wifite, bettercap, mdk4, hcxdumptool
BluetoothBluetoothbluetoothctl, btmgmt, btmon, gatttool, sdptool, l2ping, bettercap, crackle, ubertooth-btle
ZigbeeSniff, Floodwhsniff, zbdump, zbstumbler, scapy
SubGHzSubGHzrfcat, rtl_433, hackrf_transfer, hackrf_sweep, urh_cli
UWBUWBuwb-sniffer
RFIDRFIDSniff, RFIDReplayproxmark3, chameleon_cli
ZWaveZWaveezwave, rtl_433
LoRaLoRartl_433, urh_cli
SmartCardSmartCardpcsc_scan, opensc-tool, gp

Serial & Passive Modules

InterfaceModulesTools
DB9SerialDetect, CanAssesssigrok, minicom, can_detect, candump, canplayer
Ethernet_tapTcpdump_running, Tcpdump_boot, Tcpdump_shutdowntcpdump (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:

FormatDetection MethodFindings Extracted
Nessus XML (.nessus)XML root element <NessusClientData_v2>Plugin findings with severity, CVE, description
Nessus CSVCSV header containing "Plugin ID"Tabular finding data
Nmap XMLXML root <nmaprun>Open ports, services, script output
sslscan outputContent matching sslscan patternsCipher suites, certificate issues, protocol versions
testssl.sh outputContent matching testssl patterns (or JSON)TLS vulnerabilities, cipher issues, HSTS/HPKP status
ssh-audit outputContent matching ssh-audit patternsWeak algorithms, key exchange issues, host key problems
shcheck outputContent matching shcheck patternsMissing security headers (HSTS, CSP, X-Frame-Options)
nuclei JSONValid JSON with nuclei finding structureTemplate-matched CVEs and misconfigurations
PCAP (.pcap/.pcapng)Magic bytes verificationParsed with dpkt for human-readable packet summaries

Export & Import

Export Options

FormatDescription
ZIP ExportDownloads 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 ExportStructured 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

MethodDescription
YAML Path ImportRegister an existing Gearbox YAML by providing its absolute filesystem path. De-duplicates against already registered projects.
ZIP ImportUpload 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-DiscoveryOn 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:

TokenFormatPurpose
__GB_PROMPT__:JSONInteractive 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__:JSONModule progress update with subdevice, interface, instance, module name, and status (pending/running/complete/skipped/na/error). Drives the progress dashboard.
__GB_FINDING__:JSONSecurity finding — immediately written to findings.jsonl, broadcast to all connected clients, and stored as an observation.
__GB_LOG__:TextStructured log message with severity prefix ([INFO], [ERROR], [WARNING], [FATAL]). ERROR/WARNING/FATAL entries are auto-classified into the error buffer.
__GB_OBSERVATION__:JSONTool 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.json and 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

IntegrationEndpointDescription
Nexus HubGET /api/nexus-statusUnauthenticated health probe returning app name, version, hostname, and scanning status
ArbiterGET /api/arbiter-projectsNormalized project list with engagement metadata for enrichment
ArbiterGET /api/projects/<id>/statusReal-time scan status polling (running/queued/complete/idle/error + queue position)
ArbiterPOST /api/execute-projectRemote project creation and execution for automation
IntelligenceGET /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_ping extends 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=0 on HTML responses
  • Pragma: no-cache
  • X-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_file endpoint 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

Console History
Full console transcript with timestamps, stream type (stdout/stderr/status/finding), and color coding. History is loaded from disk for discovered projects or after Gauntlet restarts (from console_history.jsonl, scan.log, or gearbox_log.jsonl).
Gearbox Log Viewer
Structured log entries with severity levels (INFO, WARNING, ERROR, FATAL, PROMPT, ANSWER, FINDING, DONE). Entries are parsed from __GB_LOG__ tokens and standard log-level prefixes in Gearbox output.
Error Classification
Errors are auto-classified into three categories: Communication (connection/timeout/DNS issues), Tool (subprocess failures/crashes/permission errors), and Gearbox (internal errors). Classification uses keyword matching against the error message and detail.
Combined Log View
Merge Gearbox log entries, Gauntlet audit log entries, and error entries into a single time-ordered view. Each entry includes its source for filtering.

Device Configuration

Interface Types
Supports 19 interface types out of the box: Ethernet, USB, Ethernet_tap, HDMI, DVI, SDI, DisplayPort, RCA, Aux, Zigbee, Bluetooth, DB9 (serial/CAN), Wi-Fi, Sub-GHz, UWB, SmartCard, Z-Wave, LoRa, and RFID. Each interface type has a predefined set of test modules.
Sub-Device Support
Devices can be decomposed into sub-devices (e.g., a medical system's controller unit, display unit, and sensor module). Each sub-device has its own interface definitions and instance assignments.
Instance Definitions
Each interface can have multiple instances (e.g., three Ethernet ports, two USB-A connectors). Instances are identified by ID, name, and/or physical location. Modules are tested per-instance.
Module Assignment
Each interface type comes with predefined modules (e.g., Ethernet has Photo, EthernetIface, Ethtool, ConfigDiscovery, TrafficCollector, DhcpServer, NmapLive, Nessus, Responder, NmapPort, BannerGrab, Web, Nuclei, SSL, SSH, FTP, SMB, NFS). Modules can be selectively enabled or disabled per instance.
Nessus Integration
Nessus scanner credentials are read from environment variables (NESSUS_USER, NESSUS_PASS) and passed through the sudo boundary as CLI arguments so Gearbox can authenticate with the Nessus scanner.

Evidence Management

Per-Module Evidence Directories
Each module's evidence is stored in a structured directory under the device's evidence tree: <Client>/<Device>/<SubDevice>/<Interface>/<Instance>/<Module>/. Evidence files are organized by the module that produced them.
Evidence File Viewer
View evidence files in-browser. Text files are rendered as preformatted text. Images are displayed inline. PCAP files are parsed with dpkt and rendered as human-readable packet summaries (up to 5,000 packets). Files over 5 MB show a size warning.
Evidence Tree Browser
Hierarchical file browser showing all evidence files in the project directory. Files are organized by sub-device, interface, instance, and module.
Evidence Scanning
Scan all modules for a given instance to discover which modules have evidence on disk. Returns file lists with sizes and image indicators. Used to populate the evidence tab without loading every file.
Module Evidence Verification
Check whether required evidence files exist for a given module. Used to validate test completion and identify modules that need to be re-run.
Module Reset
Clear evidence and progress for a specific module on a specific instance, allowing it to be re-run without resetting the entire project.
Upload Content Validation
Uploaded evidence files are validated per module type. For example, Nessus uploads check for valid XML structure, PCAP uploads verify magic bytes, and JSON uploads verify valid JSON syntax.

Export & Integration

Project Template API
GET /api/project-template returns the schema for external integration, listing all fields (client_name, client_short, device, device_model, etc.) with types and required flags. Enables programmatic project creation by external tools.
Execute Project API
POST /api/execute-project creates a project and optionally queues it for immediate execution. Returns the project ID and queue position. Used for automation and external orchestration.
Nexus Status Endpoint
GET /api/nexus-status provides health and version information for Nexus hub discovery. Returns the application name, version, and status.
Arbiter Projects Endpoint
GET /api/arbiter-projects returns project data in the format expected by the Arbiter enrichment and reporting system.

Findings Management

Real-Time Injection
Findings arrive via __GB_FINDING__ protocol tokens and are immediately written to findings.jsonl and broadcast to the UI. Each finding includes title, risk level, IP, port, tools used, description, affected items, and output file references.
Finding Grouping
Merge two or more related findings under a single display title (e.g., multiple SSL findings on different ports). Original findings are soft-deleted to deleted_findings.jsonl with audit markers. The grouped finding inherits the highest risk level and combines all output files.
Finding Rename
Change a finding's display title. The original title is preserved in the audit trail via finding_grouping_changes.jsonl.
Risk Level Override
Override a finding's risk level (Critical, High, Medium, Low, Informational). The change is written to findings.jsonl and, if a Gearbox database exists, synced to the SQLite findings table.
Finding Deletion with Undo
Soft-delete findings by moving them to deleted_findings.jsonl. Deleted findings can be viewed and potentially recovered. Supports audit markers including deletion timestamp and grouping lineage.
False Positive Management
Mark findings as false positives (moves to falsePositives.json + CSV). Recover false positives back to findings. List all current false positives. Uses the shared pr0t31n false positive helper when available.

Intelligence & Observations

Observations Panel
Auto-synthesized observations from findings. For completed projects without live observation data, observations are reconstructed from findings.jsonl (one per unique interface/instance/IP/tool combination, capped at 500).
Intel Aggregation
Aggregated device and network intelligence using the shared pr0t31n_intel module. Builds synthetic host and service inventories from finding IP/port pairs and runs the network aggregator for pattern analysis.

Mobile Integration

QR Code Join
Generates QR codes for each network interface on the host machine, each encoding a unique HTTPS join URL (e.g., https://192.168.1.5:5700/join/<project_id>). Testers scan the QR with a mobile device to open the photo upload page.
Photo Upload
Mobile devices capture photos directly from the camera and upload them to the correct evidence directory. Photos are auto-named with client/device/interface/instance identifiers and incrementally numbered to prevent overwrites.
Photo Context
The desktop UI can set a photo context (current module/instance) so mobile uploads are automatically filed into the correct evidence directory without the mobile user needing to select it.
iOS Compatibility
Handles iOS live camera captures that report empty filenames by falling back to the Content-Type header for extension detection. Supports WEBP, JPEG, PNG, and GIF formats.

Project Management

Creation Wizard
Multi-step web wizard to define client details, device information, sub-devices, interfaces, instances, and per-instance test module assignments. Generates a YAML configuration file in the universal directory structure.
Edit Wizard
Modify any aspect of an existing project's configuration. Automatically renames the YAML file if client or device names change, and cleans up stale progress entries for removed interfaces.
Project Deletion
Delete a project from the registry with an option to also delete the project directory and all its files from disk.
Project Reset
Clear all test data (findings, logs, evidence, progress) while preserving the YAML configuration and project_meta.json. Allows re-running the assessment from scratch.
Auto-Discovery
Scans the clients_base directory tree for project_meta.json files with tool=gearbox. Discovered projects are automatically registered in Gauntlet without manual import.
YAML Path Import
Import an existing Gearbox YAML file by providing its absolute path. The project is registered and its directory becomes the working project folder.
ZIP Import
Upload and extract a project ZIP archive. The archive is extracted, YAML files are located, and the project is auto-registered with all its evidence and findings intact.
ZIP Export
Stream-download the entire project directory as a ZIP archive. Includes YAML, all findings files, evidence, logs, and metadata. Uses explicit Content-Length streaming for reliable HTTPS downloads.
JSON Export
Export structured project data as JSON, including all instances, modules, evidence references, findings, and tool output. Evidence paths are relativized for portable cross-system references.

System Management

System Info
GET /api/system_info returns hostname, platform, Python version, Gearbox availability, and interface module definitions.
System Cleanup
POST /api/system_cleanup removes stale temporary files, orphaned ZIP exports, and other artifacts that accumulate over time.
Legacy Migration
Automatic migration of legacy project formats (e.g., old projects.json structure, pre-UUID instance keys) to the current format on load.

Test Execution

Sequential Execution
Only one Gearbox instance runs at a time. If a test is already running, new test requests are placed in a disk-persisted queue. When the current test completes, the next queued job auto-starts.
Execute Queue
Disk-persisted job queue that survives Gauntlet restarts. Jobs are loaded on startup and executed in order. The queue is saved to disk after every add/remove operation.
Background Execution
The /api/execute-project endpoint creates a project and optionally queues it for execution without requiring an active SocketIO connection. Results are written to disk regardless of UI presence.
Real-Time Console
Gearbox stdout/stderr is streamed to all connected browsers via SocketIO events (gearbox_output). Late-joining clients receive buffered history (up to 2,000 lines). The console shows raw output, status updates, findings, and log entries with color-coded streams.
Interactive Prompts
When Gearbox needs user input (e.g., IP address, confirmation), it emits a __GB_PROMPT__ token. Gauntlet displays the prompt in the web UI, collects the answer, and forwards it to Gearbox's stdin. Supports password masking. 30-minute timeout per prompt.
Module Status Tracking
Real-time tracking of each module's status (pending, running, complete, failed) per interface instance. The progress dashboard shows completed vs. total modules. Status updates arrive via __GB_STATUS__ tokens.
Process Management
View the full process tree rooted at the Gearbox subprocess (using psutil or /proc). Kill individual child processes without terminating the entire test. Kill the entire Gearbox process tree when needed.

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

cd /opt/pr0t31n/Gauntlet && python3 app.py

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

https://localhost:5700

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)

sudo -E python3 /opt/pr0t31n/Gearbox/gearbox.py <yaml_path> --join-interfaces '<json>' --project-dir <path>

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

sudo -E python3 /opt/pr0t31n/Gearbox/gearbox.py <yaml_path> --nessus-user <user> --nessus-pass <pass> --join-interfaces '<json>' --project-dir <path>

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.

Gearbox
Device security testing engine. Gauntlet launches Gearbox as a managed subprocess to execute 80+ security testing modules across device interfaces. Gearbox reads the YAML configuration, iterates through all assigned modules per interface instance, and communicates results back through __GB_* protocol tokens.
sudo -E python3 gearbox.py <yaml_path> --join-interfaces '<json>' --project-dir <path>
sudo -E python3 gearbox.py <yaml_path> --nessus-user admin --nessus-pass secret --join-interfaces '<json>' --project-dir <path>
dpkt
Python library for PCAP file parsing. Used by Gauntlet's evidence viewer to convert PCAP/PCAPNG binary files into human-readable packet summaries. Parses Ethernet, IP, TCP, UDP, and ICMP layers. Falls back to MAC-level display for non-IP traffic. Truncates at 5,000 packets.
pip3 install dpkt
pr0t31n_intel
Shared intelligence aggregation module. Gauntlet uses it to build aggregated device and network intelligence from findings. Synthesizes host and service inventories from finding IP/port pairs and runs pattern analysis.
python3 -c "import pr0t31n_intel; print('available')"
pr0t31n_false_positives
Shared false positive management helper. Provides add_false_positive(), remove_false_positive(), load_false_positives(), and find_false_positive() functions for moving findings between active and FP states with JSON + CSV dual-write.
python3 -c "import pr0t31n_false_positives; print('available')"

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.jsonl with _grouped_into markers
  • Records the operation in finding_grouping_changes.jsonl for audit

Finding Lifecycle

A finding can transition through these states:

  1. Active: Present in findings.jsonl, displayed in the Findings tab
  2. Risk-adjusted: Risk level overridden by the tester (persisted to JSONL and DB)
  3. Renamed: Title changed for clarity (audit logged)
  4. Grouped: Original soft-deleted; new grouped finding created
  5. Deleted: Moved to deleted_findings.jsonl (recoverable via the deleted findings view)
  6. 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

StatusMeaning
PendingModule has not yet been started
RunningModule is currently executing (Gearbox is actively testing)
CompleteModule finished successfully with or without findings
FailedModule encountered an error during execution
SkippedModule 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

FileFormatDescription
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

MethodUsage
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

Used By

Third-Party Dependencies & Credits

Tool / LibraryDeveloperTypeLink
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

NameGauntlet
CategoryManagement
Version1.12.0
Install Path/opt/pr0t31n/Gauntlet
Main Fileapp.py
Port5700
GitHubhttps://github.com/pr0t31n/Gauntlet.git
RequiresGearbox, Shared