IPBUF安全漏洞报告
English
CVE-2025-67720 CVSS 6.5 中危

CVE-2025-67720: Pyrofork download_media路径遍历漏洞

披露日期: 2025-12-11

漏洞信息

漏洞编号
CVE-2025-67720
漏洞类型
路径遍历
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Pyrofork

相关标签

路径遍历文件写入PyroforkTelegramMTProtoCVE-2025-67720中危漏洞输入验证不足

漏洞概述

Pyrofork是一个现代化的异步MTProto API框架,用于与Telegram进行交互。该框架在2.3.68及之前版本中存在严重的路径遍历(Path Traversal)漏洞。漏洞源于download_media方法在处理从Telegram服务器接收的文件名时缺乏充分的输入验证。当用户使用默认配置下载媒体文件时,该方法会直接使用Telegram消息中携带的file_name属性值来构建本地文件路径。攻击者可以通过发送带有恶意构造文件名的媒体消息(如包含../的路径遍历序列)来触发漏洞,从而在目标系统的任意目录中创建或覆盖文件。此漏洞可能导致服务器配置被篡改、持久化恶意代码或敏感数据被覆盖等严重后果。由于CVSS评分达到6.5(MEDIUM),且攻击复杂度较低,漏洞在实际环境中具有较高的利用风险。建议受影响的用户尽快升级到2.3.69或更高版本。

技术细节

漏洞存在于Pyrofork框架的download_media方法中。该方法在处理文件下载时,采用以下逻辑:当用户未指定自定义文件名时,方法会回退使用Telegram消息对象的file_name属性。file_name属性来源于Telegram的DocumentAttributeFilename字段,该字段完全由消息发送者控制。攻击者可以构造包含路径遍历序列(如../)的文件名,例如../../../etc/cron.d/malicious,当框架将此文件名直接拼接到下载目录路径时,会导致文件被写入到预期目录之外的位置。漏洞利用的关键在于:1)用户使用默认配置下载媒体;2)攻击者发送带有恶意文件名的媒体消息;3)框架未对file_name进行路径规范化或安全检查。修复版本2.3.69通过引入文件名清理机制来解决此问题,使用os.path.basename()等方法确保文件名不包含路径遍历字符。

攻击链分析

STEP 1
步骤1
攻击者在Telegram中向目标用户发送一个带有恶意构造文件名的媒体文件,文件名包含路径遍历序列如'../../../'
STEP 2
步骤2
目标用户使用Pyrofork框架的download_media方法下载该媒体文件,且未指定自定义文件名参数
STEP 3
步骤3
download_media方法回退使用消息对象中的file_name属性,该属性值由攻击者控制
STEP 4
步骤4
框架将恶意文件名直接拼接到下载目录路径中,未进行路径规范化或安全检查
STEP 5
步骤5
文件被写入到攻击者指定的目标位置(如系统关键目录),实现路径遍历攻击
STEP 6
步骤6
攻击者可通过覆盖系统配置文件、计划任务等方式实现持久化或远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import asyncio from pyrogram import Client # 恶意文件名示例:使用路径遍历序列 # 攻击者发送的文件名:../../../tmp/pwned.txt # 这将导致文件被写入到/tmp/pwned.txt而非预期的下载目录 async def exploit_download(): """ CVE-2025-67720 PoC - Path Traversal in Pyrofork download_media This PoC demonstrates how an attacker can trigger the path traversal vulnerability by sending a message with a crafted file_name that contains path traversal sequences like '../'. """ api_id = 12345 api_hash = "your_api_hash_here" async with Client("my_account", api_id, api_hash) as client: # Simulate receiving a message with malicious filename # The actual exploitation occurs when download_media is called # without specifying a custom filename parameter # Vulnerable code path: # file_name = message.document.file_name # attacker controlled # save_path = os.path.join(download_dir, file_name) # no sanitization # Example malicious filename: malicious_filename = "../../../tmp/arbitrary_file.txt" # The download_media method will use this filename directly # resulting in file being written outside the intended directory print(f"Malicious filename: {malicious_filename}") print("This filename will be used if download_media is called without custom filename") if __name__ == "__main__": asyncio.run(exploit_download()) # Defense: Always specify a sanitized custom filename # await message.download(file_name=os.path.basename(message.document.file_name))

影响范围

Pyrofork <= 2.3.68

防御指南

临时缓解措施
在等待官方修复期间,建议采取以下临时缓解措施:1)立即升级到Pyrofork 2.3.69版本;2)如果无法立即升级,在调用download_media时强制指定自定义文件名,并对文件名进行严格的安全验证,过滤掉'../'、'..\'等路径遍历字符;3)限制下载目录的权限,确保应用程序对关键系统目录没有写入权限;4)监控文件系统的异常写入行为;5)考虑使用沙箱环境隔离文件下载操作。

参考链接

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