CVE-2017-20206CVE-2017-20206是WordPress Appointments插件中存在的一个高危PHP对象注入漏洞。该漏洞影响Appointments插件2.2.1及以下版本,由于插件对用户传入的`wpmudev_appointments` Cookie值进行了不安全的反序列化操作,攻击者可以通过精心构造的序列化字符串注入恶意PHP对象。该漏洞CVSS评分为9.8,属于严重级别,无需认证即可远程利用,且已被攻击者在野积极利用。攻击者主要利用WordPress核心中的`WP_Theme()`类进行攻击,通过该类的魔术方法(如`__destruct`或`__toString`)触发任意文件写入操作,从而在目标服务器上创建Web后门。Wordfence安全团队于2017年10月发现该漏洞正在被广泛利用,属于零日漏洞。该漏洞的危害极大,攻击者可以完全控制受影响的WordPress网站,包括读取敏感数据、修改网站内容、上传恶意文件以及执行任意代码。由于WordPress插件生态的广泛性,全球大量网站可能受到影响。漏洞已于2017年10月通过插件更新修复,但许多未及时更新的网站仍面临风险。
该漏洞的根本原因在于Appointments插件对Cookie数据的处理不当。插件在处理用户请求时,会读取名为`wpmudev_appointments`的Cookie值,并直接使用PHP的`unserialize()`函数对其进行反序列化,而没有进行任何验证或过滤。PHP的`unserialize()`函数在反序列化过程中会自动调用对象的魔术方法(如`__wakeup()`、`__destruct()`、`__toString()`等)。攻击者利用WordPress核心代码中存在的`WP_Theme`类,该类的`__toString()`魔术方法会调用`translate()`方法,而`translate()`方法最终会触发`file_exists()`检查。当传入的路径被攻击者控制时,可以结合其他类(如`WP_Theme`)的属性操作实现任意文件读取或写入。攻击者构造恶意的序列化字符串,其中包含`WP_Theme`对象并设置其`headers`属性为恶意PHP代码内容,然后通过`__toString()`触发文件写入操作,最终在网站目录中创建包含恶意代码的文件(如Web Shell)。整个攻击过程无需用户认证,无需用户交互,仅需发送一个包含恶意Cookie的HTTP请求即可完成利用。攻击者通常将后门文件写入到WordPress的主题目录或uploads目录中,以便后续访问控制。