Persistent XSS w Wordpress
Krytyczne błędy w popularnym oprogramowaniu! Czy Twój blog stanowi zagrożenie?
W ramach rutynowej analizy kodu źródłowego, znaleźliśmy 2 błędy persistent XSS w jednym z najpopularniejszych oprogramowaniań blogowych - <a href="www.wordpress.org">WordPress</a>.
Proof of Concept (IE7)
wpisanie w komentarz ciągu:
aaa@"STYLE="behavior:url('#default#time2')"onBegin="alert('XSS')"
Aktywacja XSS-a następuje po odczytaniu komentarza przez uzytkownika blogu.
Aktywacja ma również miejsce w administracji aplikacji, przez co atakujący
może otrzymać dostęp do konta administratora (ataki typu: przejęcie sesji administratora bez znajomości hasła, CSRF).
Drugi błąd jest podobny, PoC:
javascript://%0a%0dalert%281%29
aktywacja po kliknięciu w wygenerowany link.
Przypominam, że XSS-y persistent są wyjątkowo zjadliwe (do uruchomienia ataku nie jest jest wymagane podrzucenie linku ofierze, wystarczy że będzie ona najzwyczajniej w świecie nawigować po portalu).
Szczegóły
problem istnieje w pliku:
wp-includes/formatting.php, a dokładniej, w funkcji
make_clicable().
regexpy zamieniające wybrane kawałki tekstu na wersje klikalne są zbyt mało restrykcyjne. Dokładniej, chodzi o 6 i 8 linijkę poniżej.
1. function make_clickable($ret) {
2. $ret = ' ' . $ret;
3. // in testing, using arrays here was found to be faster
4. $ret = preg_replace(
5. array(
6. '#([\s>])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is',
7. '#([\s>])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is',
8. '#([\s>])([a-z0-9\-_.]+)@([^,< \n\r]+)#i'),
9. array(
10. '$1<a href="$2" rel="nofollow">$2</a>',
11. '$1<a href="http://$2" rel="nofollow">$2</a>',
12. '$1<a href="mailto:$2@$3">$2@$3</a>'),$ret);
13. // this one is not in an array because we need it to run last, for cleanup of accidental links within links
14. $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
15. $ret = trim($ret);
16. return $ret;
17.}
Podatne wersje wordpress-a
2.3.1, najprawdopodobniej również niższe.
Kroki zaradcze
Vendor został przez nas powiadomiony o problemie i wypuścił wersję 2.3.2 zawierającą m.in. patcha poprawiającego podatność.
Zalecamy więc upgrade do najnowszej wersji wordpress-a.
