CVE-2026-4006WordPress的Simple Draft List插件存在一处严重的存储型跨站脚本(Stored XSS)漏洞,影响版本最高至2.6.2。该漏洞源于插件在处理文章元数据中的display_name字段时,对用户输入的过滤和转义处理不当。当WordPress文章的作者没有设置个人主页URL(user_url为空)时,插件会将未经转义的display_name值直接插入到短代码输出中。攻击者只需拥有WordPress网站的Contributor(贡献者)级别权限,即可利用此漏洞在包含[drafts]短代码的页面中注入任意JavaScript脚本。由于漏洞性质为存储型,恶意脚本会被永久保存在数据库中,所有访问受影响页面的用户都会触发该脚本执行,可能导致会话劫持、敏感信息窃取等严重后果。
漏洞的核心问题位于插件的inc/create-lists.php文件第383行附近。插件通过`$draft_data->display_name`访问作者显示名称,由于display_name不是WP_Post对象的原生属性,PHP会触发`WP_Post::__get()`魔术方法,该方法内部调用`get_post_meta($post_id, 'display_name', true)`从数据库获取Custom Field的值。代码逻辑中存在明显的不一致处理:第378行在处理纯`{{author}}`标签时正确使用了`esc_html()`进行转义;第381行在存在user_url时也使用了`esc_html()`;唯独第383行在user_url为空的情况下,直接将`$author`变量赋值给`$author_link`而未进行任何转义处理。这个未转义的值随后通过`str_replace()`被插入到短代码的HTML输出中。攻击者只需在文章的display_name自定义字段中注入恶意脚本,如:`<img src=x onerror=alert(document.cookie)>`,即可实现持久化的XSS攻击。