CVE-2026-46359phpMyFAQ 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登录或自行控制该账户。成功利用此漏洞后,攻击者可完全控制数据库,包括读取用户密码哈希、篡改数据或通过存储过程甚至获取服务器权限,造成极高的安全风险。