
CVE-2019-9787 (WordPress XSS/CSRF/RCE) के लिए PoC और शमन। यह सैनिटाइज़ेशन फिक्स, HttpOnly कुकीज़, और हैश-आधारित CSRF सुरक्षा को कोड संशोधनों के साथ प्रदर्शित करता है।
<script>alert('xss');</script>प्रशासकों के लिए सैनिटाइजेशन प्रक्रिया में तर्क दोष को ठीक करें।
/wp-admin/includes/ajax-actions.php और /wp-includes/comment.php में दो पंक्तियाँ जोड़ें (रिपोर्ट में विवरण)
remove_filter( 'pre_comment_content', 'wp_filter_post_kses' );
add_filter( 'pre_comment_content', 'wp_filter_kses' );
HTTP-Only
PHP द्वारा प्रबंधित सत्र कुकीज़ के लिए, फ़्लैग स्थायी रूप से php.ini में सेट किया जाता है (HttpOnly पर PHP मैनुअल) पैरामीटर के माध्यम से:
session.cookie_httponly = True
हैश-आधारित रक्षा
CSRF सत्यापन टोकन वर्डप्रेस में लागू नहीं किया गया है क्योंकि ऐसा करने से ट्रैकबैक और पिंगबैक सुविधाओं में बाधा उत्पन्न होगी। सर्वर अवैध CSRF अनुरोध को वैध PINGBACK/TRACEBACK अनुरोध से अलग नहीं कर सकता, वर्डप्रेस स्वचालित रूप से सही CSRF-टोकन के बिना टिप्पणी को PINFBACK और TRACEBACK अनुरोध के रूप में स्वीकार करता है और उस टिप्पणी को व्हाइट-लिस्ट फ़िल्टर से फ़िल्टर करता है।
इस CSRF कमजोरी से बचाव के लिए, हम फॉर्म में hashnonce नामक एक नया फ़ील्ड जोड़ते हैं ताकि यह सत्यापित किया जा सके कि टिप्पणी प्रशासक द्वारा भेजी गई है। प्रशासक अपने कुकी के साथ टिप्पणी फ़ील्ड के मान पर हस्ताक्षर करता है।
टिप्पणी फ़ील्ड के मान का हस्ताक्षर md5 का उपयोग करके हैश मान उत्पन्न करने के लिए किया जाता है (ग्राफ देखें)।
जब प्रशासक PINFBACK और TRACEBACK को अपनाने का प्रयास करता है और _wp_unfiltered_html प्रदान नहीं किया जा सकता, तो हम wp_verify_hashNonce का उपयोग करते हैं। यदि सत्यापन विफल होता है, तो एक त्रुटि दर्ज की जाएगी। भले ही सत्यापन सफल हो, तर्क दोष को ठीक कर दिया गया है और टिप्पणियों को फ़िल्टर करने के लिए "wp_filter_kses" का उपयोग किया जाएगा।
संशोधित कोड:
तीसरी विधि https://github.com/sijiahi/Wordpress_cve-2019-9787_defense से बदली गई है।