Регулярные выражения могут вызвать ReDoS¶
Gixy Check ID: regex_redos
Некоторые регэкспы вызывают катастрофический перебор. Злоумышленник может подобрать входные данные, из‑за которых движок регэкспов потребит много CPU и вызовет отказ в обслуживании.
Небезопасный пример¶
# Катастрофический перебор на длинных цепочках "a"
location ~ ^/(a|aa|aaa|aaaa)+$ {
return 200 "ok";
}
Путь вроде /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab способен надолго загрузить CPU.
Более безопасные альтернативы¶
- Ставьте якоря и упрощайте шаблоны; избегайте вложенных альтернатив и неоднозначных повторов
- Предпочитайте конструкции с линейной сложностью
- Ограничивайте длину входа до применения дорогостоящих регэкспов
# Безопаснее: заякорено и упрощено
location ~ ^/a+$ {
return 200 "ok";
}
Зачем это важно¶
Неудачные регэкспы в location и других директивах могут эксплуатироваться удалённо. Держите шаблоны простыми и заякоренными, избегайте конструкций, известных взрывом перебора.
Укрепляйте NGINX с поддерживаемыми RPM
Используйте NGINX Extras от GetPageSpeed для постоянно обновляемого NGINX и модулей на RHEL/CentOS/Alma/Rocky. Подробнее.