PHP反序列化漏洞安全通告

发布时间 2018-08-23

漏洞编号和级别

 

CVE编号:无,危险级别:高危,CVSS分值:官方未评定


影响版本


PHP > 5.3


漏洞概述


Secarma 公司的安全研究员 Sam Thomas 发现一种新型利用技术,可导致黑客通过使用此前被认为风险较低的函数触发 PHP 语言中严重的反序列化漏洞。这种新技术导致成千上万款 web 应用程序易遭远程代码执行攻击,包括一些受热门内容管理系统驱动的网站如 WordPress 和 Typo3。


PHP 反序列化或对象注入漏洞最早发生在2009年,它可导致攻击者通过向 unserialized () PHP 函数提供恶意输入的方法执行多种攻击。序列化是将数据对象转换为纯字符串的过程,而反序列化函数帮助程序从字符串重新创建对象。Thomas 发现攻击者能使用针对 Phar 文件的低风险函数触发反序列化攻击,而无需在各种场景中使用 unserialize () 函数。Phar 文件是 PHP 中的一种存档格式,它以序列化格式存储元数据,当文件操作函数 (fopen、file_exists、file_get_contents 等)试图访问存档文件时就会被反序列化。


漏洞验证


大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://。其中一些通常用于利用远程文件包含漏洞,攻击者可以利用它们控制文件包含的完整路径,但是很少人关注 phar://,Phar(PHP Archive)文件的有趣之处在于它包含序列化格式的元数据。通过以下代码创建phar



通过以下代码进行测试:



通过执行结果可以看到,如果现在通过phar://对我们现有的Phar文件进行文件操作,则其序列化元数据将被反序列化。这意味着我们在元数据中注入的对象将被加载到应用程序中。如果此应用程序具有已命名的类TestObject,并且具有魔术函数destruct()或wakeup(),则会自动调用这些方法。这意味着我们可以在代码库中触发任何析构函数或唤醒方法,如果这些魔法函数对我们注入的数据进行操作,那么这可能会导致进一步的漏洞。


攻击者如果可以控制诸如include(),fopen(),file_get_contents(),file()等文件操作的函数,则可以造成严重的漏洞。因此,通常需要在这些函数使用前验证用户的输入。


到目前为止,攻击者如果可以控制诸如include(),fopen(),file_get_contents(),file()等文件操作的函数,则可以造成严重的漏洞。因此,通常需要在这些函数使用前验证用户的输入。


修复建议


Thomas 将问题告知 WordPress,后者证实该问题存在。WordPress发布的补丁并未完全解决这个问题。


Thomas 将漏洞告知 Typo3 公司,Typo3发布版本 7.6.30、8.7.17 和 9.3 解决了该问题。


缓解方案:


1、对PHAR档案进行签名检测。


2、如果不需要,禁用PHAR扩展。


参考链接


https://thehackernews.com/2018/08/php-deserialization-wordpress.html