Защитная памятка по Wasmtime WASIp1 и GHSA-3p27-qvp9-27qf: граница версий, runtime-инвентарь, безопасный regression-тест, стоп-критерии, канарейка, rollback и очищенный пакет владельцу.
Факт, применимость и ответ
GHSA-3p27-qvp9-27qf подтверждает отдельную проблему в Wasmtime WASIp1: повторная операция могла не освобождать host-side ресурс и постепенно исчерпывать лимит процесса. Граница применимости — затронутые ветки wasmtime-wasi до опубликованных исправлений, включая линию 45 до 45.0.2, при доступном WASIp1 fd_renumber. Прямой безопасный ответ: сначала доказать runtime-версию и достижимость именно этой функции, затем выбрать исправленную версию своей поддерживаемой ветки, для линии 45 — wasmtime-wasi 45.0.2, и пересобрать embedding application. Наличие продукта в inventory ещё не доказывает уязвимость, а отсутствие жалоб не доказывает исправление. Вердикт формулируют как passed, failed, blocked или not affected by reachability; последний требует проверяемого доказательства отключённого пути.
Инвентаризация фактического пути
До изменения создайте evidence row для Wasmtime WASIp1: «crate version | operations window | host descriptors start/end | RSS delta | guest result». Она обязана описывать тот процесс, который обслуживает проверяемый путь. Зафиксируйте package origin, resolved version, digest и включённую функцию; отдельно отметьте роль или сетевой контекст. Если версия исправлена поставщиком без нового номера, сопоставьте commit или vendor notice, а не делайте вывод по строке версии. Удалите IP, hostnames, usernames, session values, домашние пути и содержимое данных. Отсутствие прямого runtime-признака не трактуется как безопасность — это статус blocked.
Как получить отрицательное доказательство
Используйте изолированный стенд, synthetic data и восстановимый snapshot. Безопасный отрицательный контроль: в контейнере с жёстким лимитом выполнить ограниченное число штатных renumber операций синтетического модуля и сравнить дескрипторы и память до/после нескольких одинаковых окон. Сначала запишите baseline на текущей разрешённой сборке без активного эксплуатационного payload, затем повторите тот же сценарий на исправленной версии. Passed означает совпадение заранее объявленного security decision и сохранение штатной функции. Timeout, пустой ответ, один HTTP status или тишина журнала не считаются успехом: они могут означать неверный маршрут, crash или потерю telemetry.
Обновление с контролем состояния
Безопасное изменение для Wasmtime WASIp1 формулируется так: выбрать исправленную версию своей поддерживаемой ветки, для линии 45 — wasmtime-wasi 45.0.2, и пересобрать embedding application. Перед rollout сохраните проверяемый backup, hash старого artifact, effective configuration и шаг возврата, который уже выполнялся на копии. Начните с одной канарейки, повторяющей нужную функцию без реальных данных и широких прав. После старта подтвердите runtime version, положительный smoke, отрицательное решение, число рестартов и лимиты ресурсов. Возврат binary и возврат данных — разные операции; их совместимость фиксируют до публикации изменения.
Стоп-критерии и ложный успех
Стоп-линия для этой темы: метрика растёт, лимит контейнера близок к исчерпанию, тест запускается на общем host или предлагается бесконечный цикл. При её срабатывании остановите опыт, сохраните только обезличенные признаки и восстановите snapshot. Не расширяйте тест, чтобы добиться воспроизведения. Ложнозелёные сигналы: один health endpoint, package metadata без runtime, успешное TCP-соединение, отсутствие публичного exploit и отсутствие пользовательских обращений. Эти признаки полезны для диагностики, но не отвечают на конкретный security decision и не заменяют первичную advisory-запись.
Отдельная практическая ценность
Утечка доказывается не абсолютным RSS одного процесса, а повторяемым ростом host resource после завершения одинаковых окон. JIT cache и allocator могут оставить память без уязвимости, поэтому отдельно считают дескрипторы и проверяют plateau после прогрева. Тест имеет фиксированный верхний предел и аварийное завершение раньше cgroup limit. Результат считается самостоятельным только при сохранённой матрице до/после, заранее заданном expected decision и проверенном возврате. Если эта практическая развилка уже покрыта внутренней инструкцией, правильное действие — обновить её, а не создавать соседний URL под вариант названия продукта.
Передача результата без секретов
Владельцу передают GHSA-3p27-qvp9-27qf, точную версию до и после, URL первичного источника, SHA-256 артефакта, timestamp Europe/Moscow и одну очищенную строку «crate version | operations window | host descriptors start/end | RSS delta | guest result». Добавьте expected и observed decision, длительность ограниченного окна, backup/rollback status и один обезличенный error-class. Удалите secrets, абсолютные домашние пути, IP, account ids, session values и содержимое пользовательских объектов. Если reachability не подтверждена, честный статус blocked; advisory не доказывает, что конкретная установка была затронута.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, версии и ссылки перепроверены. Реальные пользовательские данные, активные payload и вымышленные результаты тестов не использовались.
Источники и проверка
- GitHub Advisory Database: GHSA-3p27-qvp9-27qf проверено 2026-08-30
- crates.io: wasmtime-wasi 45.0.2 проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.