Semantic MediaWiki has an open redirect in Special:URIResolver
The advisory, in context
Failure mode
Special:URIResolver resolves its user-controlled subpage to a MediaWiki title and issues an HTTP 303 redirect to $title->getFullURL() without validating the resolved target. A crafted subpage can make that target point off-host: an interwiki prefix redirects to the foreign wiki (for example Special:URIResolver/mw-3AFoo, which decodes to mw:Foo, redirects to https://www.mediawiki.org/wiki/Foo), and where the resolved URL carries an authority the target can even embed user:pass@host credentials. The result is an open redirect to an attacker-influenced host, usable for phishing from a trusted wiki URL.
Remediation
- The resolved target URL is parsed and compared against the current host at the redirect sink.
- The redirect is rejected (bad-title error page) when a user or pass component is present, or when the host does not match the current host.
Maintenance note
Redirect code must validate the final target URL, not just the input path. Host comparison belongs at the redirect sink: each sink (special page, entry point) must validate its own target rather than relying on upstream normalisation.
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 7.2.0
Fixed in 7.2.0
78 explicitly affected versions
1.9, 1.9-RC1, 1.9.0.1, 1.9.0.2, 1.9.1, 1.9.1.1, 1.9.2, 1.9beta1, 2.0, 2.0-RC1, 2.0-RC2, 2.0-RC3, 2.1.0, 2.1.0-RC1, 2.1.1, 2.1.2, 2.1.3, 2.2.0, 2.2.0-RC1, 2.2.1, 2.2.2, 2.2.3, 2.3.0, 2.3.0-RC1, 2.3.1, 2.4.0, 2.4.0-RC1, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.4.5, 2.4.6, 2.5.0, 2.5.0-rc.1, 2.5.1, 2.5.2, 2.5.3, 2.5.4, 2.5.5, 2.5.6, 2.5.7, 2.5.8, 3.0.0, 3.0.0-rc.1, 3.0.0-rc.2, 3.0.1, 3.0.2, 3.1.0, 3.1.0-rc.1, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.2.0, 3.2.0-rc.1, 3.2.0-rc.2, 3.2.1, 3.2.2, 3.2.3, 4.0.0, 4.0.1, 4.0.2, 4.1.0, 4.1.1, 4.1.2, 4.1.3, 4.2.0, 5.0.0, 5.0.1, 5.0.2, 5.1.0, 6.0.0, 6.0.1, 7.0.0, 7.1.0
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "7.2.0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"1.9",
"1.9-RC1",
"1.9.0.1",
"1.9.0.2",
"1.9.1",
"1.9.1.1",
"1.9.2",
"1.9beta1",
"2.0",
"2.0-RC1",
"2.0-RC2",
"2.0-RC3",
"2.1.0",
"2.1.0-RC1",
"2.1.1",
"2.1.2",
"2.1.3",
"2.2.0",
"2.2.0-RC1",
"2.2.1",
"2.2.2",
"2.2.3",
"2.3.0",
"2.3.0-RC1",
"2.3.1",
"2.4.0",
"2.4.0-RC1",
"2.4.1",
"2.4.2",
"2.4.3",
"2.4.4",
"2.4.5",
"2.4.6",
"2.5.0",
"2.5.0-rc.1",
"2.5.1",
"2.5.2",
"2.5.3",
"2.5.4",
"2.5.5",
"2.5.6",
"2.5.7",
"2.5.8",
"3.0.0",
"3.0.0-rc.1",
"3.0.0-rc.2",
"3.0.1",
"3.0.2",
"3.1.0",
"3.1.0-rc.1",
"3.1.1",
"3.1.2",
"3.1.3",
"3.1.4",
"3.1.5",
"3.1.6",
"3.2.0",
"3.2.0-rc.1",
"3.2.0-rc.2",
"3.2.1",
"3.2.2",
"3.2.3",
"4.0.0",
"4.0.1",
"4.0.2",
"4.1.0",
"4.1.1",
"4.1.2",
"4.1.3",
"4.2.0",
"5.0.0",
"5.0.1",
"5.0.2",
"5.1.0",
"6.0.0",
"6.0.1",
"7.0.0",
"7.1.0"
]
}