🔥 CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案
CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案
🔍 源码独立审计
对 (未定位到源码) 源码进行独立审计(置信度 60%)。
🧬 根因独立理解
<p><strong>摘要:</strong>CVE-2026-6508 是 TUBITAK BILGEM 软件技术研究所开发的 Liderahenk 集中管理系统中存在的严重来源验证缺陷,CVSS 评分为 9.8。该漏洞允许已认证的 XMPP 客户端(例如被攻陷的 agent 节点)绕过 ACL 约束,以 root 权限在任意目标 agent 上执行任意代码,形成未授权的远程代码执行(Unauthorized RCE)与横向移动风险。受影响版本为 2.0.1,修复版本为 2.0.2。</p> <h2>📌 漏洞概述</h2> <p>CVE-2026-6508 被归类为 <strong>Origin Validation Error(来源验证错误)</strong>,属于“访问控制不充分”类问题。Liderahenk 的 agent 组件在接收来自 XMPP 通道的指令时,未能验证消息发送方的真实身份是否确为集中管理服务器(Lider Server),导致任何能够接入同一 XMPP 域的用户或设备都可以伪造管理指令。该漏洞的 CVSS v3.1 基准评分为 <strong>9.8(Critical)</strong>,攻击复杂度低,无需用户交互,且利用后果可达完全控制受影响主机。受影响的版本为 Liderahenk <strong>2.0.1 及之前版本</strong>,修复版本为 <strong>2.0.2</strong>。攻击者只需掌握一个有效的 XMPP 账号(例如被攻陷的 agent 凭据),即可利用该漏洞。</p> <h2>🔬 漏洞根因分析</h2> <p>要理解该漏洞,需要先梳理 Liderahenk 的系统架构。Liderahenk 采用中心化管控模型:管理服务器(Lider Server)通过 XMPP 协议与所有终端上的 ahenk agent 保持长连接。正常流程中,XMPP 服务器充当消息路由器,管理服务器向目标 agent 的 JID(XMPP 地址)发送 <code>EXECUTE_POLICY</code>、<code>EXECUTE_TASK</code> 或 <code>EXECUTE_SCRIPT</code> 等控制消息;agent 收到消息后执行相应的系统操作。由于 ahenk.service 以 root 权限运行,最终执行的命令权限为 root。</p> <p>漏洞的核心在于 <strong>agent 对消息信任边界的错误假设</strong>。agent 在实现上只检查了消息内容是否符合协议规范,而没有校验消息的“来源 JID”是否属于合法的管理服务器。攻击者通过一个普通 agent 的凭据(例如从 <code>/etc/ahenk/ahenk.conf</code> 中提取的 uid、password、host、port 等)即可连接到同一 XMPP 服务器,并构造一条看似来自管理服务器的 <code>EXECUTE_SCRIPT</code> 消息,目标 JID 设置为受害 agent 的 JID。XMPP 服务器是一个中立的转发节点,它不会区分消息的实际语义,按照标准路由规则将消息投递给目标 agent。目标 agent 收到消息后,既不验证消息的签名,也不验证发送方的域或 JID 是否与预设的管理服务器一致,直接解析并执行了消息中携带的命令。</p> <p>从攻击路径看,攻击者完全不需要利用 XMPP 服务器本身的漏洞,而是利用了 <strong>agent 与服务器之间缺失的双向身份认证</strong>。在 Liderahenk 2.0.1 的实现中,agent 只负责向 XMPP 服务器认证自身(提供 uid/password),但反向的服务器身份认证并未贯穿到业务消息层。即使使用了 TLS 加密传输,也只能确保消息在传输过程中不被窃听或篡改,无法解决应用层“消息来源可信”的问题。这种“传输安全”与“消息来源安全”的混淆,正是本漏洞能获得 9.8 分的关键因素——攻击难度极低,影响面却覆盖所有 agent 节点。</p> <p>此外,该漏洞也反映了 ACL(访问控制列表)约束的缺失。Liderahenk 的管理后台本应具备细粒度的授权机制,以决定哪个用户或服务可以命令哪个 agent。但在 XMPP 消息处理流程中,agent 端完全没有实施任何 ACL 检查,使得消息层面的“功能访问”不受任何权限模型限制。PoC(如 EvilAhenk 仓库所展示)通过截获的 XMPP 凭据伪装成合法 agent,再向同网段内的其他 agent 发送恶意指令,即可在目标主机上以 root 身份执行任意命令,整个过程无需与中央管理服务器交互。</p> <h2>💥 影响与危害<
🛤️ 漏洞触发链路
🧪 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-14 03:00