poniedziałek, 22 kwietnia 2013

Hack VoIP #5 - vBilling dla FreeSWITCH

W tym wpisie znowu poruszę tematykę bezpieczeństwa systemów VoIP, a raczej ich front-end’ów. Tym razem odeszłem troszeczkę od rozwiązań przeznaczonych do współpracy z programową centralą telefoniczną Asterisk, a zająłem się rozwiązaniami open source dla FreeSWITCH. W sumie to aktualnie jednym takim rozwiązaniem jakim jest vBilling.



Wcześniej opisałem problemy z bezpieczeństwem w rozwiązaniach dedykowanych do współpracy z Asterisk takimi jak PIAF H.M.S, EasyITSP by Lemens Telephone Systems 2.0.2CitrusDB 2.4.1 oraz raz jeszcze w poście Niebezpieczny system telekomunikacyjny - EasyITSP

vBilling to pierwsza open source’owa platforma billingująca dla FreeSWITCH dzięki, której można zacząć świadczyć sprzedaż usług VoIP Jak piszą twórcy na stronie internetowej vBilling pozwala na sprzedaż detaliczną oraz hurtową ruchu i rozwiązań technologii VoIP takich jak IP PBX, systemy IVR czy Call Center.
Panel logowania do systemu VoIP
Panel logowania do platformy VoIP - vBilling

Sam vBilling prezentuje się dosyć fajnie. Problem leży w tym, że znowu programiści systemu nie pomyśleli o bezpieczeństwie. W systemach wykorzystywanych w telekomunikacji powinno być to według mnie priorytetem. Ponieważ powinno się chronić dane użytkowników jak również nie powinno się pozwalać na manipulację danymi.

Tym razem nie udało mi się dostać do systemu bez uwierzytelnienia – zostało bruteforce lub atak słownikowy – vBilling nie ma przed tym ochrony. Aczkolwiek gdy się już zalogowałem znalazłem masę błędów. W tym poście opiszę tylko dwa przypadki.


Pierwszy z nich jest dosyć ciekawy ponieważ pozwala na zresetowanie hasła dowolnego konta SIP w raz z poznaniem nowego hasła. Można to uzyskać poprzez zmianę tylko jednego parametru - record_id – w źródle strony lub podczas przesyłania zmiennej. Problem leży w pliku controllers/customer.php a dokładniej w zapytaniu SQL, które wygląda tak:

$sql2 = "UPDATE directory_params SET param_value = '".$new_password."' WHERE directory_id = '".$record_id."' ";

Zmienna record_id nie jest nigdzie filtrowana – co może prowadzić do ataku SQL Injection, ani również system nie sprawdza czy zmienna record_id jest przypisana do danego klienta – customer_id.
platforma VoIP
Zmiana danych w platformie VoIP - vBilling

Drugi problem to znowu SQL Injection ale podczas edycji swoich danych osobowych w systemie vBilling (http://voiphack/customer/edit_customer). Wystarczy, że w pole Firstname wpiszemy dla przykładu zenek’;-- lub coś na czym bardziej nam zależy :).

Oprogramowanie VoIP - vBilling ma dużo tego typu błędów, a opisałem powyżej tylko 2 dotyczące najniższego – najmniej uprzywilejowanego –  poziomu zarządzania w vBilling. Ponieważ aby wykorzystać wyżej wymienione podatności wystarczy być tylko i wyłącznie klientem ( Normal customer), a w systemie możemy jeszcze zdefiniować poziomy zarządzania dla reseller’ów – ( Reseller Level 3 i Reseller Level 2).

Wpis ten ma charakter tylko edukacyjny i przestrzegam przed wykorzystaniem wyżej wymienionych podatności ponieważ jest to nie zgodne z prawem. Moim celem jest tylko pokazanie jak mało bezpieczne są stosowane rozwiązania front-end’owe wykorzystywane w technologii VoIP. Mam nadzieję, że dzięki temu coś się zmieni w tej kwestii.

Jako, że nie ma jeszcze oficjalnej poprawki do systemu vBiliing, to radził bym wyłączyć możliwość logowania każdemu klientowi oraz resellerowi.

Wykryte przeze mnie podatności zostały zgłoszone producentowi oprogramowania vBilling, firmie Digital Linx.