FileCodeBox绕过反暴力破解速率限制CVE-2026-64619
FileCodeBox 别名文件快递柜,是一款基于 FastAPI+Vue3 开发的开源轻量自托管文件/文本临时分享工具,核心靠提取码匿名传文件。
一、基本情况
FileCodeBox用于个人临时传大文件、开发分享代码片段、团队临时中转资料、自建私有文件中转站,不想使用网盘、重视隐私的用户。
FileCodeBox 可自定义有效期、最大下载次数,过期自动清理;支持永久留存,批量分片上传大文件,图片、视频、文档可在线预览。

FileCodeBox 可实现Docker 单命令一键部署,低配 NAS以及轻量云服务器均可运行;存储支持本地硬盘、S3、OneDrive、WebDAV。
栋科技漏洞库关注到FileCodeBox在2.4之前版本通过欺骗标头绕过反暴力破解速率限制,追踪为CVE-2026-64619,CVSS4.0评分 8.7。
二、漏洞分析
CVE-2026-64619漏洞是FileCodeBox 2.4版本之前的 IPRateLimit 类存在限流绕过漏洞,该漏洞评分较高且潜在风险较高,建议重视。
该漏洞未认证攻击者可传入自身可控的X-Real-IP与X-Forwarded-For请求头,程序未校验反向代理是否可信,借此绕过请求节流限制。
这就意味着攻击者每次请求传入伪造的全新IP值,然后通过暴力枚举所有分享码,无需身份验证就能够直接获取其他用户上传的文件。
具体来说,FileCodeBox针对无需登录的“通过分享码获取文件”接口设置了基于单IP的限流机制。
限流组件读取客户端传入的X-Real-IP、X-Forwarded-For请求头识别客户端,未配置可信代理校验逻辑。
任意未认证攻击者每次请求更换头部内的IP值,程序会将每次请求识别为全新客户端,限流规则永远不会触发。
分享码默认是5位数字,总计90000种组合,且文件获取接口无需鉴权。限流机制失效后,攻击者可短时间内遍历全部分享码。
未认证攻击者能够枚举所有分享码,下载其他用户分享的全部文件与文本内容。该绕过手段同样会使上传接口的限流保护失效。
(一)详情
限流组件通过攻击者可控的请求头判定客户端身份:
文件路径 apps/base/dependencies.py
python
class IPRateLimit:
def __call__(self, request: Request) -> str:
ip = (
request.headers.get("X-Real-IP")
or request.headers.get("X-Forwarded-For")
or request.client.host
)
if not self.check_ip(ip):
raise HTTPException(status_code=423, detail="请求次数过多,请稍后再试")
return ip
X-Real-IP与X-Forwarded-For属于完全由请求发起方自定义的头部字段。
程序不会验证请求是否经过可信反向代理,即便存在上述请求头,也不会降级使用真实传输层对等地址request.client.host。
check_ip与add_ip函数的节流状态完全基于可伪造的IP值作为索引,每次更换请求头IP都会生成全新的空限流桶。
(二)apps/base/views.py中无需登录的文件获取接口受该节流机制管控:
@share_api.post("/select/")
async def select_file(data: SelectFileModel, ip: str = Depends(ip_limit["error"])):
file_storage = storages[settings.file_storage]()
has, file_code = await get_code_file_by_code(data.code)
if not has:
ip_limit["error"].add_ip(ip) # 仅记录错误访问次数
return APIResponse(code=404, detail=file_code)
await update_file_usage(file_code)
return APIResponse(detail=await build_select_detail(file_code, file_storage))
以下接口无任何鉴权依赖:POST /share/select/、GET /share/select/、POST /share/metadata/、GET /share/metadata/。
输入正确分享码会直接返回存储的文本内容或文件下载链接。
防止暴力猜码的唯一屏障是ip_limit["error"],默认配置为1分钟内最多10次错误尝试。
(三)分享码取值空间较小,且通过非密码安全伪随机数生成器生成:
文件路径 apps/base/utils.py
async def get_random_code(style: str = "num") -> str:
while True:
code = await get_random_num() if style == "num" else await get_random_string()
if not await FileCodes.filter(code=code).exists():
return str(code)
文件路径 core/utils.py
async def get_random_num():
return random.randint(10000, 99999) # 共90000组数字,使用标准库普通随机函数,非密码安全随机源
绝大多数限时分享(按天/小时/分钟/访问次数过期)使用5位数字分享码。
限流失效后,攻击者可无限制请求全部90000组数字,遍历所有有效分享。
永久分享采用5位大写字母+数字组合(36的5次方种组合),同样可被枚举,且不受节流限制。
上传接口同样使用ip_limit["upload"]限流实例做防护,伪造IP的手段也会让上传限流失效。
程序默认开启访客匿名上传功能(openUpload=1),攻击者可滥用存储空间与服务器资源。
三、影响范围
FileCodeBox ≤ 2.4
四、修复建议
FileCodeBox > 2.4
五、参考链接
管理员已设置登录后刷新可查看