CVE-2025-28197

9.1 CRITICAL

📋 TL;DR

Crawl4AI versions up to 0.4.247 contain a Server-Side Request Forgery (SSRF) vulnerability in the async_dispatcher.py component. This allows attackers to make unauthorized requests from the vulnerable server to internal or external systems. Anyone running Crawl4AI web scraping/automation software with the vulnerable component exposed is affected.

💻 Affected Systems

Products:
  • Crawl4AI
Versions: <= 0.4.247
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects deployments where the async_dispatcher.py endpoint is accessible/used.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could pivot to internal networks, access cloud metadata services, perform port scanning, or interact with internal APIs/services that trust the vulnerable server.

🟠

Likely Case

Data exfiltration from internal services, interaction with cloud metadata endpoints (potentially obtaining credentials), or scanning of internal network resources.

🟢

If Mitigated

Limited impact if network segmentation restricts outbound connections and internal services require authentication.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

The GitHub gist shows proof-of-concept exploitation details. SSRF vulnerabilities are commonly weaponized due to their utility in network pivoting.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: > 0.4.247

Vendor Advisory: https://gist.github.com/AndrewDzzz/f49e79b09ce0643ee1fc2a829e8875e0

Restart Required: Yes

Instructions:

1. Upgrade Crawl4AI to version > 0.4.247. 2. Restart the Crawl4AI service/application. 3. Verify the fix by checking the version and testing SSRF protections.

🔧 Temporary Workarounds

Network Access Control

linux

Restrict outbound network connections from Crawl4AI servers using firewall rules.

iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP

Input Validation

all

Implement URL validation/sanitization in async_dispatcher.py to block internal/restricted addresses.

🧯 If You Can't Patch

  • Isolate Crawl4AI servers in a restricted network segment with no access to internal resources.
  • Implement a reverse proxy with strict URL filtering to block SSRF attempts before they reach the vulnerable component.

🔍 How to Verify

Check if Vulnerable:

Check if Crawl4AI version is <= 0.4.247 and if async_dispatcher.py endpoint accepts external URLs.

Check Version:

pip show crawl4ai | grep Version

Verify Fix Applied:

Test if the patched version rejects requests to internal IPs (127.0.0.1, 192.168.*, 10.*, 172.16-31.*) and cloud metadata endpoints.

📡 Detection & Monitoring

Log Indicators:

  • Unusual outbound HTTP requests from Crawl4AI server
  • Requests to internal IP ranges or cloud metadata endpoints

Network Indicators:

  • HTTP traffic from Crawl4AI server to unexpected destinations
  • Port scanning patterns originating from Crawl4AI server

SIEM Query:

source="crawl4ai_logs" AND (url CONTAINS "169.254.169.254" OR url CONTAINS "metadata.google.internal" OR url MATCHES "10\.\d+\.\d+\.\d+")

🔗 References

📤 Share & Export