
Local Go PoC जो CVE-2026-72815 को प्रदर्शित करता है, जो go-chi/chi middleware.RealIP में एक X-Forwarded-For IP spoofing flaw है जो IP-आधारित ACLs को bypass करता है, साथ में v5.3.0 fixed comparison के साथ।
middleware.RealIP IP Spoofing PoCयह रिपॉज़िटरी go-chi/chi के middleware.RealIP में मौजूद IP spoofing कमज़ोरी CVE-2026-72815 (GHSA-3fxj-6jh8-hvhx) का स्थानीय Proof of Concept (PoC) है।
कमज़ोर RealIP middleware X-Forwarded-For के पहले (सबसे बाएँ) मान को बिना शर्त भरोसा करता है और उस मान से http.Request.RemoteAddr को ओवरराइट कर देता है। ऐसी कॉन्फ़िगरेशन में जहाँ क्लाइंट X-Forwarded-For निर्दिष्ट कर सकता है, हमलावर मनमाना IP पता स्रोत के रूप में प्रस्तुत कर सकता है और IP-आधारित ACL, rate limit, ऑडिट लॉग आदि को बायपास या दूषित कर सकता है।
यह PoC केवल httptest का उपयोग करता है और किसी बाहरी होस्ट से संचार नहीं करता।
इसका उपयोग केवल शैक्षिक उद्देश्यों और अनुमत सुरक्षा सत्यापन के लिए करें। किसी तीसरे पक्ष के वातावरण पर बिना अनुमति इसका उपयोग न करें।
github.com/go-chi/chi/v5middleware.RealIP>= 5.2.1, < 5.3.05.3.0middleware.RealIP जब X-Forwarded-For मौजूद होता है, तो कॉमा से अलग किए गए पहले मान को लेकर RemoteAddr में सेट कर देता है।
अवधारणात्मक रूप से यह प्रक्रिया इस प्रकार है।
if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
ip, _, _ = strings.Cut(xff, ",")
}
r.RemoteAddr = ip
सामान्यतः reverse proxy मौजूदा X-Forwarded-For के अंत में वास्तविक स्रोत IP जोड़ता है। इसलिए यदि हमलावर पहले से निम्नलिखित जैसा मान निर्दिष्ट कर सकता है, तो सबसे बाएँ मान पर भरोसा नहीं किया जा सकता।
X-Forwarded-For: 127.0.0.1, 203.0.113.50
कमज़ोर RealIP 127.0.0.1 को क्लाइंट IP के रूप में अपना लेता है।
cd vulnerable
GOWORK=off go run .
PoC यह मानता है कि वास्तविक क्लाइंट 203.0.113.50 है और व्यवस्थापक के रूप में अनुमत IP 127.0.0.1 है।
सामान्य अनुरोध HTTP 403 होगा, लेकिन निम्नलिखित हेडर जोड़े गए अनुरोध में RealIP RemoteAddr को 127.0.0.1 में बदल देता है और HTTP 200 हो जाता है।
X-Forwarded-For: 127.0.0.1, 203.0.113.50
अपेक्षित मुख्य आउटपुट:
=== CVE-2026-72815 vulnerable case ===
[*] go-chi/chi version: v5.2.1
[*] normal request status: 403
[*] spoofed request status: 200
[!] VULNERABLE: attacker-controlled X-Forwarded-For bypassed the IP ACL.
cd fixed
GOWORK=off go run .
v5.3.0 में RealIP के विकल्प के रूप में ClientIPFromHeader, ClientIPFromXFF, ClientIPFromXFFTrustedProxies, ClientIPFromRemoteAddr जोड़े गए हैं।
इस PoC के fixed case में "सर्वर के ठीक पहले एक विश्वसनीय proxy है और वह proxy वास्तविक क्लाइंट IP को XFF के अंत में जोड़ता है" ऐसी कॉन्फ़िगरेशन मानकर ClientIPFromXFF() का उपयोग किया गया है। वही spoofed हेडर भेजने पर भी सबसे दाएँ 203.0.113.50 अपनाया जाता है, इसलिए ACL को तोड़ा नहीं जा सकता।
अपेक्षित मुख्य आउटपुट:
=== CVE-2026-72815 safe replacement case ===
[*] go-chi/chi version: v5.3.0
[*] normal request status: 403
[*] spoofed request status: 403
[+] SAFE: the spoofed leftmost X-Forwarded-For value did not bypass the IP ACL.
bash scripts/run-version-matrix.sh
v5.3.0 में भी, पश्चगामी संगतता के लिए पुराने middleware.RealIP का व्यवहार स्वयं बना हुआ है। RealIP में deprecated की टिप्पणी जोड़ी गई है और सुरक्षित ClientIPFrom* API पर स्थानांतरण की सिफ़ारिश की गई है।
इसलिए केवल dependency को v5.3.0 में अपडेट करके middleware.RealIP का उपयोग जारी रखने के बजाय, वास्तविक network / reverse proxy कॉन्फ़िगरेशन के अनुरूप ClientIPFrom* middleware पर स्थानांतरित होना आवश्यक है।
यह रिपॉज़िटरी केवल निम्नलिखित की जाँच करती है।
middleware.RealIP हमलावर-नियंत्रित सबसे बाएँ XFF मान को RemoteAddr में प्रतिबिंबित करता हैClientIPFromXFF() को उपयुक्त proxy कॉन्फ़िगरेशन में उपयोग करने पर वही इनपुट अस्वीकार किया जा सकता हैवास्तविक नेटवर्क पर स्कैन, तीसरे पक्ष की सेवाओं पर अनुरोध, DoS, स्थायित्व आदि नहीं किए जाते।
middleware.RealIP से वास्तविक इन्फ्रास्ट्रक्चर के अनुरूप ClientIPFrom* middleware पर स्थानांतरित हों