Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
regexploit — Находит регулярные выражения, уязвимые для ReDoS (атака отказа в обслуживании через регулярные выражения). | Kitploit
Инструменты/GitHubGitHub/doyensec/regexploit
Статический анализ кода (SAST)Анализ уязвимостейФаззинг
GitHubdoyensec/regexploit

regexploit

Находит регулярные выражения, уязвимые для ReDoS (атака отказа в обслуживании через регулярные выражения).

Репозиторий
848592 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Regexploit

regexploit_logo

Находит регулярные выражения, уязвимые для отказа в обслуживании через регулярные выражения (ReDoS).

Подробнее в блоге Doyensec

Многие стандартные парсеры регулярных выражений имеют неограниченную сложность в худшем случае. Сопоставление regex может быть быстрым при работе с подходящей входной строкой. Однако некоторые несовпадающие строки могут заставить движок регулярных выражений уйти в бесконечный бэктрекинг и занимать много времени на обработку. Это может привести к отказу в обслуживании, так как процессор будет заблокирован попытками сопоставить regex.

Этот инструмент предназначен для:

  • поиска регулярных выражений, уязвимых для ReDoS;
  • создания примера вредоносной строки, вызывающей катастрофический бэктрекинг.

Сложность в худшем случае

Здесь отражается сложность процедуры бэктрекинга в движке регулярных выражений относительно длины введённой строки.

Кубическая сложность означает, что при удвоении длины уязвимой части строки время выполнения увеличится примерно в 8 раз (2^3). Для экспоненциального ReDoS со звёздами внутри звёзд (например, (a*)*$) используется поправочный коэффициент, и сложность будет больше 10.

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

Пример

Запустите regexploit и введите регулярное выражение v\w*_\w*_\w*$ в командной строке.

root@kitploit:~
$ regexploit
v\w*_\w*_\w*$
Pattern: v\w*_\w*_\w*$
---
Worst-case complexity: 3 ⭐⭐⭐ (cubic)
Repeated character: [5f:_]
Final character to cause backtracking: [^WORD]
Example: 'v' + '_' * 3456 + '!'

Часть \w*_\w*_\w* содержит три перекрывающихся повторяющихся группы (\w соответствует буквам, цифрам и подчёркиваниям). Как показано в строке Repeated character: [5f:_], длинная строка из _ (0x5f) будет соответствовать этому разделу множеством разных способов. Сложность в худшем случае равна 3, так как есть 3 бесконечно повторяющиеся группы. Приведён пример для вызова ReDoS: он состоит из обязательного префикса v, длинной строки _ и затем ! (не-словесного символа), вызывающего бэктрекинг. Не для всех ReDoS требуется специальный символ в конце, но в данном случае длинная строка _ успешно сопоставится и не вызовет бэктрекинг. Строка Final character to cause backtracking: [^WORD] показывает, что в конце требуется несовпадающий символ (не буквенно-цифровой), чтобы предотвратить совпадение и вызвать ReDoS.

В качестве другого примера установите модуль, уязвимый для ReDoS, например pip install ua-parser==0.9.0. Чтобы просканировать установленные Python-модули, выполните regexploit-python-env.

root@kitploit:~
Importing ua_parser.user_agent_parser
Vulnerable regex in /somewhere/.env/lib/python3.9/site-packages/ua_parser/user_agent_parser.py #183
Pattern: \bSmartWatch *\( *([^;]+) *; *([^;]+) *;
Context: self.user_agent_re = re.compile(self.pattern)
---
Worst-case complexity: 3 ⭐⭐⭐
Repeated character: [20]
Example: 'SmartWatch(' + ' ' * 3456

Worst-case complexity: 3 ⭐⭐⭐
Repeated character: [20]
Example: 'SmartWatch(0;' + ' ' * 3456

Vulnerable regex in /somewhere/.env/lib/python3.9/site-packages/ua_parser/user_agent_parser.py #183
Pattern: ; *([^;/]+) Build[/ ]Huawei(MT1-U06|[A-Z]+\d+[^\);]+)[^\);]*\)
Context: self.user_agent_re = re.compile(self.pattern)
---
Worst-case complexity: 3 ⭐⭐⭐
Repeated character: [[0-9]]
Example: ';0 Build/HuaweiA' + '0' * 3456
...

