Concrete CMS is Vulnerable to Cross-Site Request Forgery
The advisory, in context
Concrete CMS 9.5.0 and below does not validate a CSRF token before processing requests to /dashboard/extend/install/download/<remoteId>. The download() method in concrete/controllers/single_page/dashboard/extend/install.php checks only the canInstallPackages() permission before fetching a remote marketplace package and writing it to the server's DIR_PACKAGES directory. Because the endpoint is a state-changing GET route with no token enforcement, an attacker who can cause an authenticated administrator to visit a crafted page can force an arbitrary marketplace package to be downloaded. In order to be vulnerable, the victim must be passing canInstallPackages() and the site must be connected to the Concrete marketplace. Concrete CMS thanks https://github.com/maru1009 for reporting this issue.
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.
Earlier releases before 9.5.1
Fixed in 9.5.1
89 explicitly affected versions
8.0, 8.0.1, 8.0.2, 8.0.3, 8.1.0, 8.2.0, 8.2.0RC2, 8.2.1, 8.3.0, 8.3.1, 8.3.2, 8.4.0, 8.4.0RC3, 8.4.0RC4, 8.4.1, 8.4.2, 8.4.3, 8.4.4, 8.4.5, 8.5.0, 8.5.0RC1, 8.5.0RC2, 8.5.1, 8.5.10, 8.5.11, 8.5.12, 8.5.13, 8.5.14, 8.5.15, 8.5.16, 8.5.17, 8.5.18, 8.5.19, 8.5.2, 8.5.20, 8.5.21, 8.5.3, 8.5.4, 8.5.5, 8.5.6, 8.5.6RC1, 8.5.7, 8.5.8, 8.5.9, 9.0.0, 9.0.0RC1, 9.0.0RC3, 9.0.0RC4, 9.0.1, 9.0.2, 9.1.0, 9.1.1, 9.1.2, 9.1.3, 9.2.0, 9.2.0RC2, 9.2.1, 9.2.2, 9.2.3, 9.2.4, 9.2.5, 9.2.6, 9.2.7, 9.2.8, 9.2.9, 9.3.0, 9.3.1, 9.3.2, 9.3.3, 9.3.4, 9.3.5, 9.3.6, 9.3.7, 9.3.8, 9.3.9, 9.4.0, 9.4.0RC1, 9.4.0RC2, 9.4.1, 9.4.2, 9.4.3, 9.4.4, 9.4.5, 9.4.6, 9.4.7, 9.4.8, 9.5.0, 9.5.0RC1, 9.5.0RC2
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "9.5.1"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"8.0",
"8.0.1",
"8.0.2",
"8.0.3",
"8.1.0",
"8.2.0",
"8.2.0RC2",
"8.2.1",
"8.3.0",
"8.3.1",
"8.3.2",
"8.4.0",
"8.4.0RC3",
"8.4.0RC4",
"8.4.1",
"8.4.2",
"8.4.3",
"8.4.4",
"8.4.5",
"8.5.0",
"8.5.0RC1",
"8.5.0RC2",
"8.5.1",
"8.5.10",
"8.5.11",
"8.5.12",
"8.5.13",
"8.5.14",
"8.5.15",
"8.5.16",
"8.5.17",
"8.5.18",
"8.5.19",
"8.5.2",
"8.5.20",
"8.5.21",
"8.5.3",
"8.5.4",
"8.5.5",
"8.5.6",
"8.5.6RC1",
"8.5.7",
"8.5.8",
"8.5.9",
"9.0.0",
"9.0.0RC1",
"9.0.0RC3",
"9.0.0RC4",
"9.0.1",
"9.0.2",
"9.1.0",
"9.1.1",
"9.1.2",
"9.1.3",
"9.2.0",
"9.2.0RC2",
"9.2.1",
"9.2.2",
"9.2.3",
"9.2.4",
"9.2.5",
"9.2.6",
"9.2.7",
"9.2.8",
"9.2.9",
"9.3.0",
"9.3.1",
"9.3.2",
"9.3.3",
"9.3.4",
"9.3.5",
"9.3.6",
"9.3.7",
"9.3.8",
"9.3.9",
"9.4.0",
"9.4.0RC1",
"9.4.0RC2",
"9.4.1",
"9.4.2",
"9.4.3",
"9.4.4",
"9.4.5",
"9.4.6",
"9.4.7",
"9.4.8",
"9.5.0",
"9.5.0RC1",
"9.5.0RC2"
]
}