
CakePHP 5.4.2 - उच्च - रिमोट - प्रॉक्सी - trustedProxies किसी भी REMOTE_ADDR से X-Forwarded-* का सम्मान करता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · cakephp-trusted-proxies
वर्ग: HTTPS रीडायरेक्ट बायपास / IP-होस्ट स्पूफ पहुँच: रिमोट
CakePHP 5.4.2 (887b641) - Cake Software Foundation
HttpsEnforcerMiddleware जिसमें trustedProxies => ['10.0.0.1'] है, setTrustedProxies को कॉल करता है, जो trustProxy = true सेट करता है और सूची की तुलना REMOTE_ADDR से कभी नहीं करता। उसके बाद, scheme(), host(), और clientIp() हमलावर के X-Forwarded-Proto / X-Forwarded-For / X-Forwarded-Host / X-Real-IP को मान लेते हैं।
डिफ़ॉल्ट मिडलवेयर में trustedProxies null होता है और यह सक्षम नहीं होता। दस्तावेज़ीकृत लोड-बैलेंसर सेटअप ही उजागर मामला है। एक अनधिकृत HTTP क्लाइंट जो सूचीबद्ध प्रॉक्सी नहीं है, HTTPS रीडायरेक्ट को छोड़ सकता है और क्लाइंट IP तथा Host को स्पूफ कर सकता है।
| ID | अभी कोई CVE नहीं |
| वर्ग | HTTPS रीडायरेक्ट बायपास / IP-होस्ट स्पूफ |
| पहुँच | रिमोट (अनधिकृत HTTP; ऐप ने trustedProxies सेट किया) |
| CWE | CWE-441, CWE-346 |
| CVSS | High: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N |
| उत्पाद | CakePHP |
| प्रभावित | 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63) |
| प्रमाणीकरण | कोई नहीं। ऐप ने HttpsEnforcerMiddleware trustedProxies सेट किया |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
ऐसे ऐप की आवश्यकता है जिसने trustedProxies सक्षम किया हो (सामान्य रिवर्स-प्रॉक्सी HTTPS प्रवर्तन)। सूचीबद्ध प्रॉक्सी IP से कनेक्ट करने की आवश्यकता नहीं है।
| विशेषाधिकार | विधि / सिंक | लैब-प्रमाणित या अनुमानित |
|---|---|---|
| HTTPS रीडायरेक्ट / HSTS पथ छोड़ें | GET / HTTP के साथ X-Forwarded-Proto: https | लैब-प्रमाणित। 200, scheme=https, JSON में witness |
clientIp() स्पूफ करें | X-Forwarded-For: 203.0.113.50 | लैब-प्रमाणित। client_ip=203.0.113.50 |
host() स्पूफ करें | X-Forwarded-Host: spoof.invalid | लैब-प्रमाणित। host=spoof.invalid |
X-Real-IP के माध्यम से स्पूफ करें | X-Real-IP: 198.51.100.9 | लैब-प्रमाणित। client_ip=198.51.100.9 |
clientIp() पर आधारित IP ACL / रेट लिमिट को बायपास करें | वही स्पूफ | अनुमानित। RateLimitMiddleware का डिफ़ॉल्ट remote_addr यह बग नहीं है |
| नेगेटिव कंट्रोल | /control पर वही फॉरवर्डेड हेडर (कोई trustedProxies नहीं) | लैब-प्रमाणित। अभी भी https पर 301 |
इस शेष पर बंद: डिफ़ॉल्ट trustedProxies => null; लैब में REMOTE_ADDR स्वयं अभी भी Docker ब्रिज IP है (192.168.208.1, सूचीबद्ध 10.0.0.1 नहीं)। RCE नहीं। कुकी-जार बग नहीं।
मैंने cakephp/cakephp 5.4.2 को पिन किया। ServerRequest::setTrustedProxies():
public function setTrustedProxies(array $proxies): void
{
$this->trustedProxies = $proxies;
$this->trustProxy = true;
$this->uri = $this->uri->withScheme($this->scheme());
}
HttpsEnforcerMiddleware इसे तब कॉल करता है जब trustedProxies non-null हो। सूचीबद्ध IPs बाद में XFF श्रृंखला पर array_diff के रूप में उपयोग किए जाते हैं, कनेक्टिंग पीयर की जाँच के रूप में नहीं।
पहले से दर्ज गलत मोड़: डिफ़ॉल्ट मिडलवेयर को इस शेष मानना (यह नहीं है); RateLimitMiddleware x-forwarded-for को वही बग कहना (5.4.1 bakery ने पहले ही उस डिफ़ॉल्ट को remote_addr में बदल दिया था); यह दावा करना कि REMOTE_ADDR स्वयं स्पूफ किया गया था। नाटक: एक रिवर्स शेल।
python3 cakephp-trusted-proxies-Abraxas-Labs.py
या
cd lab
./run.sh
PHP 8.3 में Composer cakephp/cakephp 5.4.2। छोटा ऐप: / trustedProxies => ['10.0.0.1'] का उपयोग करता है; /control नहीं करता। 127.0.0.1:19430 पर लूपबैक HTTP।
/ बिना फॉरवर्डेड हेडर -> 301 https।/control proto/for/host/real-ip के साथ -> 301 https।/ X-Forwarded-Proto: https के साथ -> 200, scheme https, trust_proxy=true, REMOTE_ADDR 10.0.0.1 नहीं है।/ XFF + Host के साथ -> client_ip=203.0.113.50, host=spoof.invalid।/ X-Real-IP के साथ -> client_ip=198.51.100.9।SUCCESS cakephp-trusted-proxies pin=5.4.2 how=app remote-addr=192.168.208.1 listed-proxy=10.0.0.1 proto-bypass=200 control-redirect=301 client-ip=203.0.113.50 host=spoof.invalid x-real-ip=198.51.100.9 CAKEPHP-TRUSTED-PROXIES-WITNESS
फॉरवर्डेड हेडर को केवल तब मानें जब REMOTE_ADDR ट्रस्टेड-प्रॉक्सी सूची में हो (Symfony isFromTrustedProxy())। खाली सूची को ट्रस्ट सक्षम नहीं करना चाहिए।
887b641de9f7aba06071f98f17edcbc573cbcf63)src/Http/ServerRequest.php · src/Http/Middleware/HttpsEnforcerMiddleware.phpGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।