
syslog-ng के विरुद्ध CVE-2022-38725 के लिए प्रूफ ऑफ कॉन्सेप्ट
CVE-2022-38725 syslog-ng के 3.38.1 से पहले के संस्करणों में एक अनधिकृत सेवा अस्वीकार भेद्यता है।
https://github.com/syslog-ng/syslog-ng/security/advisories/GHSA-7932-4fc6-pvmc
https://nvd.nist.gov/vuln/detail/CVE-2022-38725
docker pull linuxserver/syslog-ng:3.36.1
docker run -p 514:5514/udp -p 601:6601/tcp --rm -it linuxserver/syslog-ng:3.36.1
echo '27 <182>2022-08-17T05:02:28.217 mymachine su: 'su root' failed for lonvick on /dev/pts/8' | nc 127.0.0.1 601 -w 1

3.38.1 रिलीज़ https://github.com/syslog-ng/syslog-ng/pull/4110 को जोड़ता है, जिसमें इस बग के समान वेरिएंट को रोकने के लिए यूनिट परीक्षण और कई सत्यापन शामिल हैं।
मूल समस्या में सहायक डिबगिंग शामिल है जिसने मूल कारण की पहचान की।
GitHub सलाहकार का दावा है कि भेद्यता RFC3164 के अनुचित पार्सिंग से होती है, जो पारंपरिक BSD syslog प्रारूप है। सलाहकार बताता है कि एक पूर्णांक अंडरफ़्लो हो सकता है और उपलब्धता के अलावा कोई प्रभाव संभव नहीं माना जाता है।
भेद्यता को ठीक करने वाला पुल अनुरोध RFC3164 और RFC5424 दोनों टाइमस्टैम्प पार्सर्स में यूनिट परीक्षण जोड़ता है।
ध्यान दें कि RFC3164 विनिर्देश टाइमस्टैम्प को Oct 11 22:14:15 प्रारूप से मेल खाने के लिए परिभाषित करता है, जबकि RFC5424 ISO प्रारूप 1985-04-12T19:20:50.52-04:00 का उपयोग करता है। यूनिट मामलों से संकेत मिलता है कि syslog-ng कोड किसी भी प्रारूप को पार्स करने का प्रयास करता है। GitHub सलाहकार का दावा है कि भेद्यता RFC3164 संदेशों को पार्स करते समय होती है, जो पूरी तरह से सटीक नहीं है। RFC5424 संदेश परिवर्तनीय लंबाई वाले टाइमस्टैम्प के लिए जिम्मेदार हैं। चूंकि syslog प्रोटोकॉल स्पष्ट रूप से संदेश प्रकार निर्दिष्ट नहीं करता है, syslog-ng परियोजना ने दोनों टाइमस्टैम्प को पार्स करने का प्रयास किया। यह RFC3164 संदेश को खराब टाइमस्टैम्प के साथ भेद्यता को ट्रिगर करने की अनुमति भी देता है:
echo '21 <182>Oct 11 22:14:15.123 mymachine su: 'su root' failed for lonvick on /dev/pts/8' | nc 127.0.0.1 601 -w 1
सिसलॉग स्रोत RFC6587 द्वारा वर्णित ऑक्टेट काउंटिंग का उपयोग करता है जो TCP संदेशों में भेजे गए बाइट्स की संख्या के साथ syslog संदेश को उपसर्ग करता है।
भेद्यता को ISO टाइमस्टैम्प के लिए पूरी तरह से हिसाब न रखने वाले संदेश आकार को भेजकर ट्रिगर किया जा सकता है। syslog-ng कोड टाइमस्टैम्प पर पुनरावृति करता है और निर्दिष्ट लंबाई से अंकों की संख्या घटाता है। यह बेमेल एक अंडरफ़्लो स्थिति की अनुमति देता है जहाँ पढ़ने की लंबाई ऋणात्मक हो जाती है जबकि संदेश से पढ़ने के लिए अभी भी डेटा है।
प्रक्रिया एक while लूप में प्रवाहित होती है जहाँ प्रक्रिया संदेश से वर्ण पढ़ने का प्रयास करते हुए अटक जाती है। यह समस्या दी गई प्रक्रिया के लिए 100% CPU उपयोग में परिणत होती है। एक हमलावर अतिरिक्त सिस्टम संसाधनों का उपभोग करने के लिए कई पेलोड भेजने में सक्षम है।
Syslog UDP पर ऑक्टेट काउंटिंग का उपयोग नहीं करता है इसलिए उपरोक्त पेलोड का कोई असामान्य प्रभाव नहीं है। syslog-ng कंटेनर/प्रक्रिया को पुनरारंभ करने से CPU उपयोग रीसेट हो जाता है।
syslog-ng के एक रखरखावकर्ता ने संकेत दिया कि किसी संदेश के बीच में TCP RST के माध्यम से इसे ट्रिगर करना संभव हो सकता है। यह नोट किया गया कि TCP RST से पहले संदेश को आंशिक टाइमस्टैम्प भेजने की आवश्यकता होगी। यह ऑक्टेट काउंटिंग को बायपास करने की अनुमति दे सकता है।