重大漏洞!PHP multipart/form-data头部解析远程拒绝服务漏洞

 "有些人看不懂,简单比喻来说吧:目前刚出的任何安全防护都不会拦,网站类专属漏洞

畸形数据包,2KB随机数据包,2M网速打死各种网站,cdn通挂!"

PHP multipart/form-data
头部解析远程拒绝服务漏洞

发布日期:2015-05-18


受影响的软件及系统:
====================
PHP 5.0.0 - 5.0.5
PHP 5.1.0 - 5.1.6
PHP 5.2.0 - 5.2.17
PHP 5.3.0 - 5.3.29
PHP 5.4.0 - 5.4.40
PHP 5.5.0 - 5.5.24
PHP 5.6.0 - 5.6.8

未受影响的软件及系统:
======================
PHP 5.4.41
PHP 5.5.25 
PHP 5.6.9

综述:
======
PHP
存在一个远程拒绝服务漏洞,攻击者通过发送恶意的HTTP请求,可以导致CPU资源大量占用,造成远程拒绝服务。

此漏洞影响所有PHP 5版本,更低版本可能也受影响,建议尽快升级。

分析:
======
PHP
在处理HTTP请求中的multipart/form-data头部数据时存在一个安全漏洞,导致PHP大量重复分配和拷贝内存的操作,可能造成CPU资源占用100%并持续较长时间,这可能造成远程拒绝服务攻击。

PHP
调用multipart_buffer_headers()函数来解析HTTP请求中的multipart头部数据,每次解析由get_line得到的一行。当被解析的行是以空白字符开始或者不包含":"字符时,该行将被当作是前一头字段的延续来处理。此时,将会分配一个新的缓冲区,将前一头字段的值与当前行拼接起来作为该字段新的值。这个过程包含1emalloc调用、2memcpy调用。

若一个头字段是由多行组成,将导致多次调用emallocmemcpy,并且分配的空间与拷贝的长度将越来越大。

因此,当行的数目足够多时,拷贝的操作将显著的消耗服务器的CPU。实际测试中,包含近一百万行的头字段可以使服务器的CPU保持100%几秒或者数十秒。如果并发多个攻击请求,可能造成更长时间的资源占用。

攻击者可通过发送一个2M左右的包含多行multipart头部数据的HTTP请求来发起攻击,无需认证,也不依赖PHP程序本身的内容。


解决方法:
==========
没有好的临时解决方法,建议进行升级。

厂商状态:
==========
PHP
已经在下列版本中修复此漏洞:

PHP 5.4.41

http://php.net/downloads.php#v5.4.41

PHP 5.5.25

http://php.net/downloads.php#v5.5.25

PHP 5.6.9

http://php.net/downloads.php#v5.6.9

附加信息:
==========
1. https://bugs.php.net/bug.php?id=69364
2. http://php.net/ChangeLog-5.php#5.6.9
3. http://www.nsfocus.net/index.php ... do=view&aid=157

转载于:https://www.cnblogs.com/h4ck0ne/p/5154654.html

multipart/form-data是一种常用的用于在HTTP协议中传输二进制数据的编码格式。它通常用于文件上传功能。 在HTTP中,请求和响应的数据被划分为多个部分,每个部分由特定的分隔符进行划分。每个数据部分中包含一个头部和一个内容体,头部用来描述这个数据部分的一些信息,例如数据类型、数据长度等。内容体就是实际的数据内容。 在multipart/form-data中,数据部分的内容体可以是任意类型的数据,例如文本、图片、音频等。当上传文件时,可以将文件数据直接放到内容体中进行传输。每个数据部分的头部中会指定Content-Disposition字段,用来告诉服务器接收到的数据应该如何处理,例如存储文件的路径和文件名。 使用multipart/form-data编码格式可以确保文件和其他数据正确地传输到服务器端。而不会出现数据被截断或改变的问题。同时multipart/form-data也支持多个文件上传的功能,可以一次性上传多个文件。 对于服务器端来说,接收multipart/form-data格式的数据相对比较复杂,需要进行数据解析。常见的处理multipart/form-data的方式是通过使用特定的库或框架,例如PHP中的$_FILES和Python中的Flask框架中的request.files来处理文件上传。 总结来说,multipart/form-data是一种专门用于传输二进制数据的编码格式,特别适用于文件上传功能。它能够确保数据正确地传输到服务器端,同时支持多个文件上传。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值