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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-42533-Config-Scanner — Статический сканер конфигураций, который помечает конфигурации nginx, уязвимые для ошибки complex_value two-pass capture-clobbering (regex map + regex capture → переполнение кучи / утечка информации). | Kitploit
Инструменты/GitHubGitHub/0xcyberstan/cve-2026-42533-config-scanner
Статический анализСканеры уязвимостейАнализ КодаАудит конфигурацииВеб-безопасностьDevSecOpsНеправильная Конфигурация
GitHub0xcyberstan/cve-2026-42533-config-scanner

CVE-2026-42533-Config-Scanner

Статический сканер конфигураций, который помечает конфигурации nginx, уязвимые для ошибки complex_value two-pass capture-clobbering (regex map + regex capture → переполнение кучи / утечка информации).

Репозиторий
295403 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

Сканер перезаписи захватов nginx

Статический сканер только для чтения, который выявляет конфигурации nginx, уязвимые к классу ошибок двухпроходной перезаписи захватов complex_value (рекомендация F5/nginx SIRT, июль 2026). Он разбирает вашу конфигурацию и сообщает об уязвимом шаблоне с указанием причины и местоположения. Он ничего не эксплуатирует и не затрагивает работающий сервер.

Один файл, только стандартная библиотека, Python 3.6+.

Полное описание уязвимости: https://cyberstan.co.uk/nginx-rce/

Ошибка

nginx строит многие значения директив в два прохода. Проход LEN измеряет длину и выделяет буфер, затем проход VALUE записывает в него. Захваты регулярных выражений ($1 до $9 или именованные (?P<name>...)) читаются из общего состояния, привязанного к запросу. map, ключ сопоставления которого является регулярным выражением, выполняет новое сопоставление PCRE в момент вычисления своей переменной, и это сопоставление перезаписывает общее состояние захватов. Если захват измеряется в проходе LEN, а затем регулярное выражение map выполняется до того, как проход VALUE перезапишет этот захват, два прохода расходятся:

  • перезапись делает значение длиннее измеренного: переполнение буфера в куче (запись за границы буфера, контролируемая атакующим)
  • перезапись делает значение короче измеренного: клиенту возвращается неинициализированная память кучи (утечка информации о указателях libc/кучи)

Оба направления могут быть инициированы удалённо, когда входные данные map подвержены влиянию атакующего ($request_body, $http_*, $arg_*, $uri, $ssl_preread_server_name и так далее).

Что считается уязвимым

Сканер помечает location или server, когда всё перечисленное попадает в один двухпроходный буфер в эксплуатируемом порядке:

  1. Источник захвата: регулярное выражение location ~, server_name ~, rewrite, if (... ~ ...) или регулярное выражение map с группой захвата.
  2. Триггер перезаписи: map (http или stream) с ключом сопоставления по регулярному выражению ~ или ~*, на который ссылаются через его выходную переменную.
  3. Двухпроходный сток, использующий одновременно ссылку на захват и переменную регулярного map:
    • директивы с одним значением (return, set, add_header, proxy_method, proxy_pass, rewrite, index и другие): обе ссылки в одном значении.
    • семейства param/header (proxy_set_header, proxy_set_body, fastcgi_param, scgi_param, uwsgi_param, grpc_set_header): они строят один буфер на запрос для всего семейства, поэтому обе ссылки могут находиться в отдельных директивах в одном location.
  4. Порядок: захват должен вычисляться до регулярного map. Регулярный map выполняется один раз и кэшируется, поэтому map-до-захвата читает согласованное состояние и не является уязвимым. Сканер сообщает о таких случаях как об устранённых (безопасно, но хрупко, не меняйте порядок).

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

# scan a single config (follows include directives by default)
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf

# scan a directory (uses nginx.conf if present, else all *.conf)
python3 nginx_capture_clobber_scan.py /etc/nginx/

# scan several roots
python3 nginx_capture_clobber_scan.py site-a.conf site-b.conf

# machine-readable output
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --json

# do not expand include directives
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --no-includes

Параметры

ПараметрДействие
--jsonВыводить отчёт в формате JSON вместо текста.
--no-includesНе обрабатывать директивы include.

Коды выхода

КодЗначение
0Уязвимых конфигураций не найдено.
1Найдена как минимум одна уязвимая конфигурация.
2Ошибка использования (путь не указан или не найден).

Можно использовать в CI, так как при уязвимой конфигурации код выхода ненулевой:

python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf || echo "review needed"

Вывод

Текстовый режим выводит для каждой находки: файл и строку, охватывающую область, директиву-сток, задействованные переменные capture и map, сработавшую map и однострочную причину. В разделе cleared перечисляются безопасные по порядку сосуществования. --json выдаёт:

{
  "vulnerable": true,
  "findings": [
    {
      "file": "/etc/nginx/conf.d/api.conf",
      "line": 12,
      "scope": "location ~ ^/api/(.+)$",
      "directive": "proxy (family buffer)",
      "captures": ["$1"],
      "map_vars": ["$is_bot"],
      "triggers": ["$is_bot <- regex-map on $http_user_agent [nginx.conf:30]"],
      "reason": "..."
    }
  ],
  "cleared_safe_order": [],
  "regex_maps": [],
  "missing_includes": []
}

Исправление найденного

  1. Примените патч от производителя (nginx 1.30.4 stable / 1.31.3 mainline, NGINX Plus R36 P7 / 37.0.3.1). Это единственное полное исправление. Патч добавляет защитную проверку границ (ngx_http_script_check_length()), которая не позволяет проходу VALUE записывать за пределы выделенного буфера, и вычисляет длину возвращаемой строки по фактически записанным байтам, а не по измерению прохода LEN, закрывая как направление переполнения, так и направление утечки информации.
  2. Промежуточное усиление конфигурации (эшелонированная защита, не замена патчу):
    • Не ссылайтесь на переменную regex map в том же location или буфере, что и ссылка на $1–$9 или именованную группу захвата.
    • Не используйте одну и ту же группу (?P<name>...) в нескольких regex-картах.
    • Держите ссылки на захваты и ссылки на regex-карты вне одного семейства proxy_set_header или fastcgi_param.

Ограничения

  • Статический анализ: он читает конфигурацию, а не поведение во время выполнения. Он не может разрешить значения, создаваемые динамически set-переменными.
  • Нечитаемые цели include (например, абсолютные пути, которых не существует локально) сообщаются в missing_includes, а не молча пропускаются. Запускайте его на хосте, где конфигурация разрешается, для полного покрытия.
  • Помеченное срабатывание «захват до карты» может быть обезврежено во время выполнения, если эта переменная карты уже была вычислена ранее в том же запросе (она уже была бы закэширована). Сканер всё равно сообщает о них, что является консервативным выбором для самопроверки безопасности.

Справочные материалы

Описание уязвимости и цепочка эксплуатации: https://cyberstan.co.uk/nginx-rce/

Скачать инструмент