CVE-2025-66577

5.3 MEDIUM

📋 TL;DR

This vulnerability in cpp-httplib allows attackers to spoof client IP addresses by sending malicious X-Forwarded-For or X-Real-IP headers. This can poison server logs, evade audit trails, and potentially influence authorization decisions. Any application using cpp-httplib versions before 0.27.0 with the vulnerable get_client_ip() function is affected.

💻 Affected Systems

Products:
  • cpp-httplib
Versions: All versions before 0.27.0
Operating Systems: All platforms where cpp-httplib is used
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects applications using the get_client_ip() function from docker/main.cc or similar implementations that accept headers unconditionally.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers completely evade detection by spoofing IP addresses in all logs, bypass IP-based authorization controls, and manipulate server metadata for further attacks.

🟠

Likely Case

Log poisoning leading to inaccurate audit trails, difficulty in forensic investigations, and potential evasion of basic IP-based rate limiting.

🟢

If Mitigated

Limited impact if proper IP validation and logging controls are already implemented separately from the vulnerable function.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires only sending HTTP requests with malicious headers, making this trivial to weaponize.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 0.27.0

Vendor Advisory: https://github.com/yhirose/cpp-httplib/security/advisories/GHSA-gfpf-r66f-5mh2

Restart Required: Yes

Instructions:

1. Update cpp-httplib to version 0.27.0 or later. 2. Replace the vulnerable header file in your project. 3. Recompile and restart all affected services.

🔧 Temporary Workarounds

Implement custom IP validation

all

Replace get_client_ip() with custom function that validates X-Forwarded-For and X-Real-IP headers against trusted proxies

Web server proxy configuration

linux

Configure reverse proxies (nginx, Apache) to strip or validate X-Forwarded-For headers before they reach the application

# nginx example: proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Only if from trusted proxy

🧯 If You Can't Patch

  • Implement network-level IP validation using firewalls or WAFs to filter suspicious X-Forwarded-For patterns
  • Enhance logging to capture both original and forwarded IP addresses for correlation

🔍 How to Verify

Check if Vulnerable:

Check if your code uses get_client_ip() from cpp-httplib and verify the version is below 0.27.0

Check Version:

Check your cpp-httplib header file for version information or examine project dependencies

Verify Fix Applied:

Test that X-Forwarded-For and X-Real-IP headers are properly validated or ignored after update

📡 Detection & Monitoring

Log Indicators:

  • Mismatch between client IP in access logs and network connection logs
  • X-Forwarded-For headers from untrusted sources

Network Indicators:

  • HTTP requests with multiple X-Forwarded-For headers
  • Requests from internal IPs claiming external origins

SIEM Query:

source="web_logs" | search X-Forwarded-For="*" | where client_ip != last(split(X-Forwarded-For, ","))

🔗 References

📤 Share & Export