> For the complete documentation index, see [llms.txt](https://appsecurity.gitbook.io/devops/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://appsecurity.gitbook.io/devops/ppc/ppc-langs/backend/python/packages/web-frameworks/django/security.md).

# Security

## Debug mode

Source: <https://t.me/webpwn/337>

Приложения на Django в debug режиме раскрывают содержимое environment переменных при необработанном исключении.

Несмотря на наличие автоматического сокрытия значений, для переменных соответствующих регулярному выражению `API|TOKEN|KEY|SECRET|PASS|SIGNATURE`, часто это приводит к утечкам через нестандартные имена переменных.

Если обнаружить debug режим можно просто обратившись к несуществующей странице, то вызвать exception иногда бывает проблематично. Даже с раскрытием существующих в приложении путей через 404-ую страницу.

Но существуют и более универсальные подходы.

**Пример 1**

Нестандартные символы в Host. Правда с учетом облачных сервисов этот вариант срабатывает редко.

```
GET / HTTP/1.1
Host: '"

Invalid HTTP_HOST header: '\'"'. The domain name provided is not valid according to RFC 1034/1035.
```

**Пример 2**

Использование большего количества переменных в POST, чем указано в настройке DATA\_UPLOAD\_MAX\_NUMBER\_FIELDS (по умолчанию 1000).

Для эксплуатации необходимо найти любой роут, поддерживающий POST запросы, и в редких случаях получить валидное значение CSRF токена на странице.

```
POST / HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Cookie: csrftoken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
Content-Length: 3093
 
csrfmiddlewaretoken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&x=&x=&x=&x=[..1000 раз..]&x=&x=&x=
```

## CVEs

### CVE-2022-34265

PoC & Description: <https://github.com/aeyesec/CVE-2022-34265>
