IPBUF安全漏洞报告
English
CVE-2026-46359 CVSS 7.5 高危

CVE-2026-46359 phpMyFAQ SQL注入漏洞

披露日期: 2026-05-15

漏洞信息

漏洞编号
CVE-2026-46359
漏洞类型
SQL注入
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
phpMyFAQ

相关标签

SQL注入phpMyFAQOAuth认证高危漏洞

漏洞概述

phpMyFAQ 4.1.2之前的版本中存在严重的SQL注入安全漏洞。该漏洞位于`CurrentUser::setTokenData`组件中,允许通过OAuth认证的攻击者注入恶意的令牌声明以执行任意SQL语句。具体而言,如果攻击者利用包含SQL元字符的Azure AD账户显示名称或JWT声明进行登录,即可破坏字符串字面量并执行任意数据库查询。此漏洞可能导致敏感数据泄露、完整性受损及系统可用性丧失,对系统安全构成严重威胁。

技术细节

该漏洞的核心原理在于phpMyFAQ在处理OAuth身份验证流程时,未能对外部输入的令牌数据进行充分的过滤和转义。具体受影响的函数`CurrentUser::setTokenData`负责将OAuth令牌中的用户信息(如Azure AD的显示名称)同步到本地数据库。由于代码采用了不安全的字符串拼接方式构建SQL查询,攻击者可以注册一个包含恶意SQL载荷的Azure AD账户。当该账户触发登录流程(满足UI:R用户交互要求)时,恶意载荷会被传递至数据库服务器。攻击者利用单引号等特殊字符逃逸出原本的字符串上下文,进而拼接并执行任意SQL命令。尽管CVSS指标显示无需系统内部权限(PR:N),但攻击者需要诱导用户点击OAuth登录或自行控制该账户。成功利用此漏洞后,攻击者可完全控制数据库,包括读取用户密码哈希、篡改数据或通过存储过程甚至获取服务器权限,造成极高的安全风险。

攻击链分析

STEP 1
步骤1
攻击者创建一个包含SQL元字符(如单引号)的Azure AD账户,利用其显示名字段作为注入载体。
STEP 2
步骤2
攻击者诱导受害者或自行通过OAuth协议(如“使用Microsoft登录”)访问phpMyFAQ系统。
STEP 3
步骤3
phpMyFAQ接收OAuth令牌,并在`CurrentUser::setTokenData`方法中解析令牌数据。
STEP 4
步骤4
系统未经充分过滤直接将恶意的显示名称拼接到SQL语句中并执行。
STEP 5
步骤5
数据库执行恶意SQL命令,导致数据泄露或被非法篡改。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import jwt import json # Proof of Concept for CVE-2026-46359 # This script demonstrates the creation of a malicious JWT token claim. # An attacker would register an Azure AD account with a display name # containing SQL injection payloads. # The payload attempts to bypass the string literal in the SQL query # Example: UPDATE users SET display_name = '<PAYLOAD>' ... # Malicious payload to break out and comment out the rest sql_injection_payload = "Attacker' OR 1=1 --" # Simulated JWT payload structure that would come from the OAuth provider malicious_token_payload = { "sub": "001", "unique_name": sql_injection_payload, "email": "[email protected]", "ver": "2.0" } print("Malicious JWT Claim Payload:") print(json.dumps(malicious_token_payload, indent=2)) # When phpMyFAQ < 4.1.2 processes this token in CurrentUser::setTokenData, # it may construct a query like: # INSERT INTO user_data (display_name) VALUES ('Attacker' OR 1=1 --') # This results in arbitrary SQL execution.

影响范围

phpMyFAQ < 4.1.2

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用基于OAuth(如Azure AD)的登录功能,仅保留本地账户认证,直到应用补丁。同时,应检查数据库日志中是否存在异常的SQL查询记录,以排查是否已被入侵。

参考链接

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