Защитная памятка по gRPC Erlang и GHSA-6ccx-9c9f-327w: граница версий, runtime-инвентарь, безопасный regression-тест, стоп-критерии, канарейка, rollback и очищенный пакет владельцу.
Что именно подтверждено
GHSA-6ccx-9c9f-327w подтверждает отдельную проблему в gRPC Erlang: малое сжатое тело могло развернуться в непропорционально большой объём памяти процесса. Граница применимости — grpc Erlang до 1.0.0 при принятии gzip-сжатых сообщений без достаточной границы decompressed size. Прямой безопасный ответ: сначала доказать runtime-версию и достижимость именно этой функции, затем обновить пакет grpc до 1.0.0 и согласовать max receive message с лимитом уже распакованного тела и внешним proxy. Наличие продукта в inventory ещё не доказывает уязвимость, а отсутствие жалоб не доказывает исправление. Вердикт формулируют как passed, failed, blocked или not affected by reachability; последний требует проверяемого доказательства отключённого пути.
Как очертить затронутый контур
Начните с runtime-карточки gRPC Erlang: «grpc version | compressed bytes | decompressed class | response decision | BEAM memory peak». Версию снимайте из реально загруженного модуля или процесса, источник — из lockfile и registry metadata, целостность — по checksum. Container label и запись в SBOM полезны лишь после сопоставления с работающим экземпляром. Backport признаётся только при наличии первичной ссылки и совпадении patch identity. В карточку не переносят адреса узлов, имена людей, токены, cookies, приватные пути и полные конфиги. Если функция или сборка не определена достоверно, анализ остаётся blocked.
Стендовая проверка без эксплуатации
Используйте изолированный стенд, synthetic data и восстановимый snapshot. Безопасный отрицательный контроль: в контейнере с memory ceiling отправить несколько валидных синтетических сообщений ниже и чуть выше настроенного decompressed limit; превышение должно отклоняться до роста памяти за budget. Сначала запишите baseline на текущей разрешённой сборке без активного эксплуатационного payload, затем повторите тот же сценарий на исправленной версии. Passed означает совпадение заранее объявленного security decision и сохранение штатной функции. Timeout, пустой ответ, один HTTP status или тишина журнала не считаются успехом: они могут означать неверный маршрут, crash или потерю telemetry.
Переход на исправленную ветку
Изменение по GHSA-6ccx-9c9f-327w начинается с сохранения исходной точки: backup, checksum, версия runtime, конфигурационные флаги и проверенная команда восстановления. После этого примените шаг: обновить пакет grpc до 1.0.0 и согласовать max receive message с лимитом уже распакованного тела и внешним proxy. Один изолированный экземпляр получает обычный smoke и заранее подготовленный отрицательный test, не имея доступа к пользовательским данным. Сверьте loaded module, логи только по error-class, restart counter и ресурсную стабильность. Масштабировать можно после прохождения окна наблюдения. Старый artifact не гарантирует возврат, если новые данные или формат уже несовместимы.
Когда опыт нужно остановить
Стоп-линия для этой темы: BEAM приближается к cgroup limit, запрос направлен на production service либо fixture увеличивается без фиксированного потолка. При её срабатывании остановите опыт, сохраните только обезличенные признаки и восстановите snapshot. Не расширяйте тест, чтобы добиться воспроизведения. Ложнозелёные сигналы: один health endpoint, package metadata без runtime, успешное TCP-соединение, отсутствие публичного exploit и отсутствие пользовательских обращений. Эти признаки полезны для диагностики, но не отвечают на конкретный security decision и не заменяют первичную advisory-запись.
Почему обычного smoke недостаточно
Proxy обычно ограничивает сжатые байты и потому не видит реальный объём после decompression. Именно поэтому в матрице два размера. Не требуется строить максимальную compression bomb: достаточно небольшого файла над локальным лимитом. После отказа делают второй обычный RPC, подтверждая, что listener и scheduler сохранили работоспособность. Результат считается самостоятельным только при сохранённой матрице до/после, заранее заданном expected decision и проверенном возврате. Если эта практическая развилка уже покрыта внутренней инструкцией, правильное действие — обновить её, а не создавать соседний URL под вариант названия продукта.
Что оставить в очищенном отчёте
Владельцу передают GHSA-6ccx-9c9f-327w, точную версию до и после, URL первичного источника, SHA-256 артефакта, timestamp Europe/Moscow и одну очищенную строку «grpc version | compressed bytes | decompressed class | response decision | BEAM memory peak». Добавьте expected и observed decision, длительность ограниченного окна, backup/rollback status и один обезличенный error-class. Удалите secrets, абсолютные домашние пути, IP, account ids, session values и содержимое пользовательских объектов. Если reachability не подтверждена, честный статус blocked; advisory не доказывает, что конкретная установка была затронута.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, версии и ссылки перепроверены. Реальные пользовательские данные, активные payload и вымышленные результаты тестов не использовались.
Источники и проверка
- GitHub Advisory Database: GHSA-6ccx-9c9f-327w проверено 2026-08-30
- Hex: grpc 1.0.0 проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.