---
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
Пример с переводом денег
---

---

---

---

---

---

---

---

---
## 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.
---