Ferritaas Incident Intelligence
Defect Intelligence Report Bug 0885219 Severity: Critical (P1)

External Blocklist (EBL) Threat Feed Parse Error Triggering Loop in 'urlfilter'

Third-party External Blocklist (EBL) domain and URL feeds containing malformed regex wildcards cause catastrophic backtracking in the /bin/urlfilter worker daemon, pegging core CPU utilization at 100% and stalling enterprise web browsing.

Technical Root Cause Analysis

FortiOS supports automated ingestion of dynamic External Blocklists (EBL) formatted as plain text URL or domain feeds. The urlfilter engine parses feed entries into an internal Non-deterministic Finite Automaton (NFA) regex graph for rapid match evaluation.

When upstream threat feed maintainers publish malformed wildcards (such as unconstrained nested repetitions like .*.* or unanchored sub-expressions), the regex parser in FortiOS 7.2.4–7.2.7 fails to enforce recursion limits during URL evaluation.

As incoming HTTP/HTTPS client requests match against the corrupted pattern graph, the PCRE evaluation engine enters catastrophic backtracking. The urlfilter worker pegs its assigned CPU core at 99.8–100%, blocks the WAD proxy evaluation pipeline, and results in HTTP 504 Gateway Timeouts across all inspection profiles.

[urlfilter 18924] CPU pinned: 99.8% on core 2 (state: R) backtrace: #0 0x00007f5a19b22340 in regexec_backtrack () from /lib64/libpcre.so.1 #1 0x00007f5a1a120892 in urlfilter_ebl_match_entry+0x1ac () from /bin/urlfilter #2 0x00007f5a1a11ff40 in urlfilter_eval_request+0x310 () from /bin/urlfilter #3 0x00007f5a1a0f8b12 in wad_urlfilter_worker_loop+0x94 () from /bin/wad [urlfilter] WARNING: feed 'ThreatIntel_Feed_01' entry 14829 malformed regex token '.*.*'

Affected Firmware & Blast Radius Matrix

FortiOS Branch Vulnerable Builds Confirmed Clean Build Status & Workaround
FortiOS 7.2 7.2.4 – 7.2.7 7.2.8+ Disable malformed EBL resource & kill -15 worker
FortiOS 7.4 7.4.0 – 7.4.2 7.4.3+ Sanitize threat feed syntax or upgrade build
FortiOS 7.0 7.0.0 – 7.0.15 7.0.x Branch Clean Legacy EBL compiler does not exhibit backtracking loop

Platform Impact: Affects all FortiGate models (desktop FG-40F/60F up to high-end FG-3000F) that subscribe to dynamic External Blocklists (EBL) integrated into Web Filter or DNS Filter security profiles.

Step 01: Free Verification CLI (Safe Read-Only)

Execute these commands to confirm whether urlfilter workers are locked in 100% CPU loops and identify the compiled feed resources:

Diagnostic Commands

# 1. Check if urlfilter is pinning CPU cores to near 100%
diagnose sys top 2 5 | grep urlfilter

# 2. Query urlfilter application status and active worker threads
diagnose test application urlfilter 1

# 3. Dump compiled external resource tables and entry counts
diagnose test application urlfilter 3

# 4. Check WAD algorithm worker memory footprint
diagnose test application wad 2500

Remediation & Workaround Steps (Teaser Preview)

Follow the complete step-by-step remediation guide in the Ferrite interactive platform:

Step 02: Identify the Malformed Threat Feed Source

Isolate the specific External Resource ID and download URL generating parser compilation errors in debug logs.

🔒 Interactive CLI Available in Ferrite Runbook #05

Step 03: Temporarily Unlink Feed from Active Web Filter Profiles

Detach the corrupted threat list from firewall policies to immediately stop new regex evaluations without dropping traffic.

🔒 Interactive CLI Available in Ferrite Runbook #05

Step 04: Gracefully Recycle the Stuck urlfilter Worker via SIGTERM

Send Signal 15 to the hung worker PID to allow clean socket release and supervisor respawn without rebooting.

🔒 Interactive CLI Available in Ferrite Runbook #05
⚡ Ferrite Platform Superpowers

Execute the Complete Runbook with Live Browser Automation

Connect your FortiGate via browser console (Web Serial) or local SSH bridge, verify each command in real-time, generate ready-to-run Tera Term scripts, and export sanitized TAC dossiers.

Live Browser Automation Direct terminal connection with live step checkoff.
📟
1-Click Tera Term (.ttl) Generate scripts for air-gapped jumpboxes.
🛡️
Zero-Trust Scrubber Scrub serials and credentials in local browser RAM.
📄
TAC P1 Escalation Dossier Standardized evidence export with SHA-256 seal.

Frequently Asked Questions

What causes Bug 0885219?

Unescaped or duplicate wildcards in external threat feeds trigger non-deterministic exponential backtracking inside the libpcre engine, locking the evaluating thread in an infinite loop.

Can we fix this without upgrading FortiOS?

Yes. Disabling the external resource under config system external-resource and recycling the stuck worker PID with diagnose sys kill 15 <pid> immediately restores normal CPU levels.

How does FortiOS 7.2.8+ resolve the issue?

FortiOS 7.2.8+ enforces strict syntax validation during feed download and imposes a hard recursion limit (match limit 10,000) on the PCRE evaluator, discarding malformed tokens before compilation.