新曝WordPress REST API内容注入漏洞详解

简介:

近日,来自Sucuri的研究人员发现WordPress存在重大漏洞,漏洞在于WordpressREST API,成功利用该漏洞可删除页面或修改页面内容。官方很快发布了升级版Wordpress,但很多管理员没有及时升级,以至于被篡改的网页从最初的几千一路飙升到了150万,在此也提醒各位管理员尽快升级。

漏洞

一、漏洞详情

1. 漏洞信息:

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。在4.7.0版本后,REST API插件的功能被集成到WordPress中,由此也引发了一些安全性问题。近日,一个由REST API引起的影响WorePress4.7.0和4.7.1版本的漏洞被披露,该漏洞可以导致WordPress所有文章内容可以未经验证被查看,修改,删除,甚至创建新的文章,危害巨大。

2. 漏洞影响版本:

WordPress4.7.0、WordPress 4.7.1

3. 复现环境:

Apache 2.4

PHP 7.0

WordPress4.7.1

4.复现过程:

(1) 安装WordPress并配置REST API

① 配置Apache+PHP+Mysql的运行环境,下载含有漏洞版本的WordPress (https://wordpress.org/wordpress-4.7.1.tar.gz)并安装。

② 加载Apache的rewrite模块。

在Apache的配置文件中添加

LoadModule rewrite_module/usr/lib/apache2/modules/mod_rewrite.so

并在主配置文件中设置对应的WEB目录的AllowOverride为All

加载Apache的rewrite模块

③设置WordPress站点为固定链接

在Settings->Permalinks中的Common Settings设置为非Plain模式。例如下图,我们设置为Day and name。

设置WordPress站点为固定链接

(2) 漏洞复现

①根据REST API文档,修改文章内容的数据包构造如下:

根据REST API文档,修改文章内容的数据包构造

可以看到,不带任何验证信息会提示不允许编辑文章

②构造可利用的数据包:

当url为/wp-json/wp/v2/posts/1?id=1a时,可以看到,已经成功跳过验证看到文章内容了。

当url为/wp-json/wp/v2/posts/1?id=1a时

二、漏洞发现之技术细节

Sucuri研究人员的漏洞发现过程始于./wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

漏洞发现之技术细节

这里有几件事值得注意。注册的路由用于用数字填充ID请求参数。比如,如果向/wp-json/wp/v2/posts/1234 –发送请求,则ID参数被设置为1234。

这种行为本身不失为一种防止攻击者编制恶意ID值的好方法,但是当查看REST API如何管理访问时,研究人员很快发现其给予$_GET 和$_POST值的优先级高于路由的正则表达式生成的值。这使攻击者可以发送/wp-json/wp/v2/posts/1234?id=12345helloworld这样的请求,这样会将12345helloworld分配到ID参数,这样包含的不仅仅是数字。

研究人员进一步查看了各种回调(上面截图中),其中一个引起了研究人员的注意:update_item及其权限检查方法:update_item_permissions_check。

update_item_permissions_check

简言之,它将字母数字ID值直接传递给了get_post()函数。该函数通过检查帖子是否实际存在以及用户是否有权编辑此帖来验证请求。研究人员认为这种审验请求的方式较为奇特。如果我们发送一个没有相应帖子的ID,我们可以通过权限检查,并被允许继续执行对update_item方法的请求。

出于对是什么导致get_post()无法找到帖子(除ID不存在外)的好奇,研究人员意识到其使用wp_posts中的get_instance()静态方法来抓取帖子。

wp_posts中的get_instance()

从代码中可以看出,对于不是由纯数字字符组成的任何输入,其基本上会失败 – 因此123ABC会失败。

对于攻击者,这意味着WordPress(将其视作具有足够权限编辑此帖的用户)会运行update_item方法。

我们认为有必要查看该方法的作用。

截图中有一个微妙但非常重要的细节——WordPress在将ID参数传递给get_post前先将其转换为一个整数。鉴于PHP进行类型比较和转换的方式,这是一个问题。比如,你会发现以下代码片段会返回123:

9.png

这导致了非常危险的情形,即攻击者可以提交/wp-json/wp/v2/posts/123?id=456ABC这样的请求来对ID为456的帖子进行篡改。

鉴于此类型欺骗问题,攻击者便可篡改受害者网站上的任何帖子或页面的内容。这样他们便可以添加插件特定的短代码来利用漏洞(原本仅限于贡献者)、使用SEO垃圾邮件活动感染网站内容或注入广告,等等。甚至可以很容易地执行PHP代码——取决于网站上启用的插件。

结语

这是一个可以以不同方式利用的严重漏洞,如果您的网站尚未启用自动更新,请尽快更新。

作者:华为未然实验室
来源:51CTO

相关文章
|
数据采集 安全 API
ChatGPT API漏洞可能导致DDoS和注入攻击
ChatGPT API漏洞可能导致DDoS和注入攻击
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
JSON 中间件 API
开发REST API3-11
开发REST API3-11
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
683 0
|
8月前
|
缓存 应用服务中间件 PHP
WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
本文分享三大网站提速方案:启用Memcached减少数据库压力,使用Super Static Cache生成静态页面,结合CDN实现全球加速,全面提升WordPress加载速度与用户体验。
341 1
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
338 19
|
缓存 搜索推荐 数据库
使用SiteGround搭建WordPress网站的方法
以上就是在SiteGround上搭建WordPress网站的步骤。这个过程可能需要一些时间和耐心,但只要你按照步骤操作,你就可以成功搭建自己的WordPress网站。
486 23
|
缓存 PHP 数据库
WordPress网站服务器性能优化方法,站长必备。
最后,当你将这些方法组合起来并实施时,您将发现你的WordPress网站性能有了显著的提高。别忘了,这不是一次性的任务,要定期执行,保持你的车(网站)始终在轨道上飞驰。
411 21
|
运维 网络安全 PHP
2025年面板安装 Wordpress 网站教程
本文对比了2025年国内主流服务器运维面板(宝塔、1Panel、Websoft9、AMH、旗鱼云梯)的核心特点与适用场景,并详细介绍了各面板安装WordPress的教程。内容涵盖环境配置、数据库创建及源码部署等步骤,同时提供了通用注意事项与选择建议。新手可优先考虑操作直观的宝塔面板或云端管理工具旗鱼云梯,技术爱好者和企业用户则可根据需求选择更专业或定制化的方案。
1879 2