WAD HTTP/2 Context Double-Free Crash under High Concurrency
FortiOS proxy worker process /bin/wad panics with signal 11 at http2_ctx_free+0x48 when client browsers rapidly close multiplexed HTTP/2 streams during high-throughput SSL inspection, causing silent session drops and worker crash loops.
Technical Root Cause Analysis
Under FortiOS proxy inspection mode with HTTP/2 enabled, the wad worker process maintains reference counts for every active multiplexed stream context. When high concurrency client sessions terminate abruptly (such as RST packets or TCP FIN bursts during web page asset fetching), the teardown routine invokes http2_stream_close concurrently with connection pool cleanup.
Due to a missing mutex guard in the stream deallocation callback, memory addresses are returned to the user-space slab cache twice. The second free call triggers an invalid pointer dereference inside the glibc memory manager, generating a Linux SIGSEGV (signal 11).
Affected Firmware & Blast Radius Matrix
| FortiOS Branch | Vulnerable Builds | Confirmed Clean Build | Status & Workaround |
|---|---|---|---|
| FortiOS 7.2 | 7.2.0 – 7.2.4 | 7.2.5+ | Disable HTTP/2 in proxy profile |
| FortiOS 7.4 | 7.4.0 | 7.4.1+ | Upgrade recommended or switch to flow mode |
| FortiOS 7.0 | Not Affected | 7.0.x Branch Clean | HTTP/2 multiplexing refactor absent in 7.0 |
Platform Impact: Affects all FortiGate models (FG-60F up to FG-3000F) running deep SSL proxy inspection with HTTP/2 enabled in high-concurrency enterprise web environments.
Step 01: Free Verification CLI (Safe Read-Only)
Execute these commands to confirm whether your FortiGate has experienced WAD worker crashes and verify active crash timestamps:
Diagnostic Commands
# 1. Read the kernel crashlog to detect WAD signal 11 crashes
diagnose debug crashlog read | grep -A 5 -B 2 "wad"
# 2. Check current WAD worker process IDs and running memory
diagnose test application wad 1000
diagnose sys process pidof wad
# 3. Verify top memory-consuming processes
diagnose sys top-mem 15
Remediation & Workaround Steps (Teaser Preview)
Follow the complete step-by-step remediation guide in the Ferrite interactive platform:
Frequently Asked Questions
Under proxy mode with HTTP/2, rapid client session termination triggers concurrent stream cleanup, causing the memory manager to double-free context pointers resulting in SIGSEGV signal 11.
Yes. Disabling HTTP/2 inside the protocol options profile forces negotiation of standard HTTP/1.1 via ALPN, bypassing the vulnerable code path without dropping user traffic.
Permanent code fixes were integrated into FortiOS 7.2.5, 7.4.1, and all subsequent firmware releases.