Symfony SSRF Vulnerability via Form Component
The advisory, in context
An issue was discovered in Symfony before 2.7.38, 2.8.31, 3.2.14, 3.3.13, 3.4-BETA5, and 4.0-BETA5. When a form is submitted by the user, the request handler classes of the Form component merge POST data and uploaded files data into one array. This big array forms the data that are then bound to the form. At this stage there is no difference anymore between submitted POST data and uploaded files. A user can send a crafted HTTP request where the value of a "FileType" is sent as normal POST data that could be interpreted as a local file path on the server-side (for example, "file:///etc/passwd"). If the application did not perform any additional checks about the value submitted to the "FileType", the contents of the given file on the server could have been exposed to the attacker.
Affected packages
Start with the recorded fix for your release branch. Check your installed version and test compatibility before upgrading. Fixing this advisory does not rule out other vulnerabilities in the release.
From 2.7.0 before 2.7.38
Fixed in 2.7.38
38 explicitly affected versions
v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.15, v2.7.16, v2.7.17, v2.7.18, v2.7.19, v2.7.2, v2.7.20, v2.7.21, v2.7.22, v2.7.23, v2.7.24, v2.7.25, v2.7.26, v2.7.27, v2.7.28, v2.7.29, v2.7.3, v2.7.30, v2.7.31, v2.7.32, v2.7.33, v2.7.34, v2.7.35, v2.7.36, v2.7.37, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "2.7.0"
},
{
"fixed": "2.7.38"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v2.7.0",
"v2.7.1",
"v2.7.10",
"v2.7.11",
"v2.7.12",
"v2.7.13",
"v2.7.14",
"v2.7.15",
"v2.7.16",
"v2.7.17",
"v2.7.18",
"v2.7.19",
"v2.7.2",
"v2.7.20",
"v2.7.21",
"v2.7.22",
"v2.7.23",
"v2.7.24",
"v2.7.25",
"v2.7.26",
"v2.7.27",
"v2.7.28",
"v2.7.29",
"v2.7.3",
"v2.7.30",
"v2.7.31",
"v2.7.32",
"v2.7.33",
"v2.7.34",
"v2.7.35",
"v2.7.36",
"v2.7.37",
"v2.7.4",
"v2.7.5",
"v2.7.6",
"v2.7.7",
"v2.7.8",
"v2.7.9"
]
}From 2.8.0 before 2.8.31
Fixed in 2.8.31
31 explicitly affected versions
v2.8.0, v2.8.1, v2.8.10, v2.8.11, v2.8.12, v2.8.13, v2.8.14, v2.8.15, v2.8.16, v2.8.17, v2.8.18, v2.8.19, v2.8.2, v2.8.20, v2.8.21, v2.8.22, v2.8.23, v2.8.24, v2.8.25, v2.8.26, v2.8.27, v2.8.28, v2.8.29, v2.8.3, v2.8.30, v2.8.4, v2.8.5, v2.8.6, v2.8.7, v2.8.8, v2.8.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "2.8.0"
},
{
"fixed": "2.8.31"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v2.8.0",
"v2.8.1",
"v2.8.10",
"v2.8.11",
"v2.8.12",
"v2.8.13",
"v2.8.14",
"v2.8.15",
"v2.8.16",
"v2.8.17",
"v2.8.18",
"v2.8.19",
"v2.8.2",
"v2.8.20",
"v2.8.21",
"v2.8.22",
"v2.8.23",
"v2.8.24",
"v2.8.25",
"v2.8.26",
"v2.8.27",
"v2.8.28",
"v2.8.29",
"v2.8.3",
"v2.8.30",
"v2.8.4",
"v2.8.5",
"v2.8.6",
"v2.8.7",
"v2.8.8",
"v2.8.9"
]
}From 3.0.0 before 3.2.14
Fixed in 3.2.14
40 explicitly affected versions
v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7, v3.0.8, v3.0.9, v3.1.0, v3.1.0-BETA1, v3.1.0-RC1, v3.1.1, v3.1.10, v3.1.2, v3.1.3, v3.1.4, v3.1.5, v3.1.6, v3.1.7, v3.1.8, v3.1.9, v3.2.0, v3.2.0-BETA1, v3.2.0-RC1, v3.2.0-RC2, v3.2.1, v3.2.10, v3.2.11, v3.2.12, v3.2.13, v3.2.2, v3.2.3, v3.2.4, v3.2.5, v3.2.6, v3.2.7, v3.2.8, v3.2.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "3.0.0"
},
{
"fixed": "3.2.14"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v3.0.0",
"v3.0.1",
"v3.0.2",
"v3.0.3",
"v3.0.4",
"v3.0.5",
"v3.0.6",
"v3.0.7",
"v3.0.8",
"v3.0.9",
"v3.1.0",
"v3.1.0-BETA1",
"v3.1.0-RC1",
"v3.1.1",
"v3.1.10",
"v3.1.2",
"v3.1.3",
"v3.1.4",
"v3.1.5",
"v3.1.6",
"v3.1.7",
"v3.1.8",
"v3.1.9",
"v3.2.0",
"v3.2.0-BETA1",
"v3.2.0-RC1",
"v3.2.0-RC2",
"v3.2.1",
"v3.2.10",
"v3.2.11",
"v3.2.12",
"v3.2.13",
"v3.2.2",
"v3.2.3",
"v3.2.4",
"v3.2.5",
"v3.2.6",
"v3.2.7",
"v3.2.8",
"v3.2.9"
]
}From 3.3.0 before 3.3.13
Fixed in 3.3.13
13 explicitly affected versions
v3.3.0, v3.3.1, v3.3.10, v3.3.11, v3.3.12, v3.3.2, v3.3.3, v3.3.4, v3.3.5, v3.3.6, v3.3.7, v3.3.8, v3.3.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "3.3.0"
},
{
"fixed": "3.3.13"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v3.3.0",
"v3.3.1",
"v3.3.10",
"v3.3.11",
"v3.3.12",
"v3.3.2",
"v3.3.3",
"v3.3.4",
"v3.3.5",
"v3.3.6",
"v3.3.7",
"v3.3.8",
"v3.3.9"
]
}From 2.7.0 before 2.7.38
Fixed in 2.7.38
38 explicitly affected versions
v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.15, v2.7.16, v2.7.17, v2.7.18, v2.7.19, v2.7.2, v2.7.20, v2.7.21, v2.7.22, v2.7.23, v2.7.24, v2.7.25, v2.7.26, v2.7.27, v2.7.28, v2.7.29, v2.7.3, v2.7.30, v2.7.31, v2.7.32, v2.7.33, v2.7.34, v2.7.35, v2.7.36, v2.7.37, v2.7.4, v2.7.5, v2.7.6, v2.7.7, v2.7.8, v2.7.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "2.7.0"
},
{
"fixed": "2.7.38"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v2.7.0",
"v2.7.1",
"v2.7.10",
"v2.7.11",
"v2.7.12",
"v2.7.13",
"v2.7.14",
"v2.7.15",
"v2.7.16",
"v2.7.17",
"v2.7.18",
"v2.7.19",
"v2.7.2",
"v2.7.20",
"v2.7.21",
"v2.7.22",
"v2.7.23",
"v2.7.24",
"v2.7.25",
"v2.7.26",
"v2.7.27",
"v2.7.28",
"v2.7.29",
"v2.7.3",
"v2.7.30",
"v2.7.31",
"v2.7.32",
"v2.7.33",
"v2.7.34",
"v2.7.35",
"v2.7.36",
"v2.7.37",
"v2.7.4",
"v2.7.5",
"v2.7.6",
"v2.7.7",
"v2.7.8",
"v2.7.9"
]
}From 2.8.0 before 2.8.31
Fixed in 2.8.31
31 explicitly affected versions
v2.8.0, v2.8.1, v2.8.10, v2.8.11, v2.8.12, v2.8.13, v2.8.14, v2.8.15, v2.8.16, v2.8.17, v2.8.18, v2.8.19, v2.8.2, v2.8.20, v2.8.21, v2.8.22, v2.8.23, v2.8.24, v2.8.25, v2.8.26, v2.8.27, v2.8.28, v2.8.29, v2.8.3, v2.8.30, v2.8.4, v2.8.5, v2.8.6, v2.8.7, v2.8.8, v2.8.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "2.8.0"
},
{
"fixed": "2.8.31"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v2.8.0",
"v2.8.1",
"v2.8.10",
"v2.8.11",
"v2.8.12",
"v2.8.13",
"v2.8.14",
"v2.8.15",
"v2.8.16",
"v2.8.17",
"v2.8.18",
"v2.8.19",
"v2.8.2",
"v2.8.20",
"v2.8.21",
"v2.8.22",
"v2.8.23",
"v2.8.24",
"v2.8.25",
"v2.8.26",
"v2.8.27",
"v2.8.28",
"v2.8.29",
"v2.8.3",
"v2.8.30",
"v2.8.4",
"v2.8.5",
"v2.8.6",
"v2.8.7",
"v2.8.8",
"v2.8.9"
]
}From 3.0.0 before 3.2.14
Fixed in 3.2.14
40 explicitly affected versions
v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7, v3.0.8, v3.0.9, v3.1.0, v3.1.0-BETA1, v3.1.0-RC1, v3.1.1, v3.1.10, v3.1.2, v3.1.3, v3.1.4, v3.1.5, v3.1.6, v3.1.7, v3.1.8, v3.1.9, v3.2.0, v3.2.0-BETA1, v3.2.0-RC1, v3.2.0-RC2, v3.2.1, v3.2.10, v3.2.11, v3.2.12, v3.2.13, v3.2.2, v3.2.3, v3.2.4, v3.2.5, v3.2.6, v3.2.7, v3.2.8, v3.2.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "3.0.0"
},
{
"fixed": "3.2.14"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v3.0.0",
"v3.0.1",
"v3.0.2",
"v3.0.3",
"v3.0.4",
"v3.0.5",
"v3.0.6",
"v3.0.7",
"v3.0.8",
"v3.0.9",
"v3.1.0",
"v3.1.0-BETA1",
"v3.1.0-RC1",
"v3.1.1",
"v3.1.10",
"v3.1.2",
"v3.1.3",
"v3.1.4",
"v3.1.5",
"v3.1.6",
"v3.1.7",
"v3.1.8",
"v3.1.9",
"v3.2.0",
"v3.2.0-BETA1",
"v3.2.0-RC1",
"v3.2.0-RC2",
"v3.2.1",
"v3.2.10",
"v3.2.11",
"v3.2.12",
"v3.2.13",
"v3.2.2",
"v3.2.3",
"v3.2.4",
"v3.2.5",
"v3.2.6",
"v3.2.7",
"v3.2.8",
"v3.2.9"
]
}From 3.3.0 before 3.3.13
Fixed in 3.3.13
13 explicitly affected versions
v3.3.0, v3.3.1, v3.3.10, v3.3.11, v3.3.12, v3.3.2, v3.3.3, v3.3.4, v3.3.5, v3.3.6, v3.3.7, v3.3.8, v3.3.9
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "3.3.0"
},
{
"fixed": "3.3.13"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"v3.3.0",
"v3.3.1",
"v3.3.10",
"v3.3.11",
"v3.3.12",
"v3.3.2",
"v3.3.3",
"v3.3.4",
"v3.3.5",
"v3.3.6",
"v3.3.7",
"v3.3.8",
"v3.3.9"
]
}References
- https://nvd.nist.gov/vuln/detail/CVE-2017-16790
- https://github.com/symfony/symfony/pull/24993
- https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/form/CVE-2017-16790.yaml
- https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/symfony/CVE-2017-16790.yaml
- https://github.com/symfony/form
- https://symfony.com/blog/cve-2017-16790-ensure-that-submitted-data-are-uploaded-files
- https://symfony.com/cve-2017-16790
- https://www.debian.org/security/2018/dsa-4262