
"php2shell" CVE-2026-109618 और CVE-2026-109619 के लिए Zeek और Suricata डिटेक्शन
"php2shell" CVE-2026-109618 / CVE-2026-109619 से संबंधित HTTP संकेतकों के लिए Zeek डिटेक्शन और Suricata नियम, जो PHP longjmp() मेमोरी हैंडलिंग में संभावित RCE है। निष्कर्ष संदिग्ध ट्रैफ़िक या संभावित रूप से प्रभावित सॉफ़्टवेयर की पहचान करते हैं।
Zeek 7.0.0 या बाद के संस्करण की आवश्यकता है। Zeek Package Manager के साथ इंस्टॉल करें:
zkg install https://github.com/corelight/php2shell-detect
@load packages के साथ अपने Zeek कॉन्फ़िगरेशन में इंस्टॉल किए गए पैकेज लोड करें।
सीधे चेकआउट के लिए, /path/to/php2shell-detect/scripts लोड करें।
यह पैकेज मानक Zeek HTTP, file-analysis, notice, और cluster API का उपयोग करता है।
यह पैकेज POST फ़ील्ड-नाम की लंबाई, चयनित सीरियलाइज़्ड-डेटा संरचनाओं, और दोहराए गए MIME हेडर का निरीक्षण करता है। यह कॉन्फ़िगर किए गए सत्र कुकीज़ का उपयोग करके संबंधित संदिग्ध लेनदेन को भी सहसंबंधित करता है। प्रतिक्रिया हेडर अलग PHP संस्करण इन्वेंटरी प्रदान करते हैं। ट्रैफ़िक Zeek के HTTP विश्लेषक को दिखाई देना चाहिए; एन्क्रिप्टेड HTTP के लिए निरीक्षण से पहले डिक्रिप्शन आवश्यक है।
सभी सूचना प्रकार PHP2SHELL:: के अंतर्गत हैं:
| सूचना | अवलोकन |
|---|---|
PHP_Crash_Sequence | एक सत्र के भीतर संबंधित संदिग्ध HTTP लेनदेन |
Multipart_Header_Flood | मान्यता प्राप्त MIME हेडर की अत्यधिक पुनरावृत्ति |
Large_Form_Key | असामान्य रूप से लंबा URL-एन्कोडेड फ़ॉर्म फ़ील्ड नाम |
Serialized_Integer_Overflow | असामान्य रूप से बड़ा सीरियलाइज़्ड इंटीजर टोकन |
Serialized_Integer_Collisions | मान्यता प्राप्त सीरियलाइज़्ड इंटीजर-की पैटर्न |
Serialized_String_Collisions | मान्यता प्राप्त सीरियलाइज़्ड स्ट्रिंग-की पैटर्न |
Serialized_Duplicate_Array | दोहराया गया सीरियलाइज़्ड ऐरे-एंट्री पैटर्न |
Serialized_Object_Repetition | दोहराया गया सीरियलाइज़्ड ऑब्जेक्ट पैटर्न |
Potentially_Affected_PHP_Version | प्रतिक्रिया हेडर कॉन्फ़िगर की गई प्रभावित सीमा के भीतर एक संस्करण की घोषणा करता है |
परिणाम मानक notice.log में जाते हैं; यह पैकेज कोई अतिरिक्त लॉग
स्ट्रीम नहीं बनाता है। सूचना का sub फ़ील्ड सीमित संदर्भ प्रदान करता है जैसे हेडर नाम,
लेनदेन की गहराई, गणनाएँ, और एक संक्षिप्त एस्केप किया गया POST-बॉडी नमूना। नमूने डिफ़ॉल्ट रूप से एस्केपिंग से पहले
64 रॉ बाइट्स तक सीमित होते हैं; उन्हें छोड़ने के लिए notice_body_sample_bytes=0 सेट करें। कुकीज़ और उनके डाइजेस्ट
केवल मेमोरी में उपयोग किए जाते हैं और इस पैकेज द्वारा लॉग नहीं किए जाते हैं।
डिफ़ॉल्ट रूप से, प्रत्येक विशिष्ट अनुरोध संकेतक प्रति लेनदेन एक सूचना उत्सर्जित कर सकता है।
एक ही संकेतक के दोहराए गए मिलानों को दबा दिया जाता है। प्रत्येक लेनदेन में पहली अनुरोध खोज के बाद बॉडी निरीक्षण रोकने के लिए
detect_only_once=T सेट करें।
संस्करण इन्वेंटरी सूचनाएँ अनुरोध खोजों से स्वतंत्र हैं।
सभी सेटिंग्स PHP2SHELL:: नेमस्पेस का उपयोग करती हैं:
| सेटिंग | डिफ़ॉल्ट | प्रभाव |
|---|---|---|
detect_only_once | F | प्रत्येक विशिष्ट अनुरोध संकेतक की रिपोर्ट करें; T पहली खोज के बाद रोक देता है |
max_trans_depth | 3 | प्रति कनेक्शन पहले तीन HTTP लेनदेन का निरीक्षण करें; 0 का अर्थ है सभी |
inspect_cookies | T | सहसंबंध के लिए सत्र कुकीज़ का उपयोग करें |
session_cookie_names | {"PHPSESSID"} | सत्रों को संबद्ध करने के लिए उपयोग किए जाने वाले कुकी नाम |
correlation_window | 1 min | लंबित सत्र सहसंबंध स्थिति की अधिकतम आयु |
max_pending_sessions | 1000 | प्रत्येक सहसंबंध तालिका में रखी गई प्रविष्टियों की सीमा |
inspect_post_bodies | T | POST एंटिटी डेटा और MIME हेडर का निरीक्षण करें |
http_body_analysis_byte_depth | 8388608 | POST-बॉडी निरीक्षण कार्य पर रूढ़िवादी 8 MiB सीमा, MIME भागों में साझा; 0 बॉडी डिलीवरी अक्षम करता है |
body_overlap_bytes | 256 | बॉडी चंक्स को पार करने वाले पैटर्न के लिए रखा गया ओवरलैप |
large_form_key_bytes | 65536 | फ़ॉर्म-नाम वायर-बाइट थ्रेशोल्ड |
multipart_header_threshold | 128 | खोज के लिए आवश्यक दोहराए गए मान्यता प्राप्त MIME हेडर |
notice_body_sample_bytes | 64 | प्रति सूचना नमूने में अधिकतम रॉ बॉडी बाइट्स; 0 नमूने छोड़ देता है |
detect_affected_php_versions | T | प्रतिक्रिया-हेडर संस्करण इन्वेंटरी सक्षम करें |
php_version_notice_interval | 1 hr | पोर्ट और संस्करणों में प्रति सर्वर IP संस्करण सूचनाओं को दबाएँ |
php_fixed_patch_versions | 8.2: 35, 8.3: 36, 8.4: 27, 8.5: 12 | प्रति ब्रांच अस्थायी पहला फ़िक्स्ड पैच |
उदाहरण के लिए:
redef PHP2SHELL::detect_only_once = T;
redef PHP2SHELL::notice_body_sample_bytes = 0;
redef PHP2SHELL::session_cookie_names += { "custom_session" };
POST निरीक्षण में पूरे बॉडी को जोड़ने के बजाय सीमित ओवरलैप वाले फ़ाइल-विश्लेषण चंक्स का उपयोग किया जाता है। फ़ॉर्म-नाम गणना मान विभाजकों और कच्चे NUL टर्मिनेशन का सम्मान करती है। केवल योग्य POST एंटिटीज़ को ही विश्लेषक मिलता है; बॉडी बजट और ट्रांज़ैक्शन सीमाएँ जानबूझकर पहचान के दायरे को सीमित करती हैं। ये संकेतक अपूर्ण हैं और सौम्य ट्रैफ़िक से भी मेल खा सकते हैं।
Zeek क्लस्टर में, वर्कर छोटे सत्र अवलोकनों को Cluster::publish_hrw() के साथ प्रॉक्सी तक रूट करते हैं। एक ही सत्र के दोनों चरण उसी प्रॉक्सी तक पहुँचते हैं, जो उन्हें मिलाता है और सीधे PHP_Crash_Sequence उठाता है। नोटिस फ़ॉलो-अप की कनेक्शन ID, UID और ट्रांज़ैक्शन गहराई बनाए रखता है; peer_descr प्रॉक्सी की पहचान करता है। वर्कर कॉलबैक के लिए पूर्ण कनेक्शन या HTTP रिकॉर्ड नहीं रखते।
ट्रिगर और बिना मिलान वाले फ़ॉलो-अप correlation_window के बाद समाप्त हो जाते हैं, जिसमें max_pending_sessions प्रत्येक तालिका को सीमित करता है। प्रॉक्सी प्रत्येक सत्र कुंजी के लिए पहला बिना मिलान वाला फ़ॉलो-अप बनाए रखते हैं। ट्रिगर उस कुंजी को सीधे खोजता है ताकि उल्टे क्रम में आने वाले संदेशों को संभाला जा सके; उसी कुंजी के लिए बाद के बिना मिलान वाले फ़ॉलो-अप तब तक समेकित किए जाते हैं जब तक वह प्रविष्टि मेल न खा जाए या समाप्त न हो जाए। मिलान में अवलोकन टाइमस्टैम्प और क्लाइंट, सर्वर, सर्वर पोर्ट, HTTP होस्ट और सत्र डाइजेस्ट का उपयोग होता है। स्टैंडअलोन Zeek स्थानीय रूप से सहसंबंधित करता है। सामान्य प्रॉक्सी कनेक्टिविटी आवश्यक है।
प्रॉक्सी नोटिस correlation_window के लिए UID और ट्रांज़ैक्शन गहराई द्वारा कुंजीबद्ध मानक नोटिस दमन का उपयोग करते हैं। यह वर्कर निष्कर्षों से स्वतंत्र है और वर्कर बॉडी निरीक्षण को नहीं रोकता। विभिन्न प्रॉक्सी पर विभिन्न सत्र कुकीज़ के लिए एक साथ होने वाले मिलान अभी भी डुप्लिकेट नोटिस उत्पन्न कर सकते हैं, इससे पहले कि क्लस्टर दमन प्रसारित हो।
बाहरी Server और X-Powered-By प्रतिक्रिया हेडर की जाँच की जाती है, जिसमें GET को दी गई प्रतिक्रियाएँ भी शामिल हैं। हेडर नाम केस-असंवेदनशील हैं। प्रभावित निचली सीमा PHP 5.4.0 है। निम्नलिखित कटऑफ़ मानते हैं कि 18 अक्टूबर 2026 को जाँचे गए नवीनतम स्थिर रिलीज़ के बाद अगला पैच दोनों बगों को संबोधित करेगा:
| शाखा | जाँच के समय नवीनतम स्थिर | अनंतिम पहला ठीक किया गया रिलीज़ |
|---|---|---|
| 8.2 | 8.2.34 | 8.2.35 |
| 8.3 | 8.3.35 | 8.3.36 |
| 8.4 | 8.4.26 | 8.4.27 |
| 8.5 | 8.5.11 | 8.5.12 |
कॉन्फ़िगर किए गए ठीक किए गए रिलीज़ और उसी शाखा में बाद के पैच अलर्ट नहीं करते। बिना कॉन्फ़िगर किए गए कटऑफ़ वाली शाखाएँ उम्मीदवार बनी रहती हैं। सामान्य विक्रेता प्रत्यय अंतर्निहित संख्यात्मक संस्करण का उपयोग करते हैं। बैनर अनुपस्थित हो सकते हैं, फिर से लिखे गए हो सकते हैं, या बैकपोर्ट किए गए फ़िक्स वाले विक्रेता बिल्ड को दर्शा सकते हैं, इसलिए ये सूची संकेत हैं।
[suricata/php2shell.rules][rules] में तीन नियम Zeek से स्वतंत्र रूप से चलते हैं। zkg के साथ Zeek पैकेज इंस्टॉल करने से ये नियम Suricata में लोड नहीं होते। तीनों नियम फ़ाइल में सक्षम हैं; Zeek कॉन्फ़िगरेशन विकल्प उन्हें प्रभावित नहीं करते।
| SID | निरीक्षण बफ़र | अवलोकन |
|---|---|---|
| 3000650 | POST विधि के साथ http.request_body | अनुरोध बॉडी में पहचान मार्कर |
| 3000651 | http.response_header | Server या X-Powered-By द्वारा विज्ञापित संभावित रूप से प्रभावित PHP संस्करण |
| 3000652 | http.response_body | phpinfo-आकार वाले HTML शीर्षक में संभावित रूप से प्रभावित PHP संस्करण |
अपने suricata.yaml में मौजूदा rule-files सूची में नियम फ़ाइल जोड़ें, अपनी अन्य नियम प्रविष्टियाँ बनाए रखें। अपने चेकआउट का निरपेक्ष पथ उपयोग करें: