--- title: Web App Pentest - 0x08 Broken Access Control / SSTI / Race Condition tags: CSR - Web App Pentest slideOptions: transition: 'fade' parallaxBackgroundImage: 'https://i.imgur.com/YClZ1aY.jpg' --- <style> .reveal { font-size: 36px; } </style> # Web App Pentest ## Broken Access Control ## SSTI ## Race Condition --- Вопросы по заданиям? --- ## OWASP A01:2021-Broken Access Control Действия, разрешенные аутентифицированным пользователям, зачастую некорректно контролируются. Злоумышленники могут воспользоваться этими недостатками и получить несанкционированный доступ к учетным записям других пользователей или конфиденциальной информации, а также изменить пользовательские данные или права доступа. --- ## Определения Идентификация — процесс определения, что за человек перед нами. Аутентификация — процесс подтверждения, что этот человек именно тот, за кого себя выдает. Авторизация — процесс принятия решения о том, что именно этой аутентифицированной персоне разрешается делать. --- ## Разграничение доступа в веб-приложениях Можно выделить два уровня разграничения доступа: * на функциональном уровне (обычно используется ролевая модель разграничения); * на уровне объектов (обычно используется избирательная модель доступа); --- ## Разграничение доступа на функциональном уровне system-admin: * /admin/create-user * /admin/delete-user manager: * /manager/create-company * /manager/assign-user-to-company user: * /user/create-comment * /user/send-message-to-manager --- ## Разграничение доступа на уровне объектов Пример - система ДБО. У пользователя есть несколько карт. Для оплаты счета пользователь вызывает метод `/makePayment`, передавая ему одним из параметров `card_id` Веб-приложение должно проверять что этот конкретный пользователь может пользоваться этой конкретной картой. --- ## Broken Access Control Собирательная уязвимость, основными двумя частями которой являются: * Missing Functional Level Access Control (MFLAC) * Insecure Direct Object Reference (IDOR) --- ## IDOR Базовый пример: http://example.com/profile?userId=543 А почему бы не попробовать http://example.com/profile?userId=544 ? --- ## Примеры bWAPP * IDOR: Change Secret * IDOR: Order Tickets --- ## MFLAC system-admin: * /admin/create-user * /admin/delete-user manager: * /manager/create-company * /manager/assign-user-to-company user: * /user/create-comment * /user/send-message-to-manager --- ## MFLAC А доступны ли пользователю с определенной ролью функции, которые ему не должны быть доступны. --- ## Тестирование на BAC Плагин для Firefox `Multi-Account Containers` Позволяет иметь рядом в браузере вкладки, аутентифицированные под разными пользователями. <Демонстрация> --- ## Задание Спецификация для приложения https://hackmd.io/Z6V2jfp8T0Kf_zUAh6iUbg --- ## Поиск входных точек Если кода нет, у нас ограниченная учетка, но мы предполагаем что MFLAC может иметь место, то нам нужно найти корректные имена URL или параметров. * Можно анализировать javascript * Словари для подбора: https://github.com/assetnote/kiterunner https://github.com/chrislockard/api_wordlist https://github.com/sorokinpf/ApiWordlistGenerator --- ## Реализация и рекомендации Разграничение доступа на функциональном уровне можно сделать с помощью фреймворков. Для реализации разграничения доступа на уровне объектов необходимо делать проверку в каждой функции. <Демонстрация кода> --- ## Рекомендации * Реализовать контроль доступа единообразно во всем веб-приложении * Использовать непредсказуемые идентификаторы объектов * Для защиты от IDOR рекомендуется писать тесты пытающиеся получить доступ к чужим данным. --- ## SSTI --- ## Шалблоны HTML-страниц Шаблоны используются разработчиками для создания HTML-страниц. Разработчики единожды делают шаблон, потом в определенные его места подставляются необходимые данные и шаблон передается пользователю. --- ## Шаблоны HTML-страниц Существует значительное количество различных шаблонизаторов для разных языков/фреймворков. --- ## Шаблоны HTML-страниц Шаблоны реализуют свой собственный язык. Язык шаблонов может позволять выполнять не только вывод информации, но и её обработку, фильтрацию, итерирование по спискам и т.д. В некоторых языках шаблонов существует возможность выполнения опасных операций. --- ## Шаблоны HTML-страниц Примеры: * jinja2 (BAC) * TWIG (https://github.com/marvin/php-twig-example/blob/master/index.php) * Razor (https://docs.microsoft.com/ru-ru/aspnet/core/razor-pages/?view=aspnetcore-3.0&tabs=visual-studio#the-home-page) --- ## SSTI --- ## Server Side Template Injection Уязвимость, при эксплуатации которой данные атакующего внедряются в шаблон перед его рендером, что приводит к возможности использования любых функций шаблонизатора. --- ## Server Side Template Injection Возможности атакующего зависят от шаблонизатора: * выполнение произвольного кода * чтение локальных файлов * доступ к переменным в доступной зоне видимости --- ## Server Side Template Injection Portswigger Academy: https://portswigger.net/web-security/server-side-template-injection --- ## Server Side Template Injection Готовые вектора в некоторых шаблонизаторах есть на PayloadAllTheThings https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection --- ## Server Side Template Injection tplmap - приложение для автоматизированной эксплуатации уязвимостей SSTI. https://github.com/epinna/tplmap --- ## Server Side Template Injection Если вектора нет в PayloadAllTheThings и нагуглить не удается, то надо браться за документацию. --- ## Server Side Template Injection Примеры: ``` docker run -p 8083:80 -d cth123123/twig_ssti ``` https://github.com/BlackFan/ctfs/tree/master/volgactf_2020_quals/newsletter Portswigger - 1 пример --- ## Упражнение Portswigger 2 и 4. --- ## Race condition --- ## Race condition ### Состояние гонки Проблема многопоточных приложений, при которой конечный результат зависит от того, в каком порядке потоки получат управление. --- ## Race condition Пример с переводом денег --- ![](https://i.imgur.com/whwxEYu.png =430x) --- ![](https://i.imgur.com/uTYyFxf.png =850x) --- ![](https://i.imgur.com/uMQ8CU9.png =850x) --- ![](https://i.imgur.com/ST5JMqc.png =850x) --- ![](https://i.imgur.com/CHCtWvC.png =850x) --- ![](https://i.imgur.com/SlMXzcK.png =850x) --- ![](https://i.imgur.com/KKdD4ye.png =850x) --- ![](https://i.imgur.com/cYkK5Ff.png =850x) --- ## Race condition Способ защиты - синхронизация. Один поток "захватывает" (acquire) объект синхронизации. Пока он не "отпущен" (release), другие потоки не могут обращаться к защищаемым ресурсам. --- ## Race condition Синхронизация может быть выполнена: - программно; - на уровне сессий; - на уровне БД; --- ## Race condition Синхронизация на уровне БД. Используются транзакции и конструкции `FOR SHARE`, `FOR UPDATE` и другие . --- ## Race condition Встречается также в других случаях, например, при проверке одноразовых паролей OTP. --- ## Race condition Для одновременной отправки запросов можно также использовать плагин Burp `Turbo Intruder`: https://portswigger.net/research/turbo-intruder-embracing-the-billion-request-attack Скрипт: https://github.com/PortSwigger/turbo-intruder/blob/master/resources/examples/race.py --- ## Race condition Пример реальной накрутки бонусов в Starbucks: https://habr.com/ru/post/258449/ --- ## Race condition Также возникают в случаях с файлами. Файл на ФС находится не долго и атакующему нужно успеть к нему обратится. Актуально для File Upload/LFI. --- ## Задания - Burp Academy: Horizontal Privilege Escalation https://portswigger.net/web-security/access-control - на CTFd (http://ttesting.ru:8080) - тест для самопроверки в LMS. ---