Rack: Multipart parsing allows DoS via unbounded scan buffer growth
Rack::Multipart::Parser reads the request body in chunks of rack.multipart.buffer_size (1 MiB by default) into an internal scan buffer. Parsed bytes are only discarded from that buffer when a chunk ends inside a part body. A request whose parts are sized so that every chunk ends inside, or immediately after, a part's headers is never compacted, so the buffer grows to the size of the request.
Recorded fixes — rack: 2.2.25 or 3.1.23 or 3.2.8. Check your release branch.
Exploitation not established
| Affected range | Recorded fix |
|---|---|
| Earlier releases before 2.2.25Ecosystem versions | 2.2.25 |
Version evidence: OSV · GHSA-5v64-555j-wjxm
View original version evidence
{
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "2.2.25"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"0.1.0",
"0.2.0",
"0.3.0",
"0.4.0",
"0.9.0",
"0.9.1",
"1.0.0",
"1.0.1",
"1.1.0",
"1.1.1",
"1.1.1.pre",
"1.1.2",
"1.1.3",
"1.1.4",
"1.1.5",
"1.1.6",
"1.2.0",
"1.2.1",
"1.2.2",
"1.2.3",
"1.2.4",
"1.2.5",
"1.2.6",
"1.2.7",
"1.2.8",
"1.3.0",
"1.3.0.beta",
"1.3.0.beta2",
"1.3.1",
"1.3.10",
"1.3.2",
"1.3.3",
"1.3.4",
"1.3.5",
"1.3.6",
"1.3.7",
"1.3.8",
"1.3.9",
"1.4.0",
"1.4.1",
"1.4.2",
"1.4.3",
"1.4.4",
"1.4.5",
"1.4.6",
"1.4.7",
"1.5.0",
"1.5.0.beta.1",
"1.5.0.beta.2",
"1.5.1",
"1.5.2",
"1.5.3",
"1.5.4",
"1.5.5",
"1.6.0",
"1.6.0.beta",
"1.6.0.beta2",
"1.6.1",
"1.6.10",
"1.6.11",
"1.6.12",
"1.6.13",
"1.6.2",
"1.6.3",
"1.6.4",
"1.6.5",
"1.6.6",
"1.6.7",
"1.6.8",
"1.6.9",
"2.0.0.alpha",
"2.0.0.rc1",
"2.0.1",
"2.0.2",
"2.0.3",
"2.0.4",
"2.0.5",
"2.0.6",
"2.0.7",
"2.0.8",
"2.0.9",
"2.0.9.1",
"2.0.9.2",
"2.0.9.3",
"2.0.9.4",
"2.1.0",
"2.1.1",
"2.1.2",
"2.1.3",
"2.1.4",
"2.1.4.1",
"2.1.4.2",
"2.1.4.3",
"2.1.4.4",
"2.2.0",
"2.2.1",
"2.2.10",
"2.2.11",
"2.2.12",
"2.2.13",
"2.2.14",
"2.2.15",
"2.2.16",
"2.2.17",
"2.2.18",
"2.2.19",
"2.2.2",
"2.2.20",
"2.2.21",
"2.2.22",
"2.2.23",
"2.2.24",
"2.2.3",
"2.2.3.1",
"2.2.4",
"2.2.5",
"2.2.6",
"2.2.6.1",
"2.2.6.2",
"2.2.6.3",
"2.2.6.4",
"2.2.7",
"2.2.8",
"2.2.8.1",
"2.2.9"
]
}| Affected range | Recorded fix |
|---|---|
| From 3.0.0 before 3.1.23Ecosystem versions | 3.1.23 |
Version evidence: OSV · GHSA-5v64-555j-wjxm
View original version evidence
{
"ranges": [
{
"events": [
{
"introduced": "3.0.0"
},
{
"fixed": "3.1.23"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"3.0.0",
"3.0.1",
"3.0.10",
"3.0.11",
"3.0.12",
"3.0.13",
"3.0.14",
"3.0.15",
"3.0.16",
"3.0.17",
"3.0.18",
"3.0.2",
"3.0.3",
"3.0.4",
"3.0.4.1",
"3.0.4.2",
"3.0.5",
"3.0.6",
"3.0.6.1",
"3.0.7",
"3.0.8",
"3.0.9",
"3.0.9.1",
"3.1.0",
"3.1.1",
"3.1.10",
"3.1.11",
"3.1.12",
"3.1.13",
"3.1.14",
"3.1.15",
"3.1.16",
"3.1.17",
"3.1.18",
"3.1.19",
"3.1.2",
"3.1.20",
"3.1.21",
"3.1.22",
"3.1.3",
"3.1.4",
"3.1.5",
"3.1.6",
"3.1.7",
"3.1.8",
"3.1.9"
]
}| Affected range | Recorded fix |
|---|---|
| From 3.2.0 before 3.2.8Ecosystem versions | 3.2.8 |
Version evidence: OSV · GHSA-5v64-555j-wjxm
View original version evidence
{
"ranges": [
{
"events": [
{
"introduced": "3.2.0"
},
{
"fixed": "3.2.8"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"3.2.0",
"3.2.1",
"3.2.2",
"3.2.3",
"3.2.4",
"3.2.5",
"3.2.6",
"3.2.7"
]
}