
PJSIP DNS कम्प्रेशन पॉइंटर हीप OOB रीड (रिमोट DoS)
PJSIP DNS कम्प्रेशन पॉइंटर हीप OOB रीड (रिमोट DoS)
pjlib-util/src/pjlib-util/dns.c में get_name_len() और get_name() फ़ंक्शन pj_memcpy(&offset, p, 2) के माध्यम से 2-बाइट DNS कम्प्रेशन पॉइंटर पढ़ते हैं, बिना यह जाँचे कि दोनों बाइट्स पैकेट बफर के भीतर हैं। जब 0xC0 बाइट (कम्प्रेशन पॉइंटर मार्कर) DNS रिस्पॉन्स का अंतिम बाइट होता है, तो memcpy हीप आवंटन सीमा से एक बाइट आगे पढ़ता है।
एक एकल 20-बाइट क्राफ्टेड DNS रिस्पॉन्स OOB रीड को ट्रिगर करता है और किसी भी PJSIP एप्लिकेशन (Asterisk और FreeSWITCH सहित) को क्रैश कर देता है जो नेटवर्क-नियंत्रित DNS सर्वर के माध्यम से डोमेन को रिज़ॉल्व करता है।
ASan पुष्टि करता है: heap-buffer-overflow READ of size 2, 0 bytes after 20-byte region get_name_len() में।
यह 2022 के बाद से pjproject के dns.c में तीसरा DNS पार्सर CVE है (CVE-2022-24793 और CVE-2023-27585 के बाद)। CVE-2022-24793 फिक्स ने पार्सर में लंबाई जाँच जोड़ी थी लेकिन कम्प्रेशन पॉइंटर पथ को छोड़ दिया।
प्रभावित: pjproject <= 2.16। pjproject 2.17 (कमिट 5311aee) में फिक्स किया गया।
# स्टैंडअलोन ASan हार्नेस (कोई pjproject इंस्टॉलेशन आवश्यक नहीं):
./run.sh
# या मैन्युअल रूप से बनाएं और चलाएं:
gcc -fsanitize=address,undefined -g -O0 harness.c -o harness
./harness
# नेटवर्क PoC -- रॉग DNS सर्वर:
python3 poc.py --port 5353
# फिर PJSIP एप्लिकेशन को रॉग सर्वर की ओर इंगित करें:
# pjsua --nameserver 127.0.0.1:5353 sip:[email protected]
# Docker (ASan के साथ स्रोत से pjproject 2.16 बनाता है):
docker compose build
docker compose run harness
gccयह प्रोजेक्ट GNU GPLv3 के तहत जारी किया गया है।
यह रक्षात्मक सुरक्षा अनुसंधान, शिक्षा और अधिकृत परीक्षण के लिए प्रदान किया गया है। मालिक से स्पष्ट अनुमति के बिना इस कोड का उपयोग सिस्टम या सेवाओं के विरुद्ध न करें।
अनधिकृत उपयोग लागू कानून का उल्लंघन कर सकता है। लेखक तृतीय-पक्ष सिस्टम का परीक्षण करने की अनुमति नहीं देते हैं और दुरुपयोग के लिए ज़िम्मेदार नहीं हैं।
वारंटी और दायित्व शर्तों के लिए LICENSE फ़ाइल देखें।
| फ़ाइल | विवरण |
|---|
harness.c | स्टैंडअलोन ASan हार्नेस -- सटीक pjproject प्रकारों के साथ कमज़ोर get_name_len() को पुनः लागू करता है |
harness_pjlib.c | वैकल्पिक हार्नेस जो वास्तविक pj_dns_parse_packet() को कॉल करता है (Docker के लिए) |
poc.py | रॉग DNS सर्वर -- किसी भी क्वेरी का उत्तर क्राफ्टेड 20-बाइट पैकेट के साथ देता है |
run.sh | ASan हार्नेस बनाता और चलाता है |
Dockerfile | ASan के साथ स्रोत से pjproject 2.16 बनाता है |
docker-compose.yml | pjlib हार्नेस के लिए Docker सेटअप |
proof_output.txt | लाइव सत्यापन से पूर्ण ASan आउटपुट |