BugFix: Fixed Unsafe Zip Deserialization #77
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes a potential zip deserialization bug in your code.
Description
While triaging your project, our bug fixing tool generated the following diff(s)-
Here, the payload sent through
r.Body
is decompressed usinggzip
,deflate
, andzlib
based on the "Content-Encoding" header. However, the copy operation on line 97 is unsafe because the compressed data insider.Body
can contain zip bomb that can lead to deflation of large amount of data, which can lead to a denial of service.As a result, it is suggested that the
io.CopyN()
method is used with a maximum output limit (number of allowed bytes in the uncompressed data). Here,256 MB
has been set as the limit.Comments
Even though the
GetBody()
method isn't used anywhere in the codebase except for the two test files, anyone using your project as a dependency can import and use theGetBody()
method. As a result, having such a protection mechanism is the best option.CLA Requirements
This section is only relevant if your project requires contributors to sign a Contributor License Agreement (CLA) for external contributions.
All contributed commits are already automatically signed off.
Sponsorship and Support
This work is done by the security researchers from OpenRefactory and is supported by the Open Source Security Foundation (OpenSSF): Project Alpha-Omega. Alpha-Omega is a project partnering with open source software project maintainers to systematically find new, as-yet-undiscovered vulnerabilities in open source code - and get them fixed – to improve global software supply chain security.
The bug is found by running the Intelligent Code Repair (iCR) tool by OpenRefactory and then manually triaging the results.