【缝隙公告】CVE-2021-3007 Zend Framework远程代码执行缝隙

颁布功夫 2021-01-05

0x00 缝隙概述

CVE  ID

CVE-2021-3007

时  间

2021-01-05

类   型

RCE

等  级

高危

远程利用

是

影响领域

Zend Framework 3.0.0

 

0x01 缝隙详情

image.png

Zend Framework (ZF)是Zend公司推出的一套使用 PHP 5 来开发 web法式和服务的开源框架。

2021年01月03日,Zend Framework 3.0.0被披露一个远程代码执行缝隙(CVE-2021-3007)。

该缝隙是不成信的反序列化造成的。当利用法式从用户或系统接管的序列化数据在被利用法式反序列化之前未得到正确验证时将导致反序列化缝隙,利用法式可能会反序列化和处置接管到的体式不正确的数据,这可能会导致利用法式崩溃。成功利用此缝隙的攻击者能够在某些情况下对PHP利用法式远程执行代码。该缝隙与Stream.php中Zend\Http\Response\Stream类的__destruct步骤有关。

 

缝隙细节

该缝隙来自Stream类的析构函数。在面向对象的编程中,机关函数和析构函数是在创建和销毁新的类对象时辰别挪用的步骤。

好比,新创建的 Stream对象将通过机关函数按其概想运行一系列号令,一旦对象在整个法式执行工作流程中实现工作,PHP诠释法式将最终挪用该对象的析构函数,并遵循另一组号令来开释内存、执行算帐工作并删除所有一时文件。

Stream的析构函数挪用unlink()步骤来删除文件,该步骤使用文件名作为string类型的参数。

image.png

而现实上,即便streamName对象为非string类型,在利用法式执行实现时仍会将其传递给析构函数。

因而,析构函数将尝试挪用该对象的__toString步骤,以获取其字符串值。

但是,__toString步骤能够很容易地由对象的创建者自界说,或者更确切地说是由对象事俘化的类的创建者自界说。

Zend Framework的Gravatar类中的 __toString步骤由其法式员编写的,其能够返回攻击者能够直接节造的值,最终能够远程执行肆意代码。

 

在该缝隙的PoC中,钻研人员演示了Web利用法式的phpinfo页面若何成功解析通过序列化HTTP要求传递的系统号令“ whoami”,并返回Windows帐户名称“ nt Authority \system”。

image.png

 

0x02 措置建议

目前,Zend Framework项目已经迁徙到Laminas项目,且Zend Framework不再受到支持,建议迁徙至Laminas项目或使用Zend Framework 3.0.0以表的其它版本。

下载链接:

https://framework.zend.com/

 

0x03 参考链接

https://www.bleepingcomputer.com/news/security/zend-framework-remote-code-execution-vulnerability-revealed/

https://github.com/Ling-Yizhou/zendframework3-/blob/main/zend%20framework3%20%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%20rce.md

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3007

 

0x04 功夫线

2021-01-03  Ling Yizhou披露缝隙

2021-01-05  VSRC颁布安全公告

 

0x05 附录

 

CVSS评分尺度官网:http://www.first.org/cvss/

image.png