
CVE-2026-73847 के लिए PoC - emlog AI सहायक CSRF से SQL निष्पादन तथा व्यवस्थापक अधिग्रहण (CVSS 6.8)
emlog pro के AI असिस्टेंट execute_tool एंडपॉइंट पर अनुपस्थित CSRF सुरक्षा के लिए PoC, जो हमलावर को एडमिन के प्रमाणित सत्र का उपयोग करके साइट डेटाबेस पर मनमाना SQL चलाने देता है — जिसमें पूर्ण एडमिन खाता अधिग्रहण शामिल है।
| CVE | CVE-2026-73847 |
| CNA | GitHub |
| परामर्श | GHSA-v6wr-4x55-7qp5 |
| CVSS 3.1 | 6.8 मध्यम — AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N |
| CWE | CWE-352 (CSRF), CWE-1275 (अनुचित SameSite), CWE-798 (हार्डकोडेड लेखन-पुष्टिकरण स्ट्रिंग) |
| प्रभावित | emlog pro 2.6.23 तक |
| श्रेय | Dostxodjayev Abdullox (@squeeze440) — CVE रिकॉर्ड में सुधार लंबित है, नीचे देखें |
emlog pro का एडमिन पैनल एक AI असिस्टेंट के साथ आता है जो POST /admin/ai.php?action=execute_tool के माध्यम से एडमिन की ओर से SQL निष्पादित कर सकता है। इस एक एंडपॉइंट पर कई समस्याएँ एकत्र होती हैं:
admin/ में बाकी हर विनाशकारी एक्शन फ़ाइल पहले LoginAuth::checkToken() कॉल करती है (जैसे admin/media.php:140)। admin/ai.php कभी नहीं करता।admin/ai.php:152, User::isAdmin()) — कोई Origin/Referer जाँच नहीं।include/service/ai.php:594: if (trim($confirm_code) !== 'confirm'). कोई भी जाली रिक्वेस्ट बस confirm_code=confirm भेजती है।include/service/ai.php:578,589) — एक साधारण प्रमाणित रिक्वेस्ट किसी भी टेबल पर SELECT कर सकती है।blog टेबल राइट-प्रोटेक्टेड है (include/service/ai.php:591) — user और बाकी हर टेबल पूरी तरह लिखने योग्य हैं।password से मेल खाता है (include/service/ai.php:822-828) — SELECT password AS pwd_hash FROM user रॉ हैश लौटाता है।SameSite एट्रिब्यूट नहीं है (include/lib/loginauth.php:99), जिससे Chrome की डिफ़ॉल्ट "Lax+POST" ग्रेस विंडो (लॉगिन के बाद लगभग पहले दो मिनट) इस और विश्वसनीय क्रॉस-साइट डिलीवरी के बीच एकमात्र बाधा बचती है।एक साथ जुड़कर: एडमिन के ब्राउज़र से एक जाली रिक्वेस्ट हर टेबल को पढ़ती है (पासवर्ड हैश सहित) और blog को छोड़कर हर टेबल पर लिखती है, जिसमें सीधे user.password को ओवरराइट करना शामिल है।
poc_raw_impact.sh)SQL/प्रमाणीकरण-बायपास प्रिमिटिव को CSRF डिलीवरी प्रश्न से अलग करता है। अपने नियंत्रण वाले स्थानीय इंस्टेंस पर चलाएँ:
./poc_raw_impact.sh http://TARGET admin '<adminpass>'
यह एडमिन के रूप में लॉगिन करता है, कॉलम-एलियास बायपास के माध्यम से पासवर्ड हैश डंप करता है, user टेबल के माध्यम से सीधे एडमिन पासवर्ड ओवरराइट करता है, फिर एक नए कुकी जार से हमलावर-चुने गए पासवर्ड से दोबारा लॉगिन करता है — यह साबित करता है कि एक बार प्रमाणित रिक्वेस्ट एंडपॉइंट तक पहुँच जाए तो पूर्ण खाता अधिग्रहण हो जाता है।

poc_csrf.html)मान लेने के बजाय लाइव ब्राउज़र के साथ SameSite प्रश्न का निपटारा करता है। poc_csrf.html को टारगेट से भिन्न किसी भी ओरिजिन से सर्व करें (एक अलग IP पर्याप्त है — Chrome अलग शाब्दिक IP को अलग साइट मानता है) और एक लॉग्ड-इन एडमिन से इसे साइन-इन करने के लगभग दो मिनट के भीतर खुलवाएँ:
python3 -m http.server 8888
# then point poc_csrf.html's form action at your target and get it opened
फ़ॉर्म लोड होते ही ऑटो-सबमिट हो जाता है, और क्रॉस-साइट confirm_code=confirm के साथ एक जाली query_database कॉल POST करता है।

लाइव सत्यापित: जाली क्रॉस-साइट POST एडमिन के वास्तविक प्रमाणीकरण कुकी को ले गया (sec-fetch-site: cross-site, कुकी संलग्न थी), 200 {"code":0,"msg":"ok",...} लौटाया, और इंजेक्टेड पंक्ति की उपस्थिति अनुवर्ती प्रमाणित रीड के माध्यम से पुष्टि की गई। लगभग 48 मिनट बाद वही अनुरोध उसी, अब पुराने कुकी जार के साथ दोहराने पर विफल रहा — कोई कुकी संलग्न नहीं थी और सर्वर ने अनप्रमाणित रिडायरेक्ट लौटाया, जिससे पुष्टि हुई कि लगभग दो मिनट की Lax+POST विंडो ही वास्तविक बाधा है (AC:H में परिलक्षित)।
emlog_options में मौजूद कोई भी रहस्य (SMTP क्रेडेंशियल्स, API कुंजियाँ, आदि) शामिल हैं।blog को छोड़कर हर टेबल पर, जिसमें user भी शामिल है — भूमिका/पासवर्ड/ईमेल ओवरराइट, जिसे एंड-टू-एंड खाता अधिग्रहण के रूप में प्रदर्शित किया गया।role=admin वाले खातों तक सीमित; writer/editor को User::checkRolePermission() द्वारा रोका जाता है। यह निचली भूमिका से विशेषाधिकार वृद्धि नहीं है — यह एक लॉग्ड-इन एडमिन द्वारा एक दुर्भावनापूर्ण लिंक क्लिक को पूर्ण, मूक साइट समझौते में बदल देता है।execute_tool में LoginAuth::checkToken() जोड़ें, प्रमाणीकरण कुकी पर SameSite=Strict सेट करें, और स्थिर confirm_code स्ट्रिंग को वास्तविक प्रति-सत्र, एकल-उपयोग टोकन से बदलें। पूर्ण सुधार विवरण परामर्श में है।
क्रेडिट पर नोट: GitHub-as-CNA ने GHSA द्वारा रिपोर्टर को क्रेडिट और स्वीकार करने के बावजूद CVE रिकॉर्ड को बिना किसी credits प्रविष्टि के प्रकाशित किया। 2026-08-16 को [email protected] पर एक सुधार अनुरोध भेजा गया था; यदि रिकॉर्ड सही किया जाता है तो इस README को अपडेट किया जाएगा।
यह परामर्श सार्वजनिक होने और CVE निर्धारित होने के बाद, रक्षात्मक/शैक्षिक उपयोग के लिए प्रकाशित किया गया है। इसे ऐसे emlog इंस्टेंस के विरुद्ध न चलाएँ जिसके मालिक आप नहीं हैं या जिसके परीक्षण के लिए आपको स्पष्ट रूप से अधिकृत नहीं किया गया है।