Для каждого уязвимого регулярного выражения выводится одна или несколько вредоносных строк для запуска ReDoS. Установка User-Agent в ;0 Build/HuaweiA000000000000000... и просмотр сайта, использующего старую версию ua-parser, может заставить сервер долго обрабатывать ваш запрос, скорее всего, завершившись статусом 502.

Установка

Требуется Python 3.8+. Для извлечения regex из JavaScript/TypeScript также требуется NodeJS 12+.

Опционально создайте виртуальное окружение

root@kitploit:~
python3 -m venv .env
source .env/bin/activate

Теперь установите через pip

root@kitploit:~
pip install regexploit

Использование

Regexploit со списком regex

Вводите регулярные выражения через stdin (по одному на строку) в regexploit.

root@kitploit:~
regexploit

или через файл

root@kitploit:~
cat myregexes.txt | regexploit

Автоматическое извлечение regex

Встроена поддержка разбора regex из Python, JavaScript, TypeScript, C#, YAML и JSON.

Код на Python

Разбирает код Python (без выполнения) через AST, чтобы найти regex. Затем regex анализируются на ReDoS.

root@kitploit:~
regexploit-py my-project/
regexploit-py "my-project/**/*.py" --glob

Javascript / Typescript

Будет использован встроенный NodeJS-пакет в regexploit/bin/javascript, который разбирает ваш JavaScript как AST с помощью eslint и выводит все regex.

Эти regex передаются в Python-инструмент для поиска ReDoS.

root@kitploit:~
regexploit-js my-module/my-file.js another/file.js some/folder/
regexploit-js "my-project/node_modules/**/*.js" --glob

Обратите внимание: существуют различия в разборе regex между javascript и python, поэтому возможны ошибки. Я не уверен, что хочу писать AST для JS regex!

Python imports

Поиск regex во всех установленных в вашем окружении Python-модулях. Это означает, что вы можете pip install любые интересующие вас модули, и они будут проанализированы. Включается и код CPython.

root@kitploit:~
regexploit-python-env

Обратите внимание: это не разбирает код Python в AST, а находит только regex, скомпилированные автоматически при импорте модуля. Модули фактически импортируются, поэтому код в модулях будет выполнен. Это полезно для поиска regex, которые собираются из более мелких строк при загрузке, например CVE-2021-25292 в Pillow

JSON / YAML

Поддержка YAML требует pyyaml, который можно установить командой pip install regexploit[yaml].

root@kitploit:~
regexploit-json *.json
regexploit-yaml *.yaml

C# (.NET)

root@kitploit:~
regexploit-csharp something.cs

🏆 Сообщённые ошибки 🏆

  • CVE-2020-5243: uap-core затрагивает uap-python, uap-ruby и др. (разбор заголовка User-Agent)
  • CVE-2020-8492: cpython's urllib.request (разбор заголовка WWW-Authenticate)
  • CVE-2021-21236: CairoSVG (разбор SVG)
  • CVE-2021-21240: httplib2 (разбор заголовка WWW-Authenticate)
  • CVE-2021-25292: python-pillow (разбор PDF)
  • CVE-2021-26813: python-markdown2 (разбор Markdown)
  • CVE-2021-27290: npm/ssri (разбор SRI)
  • CVE-2021-27291: pygments лексеры для ADL, CADL, Ceylon, Evoque, Factor, Logos, Matlab, Octave, ODIN, Scilab и Varnish VCL (подсветка синтаксиса)
  • CVE-2021-27292: ua-parser-js (разбор заголовка User-Agent)
  • CVE-2021-27293: RestSharp (десериализация JSON в пакете .NET C#)
  • bpo-38804: cpython's http.cookiejar (разбор заголовка Set-Cookie)
  • SimpleCrawler (архивирован) (разбор HTML)
  • CVE-2021-28092: is-svg (разбор SVG)
  • nuget.org, NuGetGallery и NuGet.Client (разбор идентификаторов пакетов NuGet)

Благодарности

Этот инструмент создан Беном Коллером (Ben Caller) из Doyensec LLC в рамках исследовательского времени.

alt text

Скачать инструмент
  • markdown (python) (разбор Markdown)
  • ansi-html (nodejs) (разбор ANSI)
  • Плюс неопубликованные ошибки в нескольких пакетах pypi, npm, ruby и nuget