2017-10-10 11:59:18 +00:00
|
|
|
|
# [alias_traversal] Path traversal при использовании alias
|
|
|
|
|
|
|
|
|
|
Директива [alias](https://nginx.ru/ru/docs/http/ngx_http_core_module.html#alias) используется для замены пути указанного локейшена.
|
|
|
|
|
К примеру, для конфигурации:
|
|
|
|
|
```nginx
|
|
|
|
|
location /i/ {
|
|
|
|
|
alias /data/w3/images/;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
на запрос `/i/top.gif` будет отдан файл `/data/w3/images/top.gif`.
|
|
|
|
|
|
|
|
|
|
Однако, если локейшен не оканчивается разделителем директорий (`/`):
|
|
|
|
|
```nginx
|
|
|
|
|
location /i {
|
|
|
|
|
alias /data/w3/images/;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
то на запрос `/i../app/config.py` будет отдан файл `/data/w3/app/config.py`.
|
|
|
|
|
|
|
|
|
|
Иными словами, не корректная конфигурация `alias` может позволить злоумышленнику прочесть файл за пределами целевой директории.
|
|
|
|
|
|
|
|
|
|
## Что делать?
|
|
|
|
|
Все довольно просто:
|
|
|
|
|
- необходимо найти все директивы `alias`;
|
|
|
|
|
- убедится что вышестоящий префиксный локейшен оканчивается на `/`.
|