go mime/multipart:允许限制部分头数据的最大数量

z9ju0rcb  于 6个月前  发布在  Go
关注(0)|答案(2)|浏览(42)

这是一个功能请求,允许mime/multipart包的Reader用户在调用NewPart()函数时指定加载到内存中的头数据限制。
Reader.NewPart()调用了net/textproto包的Reader.ReadMIMEHeader()函数,该函数没有任何限制地将所有头数据加载到内存中。
mime/multipartReader也在net/http包中用于解析multipart/form-data POST请求,这意味着像Request.ParseMultipartFormRequest.FormValueRequest.FormFileRequest.MultipartReader这样的函数受到影响。
我认为这可以作为远程拒绝服务攻击的向量。
解决此问题的可能方法是限制HTTP请求体大小(在某些服务器(如nginx)中默认执行),但这对于需要接受大文件的POST请求的服务器(例如,文件托管服务)不适用。
类似情况的例子是net/http包的Server字段,它限制了头数据的数量,但没有限制正文。

wn9m85ua

wn9m85ua1#

为了说明问题,以下是一个利用此漏洞的示例客户端代码:https://www.zerobin.net/?8db1a70f1608fb27#TzogmA1w8sPRNSnByLRcRrwHY0D7urscLFil6AbDdQA=
受其影响的测试服务器代码:https://www.zerobin.net/?6f1057f7dc78ba55#4/v39opPJuwZyqEF8xft8Iqvmkv0QPyhWC189EZy+HE=
这可能导致内存不足的情况,因此我建议在运行测试服务器的机器上关闭交换空间,并使用 nice -19 运行测试服务器。

相关问题