---
# System prepended metadata

title: Модуль №10
tags: [MOE]

---

# Небезопасная конфигурация

Приложение уязвимо если:

- среда, где развернуто приложения работает с настройками из "коробки"
- включены неиспользуемые функции в работе приложения
- в приложении используются учетные записи по-умолчанию со стандартными паролями
- отчеты об ошибках показывают информацию о версии и используемом софте
- отключены функции защиты после проведения обновления систем
- фреймворки и системы веб серверов не настроены в соответствии с безопасными рекомендациями
- не производится ревью заголовков безопасности на используемые значения
- фрагменты приложения не обновляются и содержат известные уязвимости

## Последствия эксплуатации

От получения доступа к конфигурационным файлам приложения до полной компрометации сервера. 

Приложение само по себе может быть написано без единой ошибки, но за счет отсутствующих настроек и выполнения пунктов предыдущего раздела, может быть уязвимо.

## Основные проблемы администрирования и разработки, приводящие к уязвимостям

- оставленные включенными интерфейсы отладки
- допущены ошибки в конфигурации веб-сервера
- допущены ошибки в конфигурации заголовков из фреймворка (либо используются значения по-умолчанию)

## Заголовки безопасности:
### X-Frame-Options

Заголовок отправляется от сервера и используется для того чтобы браузер рендерил, либо нет, данные в тегах 
**\<frame\>, \<iframe\>, \<embed\>** или **\<object\>**.Основная задача заголовка не дать реальзиоваться click-jacking атакам. Основной принцип таких атак это добавление контента другого ресурса на страницу пользователя.

Конечно же работать этот заголовок будет, если у пользователя браузер поддерживает его.

Проверить поддерживается ли заголовок можно, например [тут](https://caniuse.com/?search=x-frame-options).

Возможные значения:

- **deny** - все контроллируемые теги не будут рендериться браузером
- **sameorigin** - будут рендериться только те теги, которые попали на страницу с того же origin



::: warning 
X-Frame-Options внутри \<meta\> элемента не будут использоваться для работы современного браузера, нужно передавать их только в виде заголовка.
:::

### Strict-Transport-Security

Заголовок используется для того чтобы настроить безопасное шифрованное соединение, которое будет сложно подвергунть атаке MiTM и down grade атаке.

У заголовка могут быть следующие значения:

- **max-age=\<expire-time\>** - время в секундах, обычно указывают порядка 3х лет
- **includeSubDomains** - дополнительный параметр, применяет правила ко всем поддоменам
- **preload** - когда используется max-age директива должна быть установлена значением минимум 1 год, так же должна быть директива includeSubDomains. Данная фича поддерживается google и не является частью спецификации.

Проверить preload можно [тут](https://hstspreload.org/?domain=ya.ru).

### X-Content-Type-Options

Заголовок, который так же проставляет сервер для браузера. Создан для того чтобы сообщить браузеру, что передаваемые данные будут в типе **MIME**, который прописан в заголовке **Content-Type**.

Используется для того чтобы нельзя было подменить тип данных, которые передаются. Потому что в противном случае браузер начнет выполнять команды, которые находятся в данных.

Впервые был внедрен в IE.

### Referrer-Policy

Заголовок регулирует сколько информации о refer нужно добавить в запрос.

Значения директивы:

**no-referrer** - не включать никакой информации

**no-referrer-when-downgrade** - отправить **origin**, путь отправлять при условии, что меняется протокол по правилам - **(HTTP→HTTP, HTTP→HTTPS, HTTPS→HTTPS)**. 

Не отправлять заголовок, если протокол меняется по правилам - **(HTTPS→HTTP, HTTPS→file).**



**origin** - отправлять только origin


**origin-when-cross-origin**
When performing a same-origin request to the same protocol level (HTTP→HTTP, HTTPS→HTTPS), send the origin, path, and query string. Send only the origin for cross origin requests and requests to less secure destinations (HTTPS→HTTP).

**same-origin**
Send the origin, path, and query string for same-origin requests. Don't send the Referer header for cross-origin requests.

**strict-origin**
Отправлять отлько origin если протокол сохраняется - (HTTPS→HTTPS). Не отправлять заголовок Referer если будет работать правило -  (HTTPS→HTTP).

**strict-origin-when-cross-origin (default)**
Отправлять origin, путь, и строку запроса при взаимодействии с тем же origin. Для кросс origin взаимодействия отправлять данные только если работа происходит по правилам - (HTTPS→HTTPS). Не отправлять заголовок если понижают безопасность канала Referer (HTTPS→HTTP).


## Примеры уязвимостей

В большинстве случаев уязвимости данного типа не встречаются по причине только отсутствия заголовка при использовании приложения.

Могут быть ситуации, когда в приложении есть релевантная для заголовка уязвимость, и он не включен.

Самый распространенный пример - XSS. Об особенностях работы бразуеров и том как можно использовать параметры заголовков чтобы управлять поведением браузера, можно прочитать [тут](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)

## Способы защиты

- постоянно проводить аудит параметров, которые используются для конфигурации заголовков