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

CVE-2026-34531 Flask-HTTPAuth 认证绕过漏洞

披露日期: 2026-04-01

漏洞信息

漏洞编号
CVE-2026-34531
漏洞类型
认证绕过
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Flask-HTTPAuth

相关标签

认证绕过FlaskFlask-HTTPAuth逻辑漏洞Web安全

漏洞概述

Flask-HTTPAuth 是一个为 Flask 路由提供基本、摘要和令牌 HTTP 身份认证的扩展库。在 4.8.1 版本之前存在一个安全漏洞,当客户端向受令牌保护的资源发起请求且未传递令牌或传递空令牌时,Flask-HTTPAuth 会将空字符串作为参数调用应用程序的令牌验证回调函数。如果应用程序数据库中存在将令牌设置为空字符串的用户,该请求可能会被错误地认证为这些用户之一,从而导致未授权访问。该问题已在 4.8.1 版本中修复。

技术细节

该漏洞的根源在于 Flask-HTTPAuth 对空令牌的处理逻辑缺陷。在正常的令牌认证流程中,客户端应携带有效的令牌。然而,在受影响版本中,当请求头中未包含令牌或令牌值为空时,库并未直接拒绝请求,而是将空字符串("")传递给开发者定义的 verify_token 回调函数进行验证。利用该漏洞的前提是应用程序存在逻辑缺陷或数据异常,即数据库中存储了某个用户的令牌为空字符串。当攻击者发送不带令牌的请求时,verify_token(auth_token) 被调用,其中 auth_token 为 ""。如果回调函数仅检查传入的令牌是否与数据库中的令牌匹配,而没有显式拒绝空字符串,且存在空令牌用户,则验证通过,攻击者即可获取该空令牌用户的身份权限。这属于一种逻辑型的认证绕过漏洞,依赖于应用程序特定的数据状态和验证逻辑实现。

攻击链分析

STEP 1
侦察
攻击者识别目标系统使用了 Flask-HTTPAuth 扩展,并推测其版本可能低于 4.8.1。
STEP 2
逻辑分析与探测
攻击者分析应用程序的认证逻辑,判断是否存在将空字符串作为有效令牌存储在数据库中的用户,或者验证回调是否存在缺陷。
STEP 3
发起攻击请求
攻击者构造一个指向受保护资源的 HTTP 请求,故意不携带 Authorization 头部或携带值为空的 Token。
STEP 4
绕过认证
Flask-HTTPAuth 将空字符串传递给验证回调,由于存在空令牌用户,验证通过,攻击者成功获取该用户的访问权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
from flask import Flask from flask_httpauth import HTTPTokenAuth app = Flask(__name__) auth = HTTPTokenAuth(scheme='Bearer') # Simulated user database # Vulnerable condition: A user exists with an empty string as the token users = { "": {"id": 1, "role": "admin"}, "valid_token_123": {"id": 2, "role": "user"} } @auth.verify_token def verify_token(token): # The callback receives an empty string "" if no token is provided # in vulnerable versions. If "" is a valid key in users, # it authenticates the request. if token in users: return users[token] return None @app.route('/protected') @auth.login_required def protected_resource(): # If exploited without a token, this returns the admin user info return f"Logged in as User ID: {auth.current_user()['id']}" if __name__ == '__main__': # To test: Run the server and send a GET request to /protected # WITHOUT the Authorization header. The server will treat # the missing token as an empty string and authenticate as admin. app.run(debug=True)

影响范围

Flask-HTTPAuth < 4.8.1

防御指南

临时缓解措施
建议立即升级至 Flask-HTTPAuth 4.8.1 或更高版本以修复此漏洞。若无法立即升级,应在 verify_token 回调函数中添加显式检查,拒绝传入空字符串或 None 的令牌请求,并确保数据库中不存在将令牌字段设置为空字符串的用户记录。

参考链接

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