新曝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

相关文章
|
4月前
|
人工智能 自然语言处理 前端开发
【2025.3.08更新】wordpress AI智能插件|自动生成SEO文章/图片/视频+长尾词优化 内置DeepSeek多模型支持与API扩展
Linkreate WordPress AI插件提供强大的自动化文章生成、SEO优化、关键词管理和内容采集功能。它能根据关键词自动生成高质量文章,支持多语言和批量生成,内置长尾关键词生成工具,并可定时自动发布文章。插件还集成了多种AI服务,支持前端AI客服窗口及媒体生成,帮助用户高效管理网站内容,提升SEO效果。
【2025.3.08更新】wordpress AI智能插件|自动生成SEO文章/图片/视频+长尾词优化 内置DeepSeek多模型支持与API扩展
|
3月前
|
人工智能 自然语言处理 搜索推荐
WordPress AI 原创文章自动生成插件,新增自定义生成图片API功能,支持自定义99%的生图API,拓展性超强
这是一款功能强大的WordPress AI原创文章自动生成插件,支持两种智能生成模式:传统自动方式和懒人智能方式。通过AI生成长尾关键词、多语言文章、动态化标题与内容结构,优化SEO效果,去AI特征,吸引更多点击。插件可自动生成配图、TAG标签及摘要,支持24小时无人值守自动化生成文章,并提交至各大搜索引擎。同时提供关键词管理、定时任务、API集成等功能,兼容主流AI模型,助力网站内容创作与SEO优化。适合个人站长及企业用户提升内容生产力。
|
5月前
|
数据采集 安全 API
ChatGPT API漏洞可能导致DDoS和注入攻击
ChatGPT API漏洞可能导致DDoS和注入攻击
|
8月前
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
10月前
|
JSON 中间件 API
开发REST API3-11
开发REST API3-11
|
10月前
|
JSON JavaScript API
编写REST API
编写REST API
175 2
|
9月前
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
166 0
|
15天前
|
JSON API 数据格式
淘宝商品评论API接口,json数据示例参考
淘宝开放平台提供了多种API接口来获取商品评论数据,其中taobao.item.reviews.get是一个常用的接口,用于获取指定商品的评论信息。以下是关于该接口的详细介绍和使用方法:
|
3月前
|
JSON 数据挖掘 API
1688API最新指南:商品详情接口接入与应用
本指南介绍1688商品详情接口的接入与应用,该接口可获取商品标题、价格、规格、库存等详细信息,适用于电商平台开发、数据分析等场景。接口通过商品唯一标识查询,支持HTTP GET/POST请求,返回JSON格式数据,助力开发者高效利用1688海量商品资源。
|
3月前
|
JSON 数据挖掘 API
京东API接口最新指南:店铺所有商品接口的接入与使用
本文介绍京东店铺商品数据接口的应用与功能。通过该接口,商家可自动化获取店铺内所有商品的详细信息,包括基本信息、销售数据及库存状态等,为营销策略制定提供数据支持。此接口采用HTTP请求(GET/POST),需携带店铺ID和授权令牌等参数,返回JSON格式数据,便于解析处理。这对于电商运营、数据分析及竞品研究具有重要价值。