SECURITY: XSS in unclosed internal links
authorBrian Wolff <bawolff+wn@gmail.com>
Wed, 8 Jun 2016 02:35:15 +0000 (22:35 -0400)
committerChad <chadh@wikimedia.org>
Tue, 23 Aug 2016 03:39:36 +0000 (03:39 +0000)
rawurldecode was being run on unclosed internal links
which could allow an attacker to insert arbitrary
html into the page.

See also related: r13302

Bug: T137264
Change-Id: I4e112a9e918df9fe78b62c311939239b483a21f5

includes/parser/Parser.php
tests/parser/parserTests.txt

index 4f579a9..38eb621 100644 (file)
@@ -2158,7 +2158,7 @@ class Parser {
                                $might_be_img = true;
                                $text = $m[2];
                                if ( strpos( $m[1], '%' ) !== false ) {
-                                       $m[1] = rawurldecode( $m[1] );
+                                       $m[1] = str_replace( [ '<', '>' ], [ '&lt;', '&gt;' ], rawurldecode( $m[1] ) );
                                }
                                $trail = "";
                        } else { # Invalid form; output directly
index d6d2b29..c7bbc62 100644 (file)
@@ -27140,3 +27140,12 @@ Thumbnail output
 </div>
 </div>
 !! end
+
+!! test
+unclosed internal link XSS (T137264)
+!! wikitext
+[[#%3Cscript%3Ealert(1)%3C/script%3E|
+!! html
+<p>[[#&lt;script&gt;alert(1)&lt;/script&gt;|
+</p>
+!! end