
Go CLI, который инвентаризирует HTTPS-конечные точки, согласующие HTTP/2 через ALPN, для выявления систем, требующих проверки мер по смягчению последствий CVE-2023-44487. Проверки TLS без эксплуатации, с верификацией сертификатов и безопасными настройками по умолчанию.
rapid-reset-check — это небольшая Go-утилита командной строки для быстрой инвентаризации HTTPS-эндпоинтов, которые поддерживают HTTP/2 и поэтому требуют проверки мер по смягчению CVE-2023-44487.
Сканер заведомо не наносит вреда. Он разрешает каждый целевой адрес, устанавливает TLS-соединение с проверкой сертификата, предлагает h2 и http/1.1 через ALPN, фиксирует выбор пира и закрывает соединение. Он не отправляет ни HTTP-запроса, ни предисловия HTTP/2, ни потоков, ни кадров RST_STREAM, ни флуд-трафика.
[!IMPORTANT] Согласование
h2— это наблюдаемый факт подверженности, а не доказательство того, что сервис уязвим или не пропатчен. Удалённое рукопожатие не может проверить ограничения Rapid Reset в реализации HTTP/2, уровень патчей, вышестоящий источник или средства защиты от DDoS.
CVE-2023-44487 — это техника отказа в обслуживании, которая злоупотребляет быстрым созданием и отменой потоков HTTP/2. Попытка доказать наличие условия против живого сервиса сама потребовала бы потенциально разрушительного трафика. Вместо этого данный инструмент отвечает на безопасный первый вопрос: какие протестированные TLS-эндпоинты в данный момент согласуют HTTP/2 и поэтому требуют от оператора проверки мер по смягчению?
HTTP/2 через TLS объявляется с использованием ALPN-идентификатора h2, определённого в RFC 9113. Google рекомендует проверять или пропатчивать каждый сервер, прокси и балансировщик нагрузки с поддержкой HTTP/2 на пути запроса; см. рекомендации Google по CVE-2023-44487.
Для запуска инструмента Go не требуется. Скачайте архив для вашей платформы из последнего релиза GitHub:
| Платформа | Файл релиза |
|---|---|
| Linux x86-64 | rapid-reset-check_<version>_linux_amd64.tar.gz |
| Linux ARM64 | rapid-reset-check_<version>_linux_arm64.tar.gz |
| macOS Intel | rapid-reset-check_<version>_darwin_amd64.tar.gz |
| macOS Apple silicon | rapid-reset-check_<version>_darwin_arm64.tar.gz |
| Windows x86-64 | rapid-reset-check_<version>_windows_amd64.zip |
| Windows ARM64 | rapid-reset-check_<version>_windows_arm64.zip |
Распакуйте архив, затем выполните rapid-reset-check --version. В Windows исполняемый файл называется rapid-reset-check.exe.
Каждый релиз включает SHA256SUMS. В Linux проверьте скачанный архив из той же директории с помощью:
sha256sum --ignore-missing --check SHA256SUMS
В macOS сравните shasum -a 256 <archive> с соответствующей строкой в SHA256SUMS. Опубликованные архивы публичных релизов также получают артефактную аттестацию GitHub, которую можно проверить с помощью GitHub CLI:
gh attestation verify <archive> --repo ramonzx6/http-script-json
Установка Node.js, cURL, nghttp2 или WHOIS не требуется.
go test ./...
go build -o rapid-reset-check ./cmd/rapid-reset-check
Сборки из исходников сообщают dev в --version; релизные сборки получают свою версию из тега релиза.
Сканируйте только те эндпоинты, которыми вы владеете или на проверку которых у вас есть разрешение.
Сканирование одного или нескольких публичных эндпоинтов:
./rapid-reset-check example.com api.example.com:8443
Голые имена хостов нормализуются до HTTPS на порту 443. URL-адреса, содержащие только authority в схеме HTTPS, также принимаются:
./rapid-reset-check https://example.com https://api.example.com:8443
Сканирование JSON-списка целей из репозитория:
./rapid-reset-check --input json/urls.json
Использование стандартного ввода для автоматизации:
printf '["example.com", "api.example.com"]' | ./rapid-reset-check --input -
Выполните ./rapid-reset-check --help, чтобы увидеть все ограничения и параметры вывода.
--input принимает исходный формат JSON-массива:
[
"example.com",
"api.example.com:8443",
"https://www.example.net"
]
Объектные формы {"urls": [...]} и {"targets": [...]} также поддерживаются. Позиционные цели и --input намеренно взаимоисключающие. Дублирующиеся нормализованные эндпоинты сканируются один раз, а каждый запуск ограничен 4 096 входными целями.
В рамках сканирования только HTTPS-эндпоинты. Учётные данные, пути, не являющиеся корневыми, запросы, фрагменты, неподдерживаемые схемы, некорректные порты и неоднозначные имена хостов отклоняются, а не тихо переписываются.
| Оценка | Значение |
|---|---|
h2_observed_review_required | По крайней мере один проверенный TLS-пир выбрал h2. Проверьте каждый компонент HTTP/2 на этом пути; это не вердикт об уязвимости. |
h2_not_observed_on_tested_path | Каждый выбранный адрес завершил проверенное рукопожатие без выбора h2. Это наблюдение пути на конкретный момент времени, а не гарантия безопасности. |
indeterminate | Проблема с DNS, соединением, таймаутом, TLS, сертификатом или лимитом адресов помешала полному наблюдению. |
not_scanned_policy | Разрешённые адреса были исключены политикой сетевой безопасности сканера. |
invalid_target | Ввод был некорректным или выходил за пределы поддерживаемой области HTTPS-authority. |
Отчёт включает каждый испытанный разрешённый адрес, согласованный ALPN, версию и шифр TLS, ограниченные данные об идентичности/сроке действия сертификата, время, решения политики, количество пропущенных адресов, явный флаг полноты и сводку. Он не собирает тела ответов, заголовки ответов, cookie или необработанные сертификаты.
--ca-file, чтобы добавить частный центр сертификации; режима небезопасной проверки не существует.--allow-private только для внутренних эндпоинтов, которые вы уполномочены проверять.Пример параметров:
./rapid-reset-check \
--format json \
--timeout 5s \
--concurrency 4 \
--max-addresses 8 \
example.com > report.json
Для авторизованного эндпоинта с частным PKI:
./rapid-reset-check \
--allow-private \
--ca-file ./internal-root-ca.pem \
service.internal:8443
Код возврата 0 означает, что каждая цель дала полное наблюдение ALPN. Код возврата 1 означает, что по крайней мере одна цель была некорректной, заблокированной политикой или неопределённой; отчёт при этом всё равно записывается. Ошибки использования CLI и конфигурации возвращают 2. Наблюдение h2 само по себе не меняет код возврата, поскольку это сигнал инвентаризации, а не вердикт об уязвимости.
Для каждого результата h2_observed_review_required: