Защитная памятка по RestrictedPython и GHSA-ffg3-p8fm-mjx2: версия, инвентарь, безопасный обратимый тест, отрицательный контроль, патч, стоп-линия и обезличенный пакет поддержки.
Что подтверждает GHSA-ffg3-p8fm-mjx2
Официальный advisory GHSA-ffg3-p8fm-mjx2 / CVE-2026-55830 описывает конкретную границу: positional-only аргументы могли затенить имена guard hooks и изменить ожидаемую политику ограниченного выполнения. Диапазон версий сформулирован так: ветки до 8.3 включительно не содержат исправление; исправленная версия — 8.3. Это подтверждает дефект vendor-компонента, но само по себе не доказывает, что он достижим в конкретной установке. Отделите наличие пакета от достижимости функции: зафиксируйте версию из lock-файла или runtime, включённый модуль и путь данных. Не переносите оценку на соседние продукты только по сходному названию класса уязвимости.
Инвентарь до любого изменения
Снимите минимальный паспорт RestrictedPython: источник артефакта, точную версию, checksum, способ запуска и включённую функцию, связанную с advisory. Не прикладывайте токены, cookies, IP, полные конфиги и пользовательские данные. Для решения достаточно таблицы «версия пакета | policy-файл | разрешённый fixture | запрещённый fixture | исключение». Если версия не попадает в заявленный диапазон, отметьте not affected by version, но отдельно проверьте backport у поставщика образа. Если версия неизвестна или пакет переупакован, состояние остаётся blocked, а не безопасным по умолчанию.
Обратимый тест и отрицательный контроль
Проверка выполняется только на изолированном стенде и без эксплуатационного payload. План: сравнить одинаковый локальный policy-fixture до и после обновления: разрешённый пример должен завершиться, а обращение к защищённому имени — остаться отклонённым. Сначала запишите baseline на текущей версии, затем тот же fixture на исправленной, после чего повторите baseline либо восстановите snapshot. Положительный контроль доказывает, что штатная функция всё ещё работает; отрицательный — что опасная граница закрыта. Не считайте timeout успехом: он может означать сетевую ошибку, зависание или неверный стенд. Все входы должны быть синтетическими и удаляемыми.
Патч, проверка совместимости и откат
Рабочая последовательность для этого случая: снять инвентарь политик, обновить пакет до 8.3 и повторить набор разрешённых и запрещённых выражений. Обновляйте внутри поддерживаемой ветки и сверяйте vendor release, а не только номер в manifest. До rollout сохраните резервную копию изменяемого состояния, checksum исходного артефакта и одну команду восстановления. После обновления повторите только релевантные smoke-тесты, проверьте журналы на новые ошибки и подтвердите, что dependency resolver действительно выбрал исправленную сборку. Откат должен возвращать код и данные совместимо, поэтому миграции проверяются отдельно.
Критерий решения, стоп-линия и пакет поддержки
Решение passed возможно, когда установленная версия соответствует исправленной границе, штатный контроль проходит, отрицательный контроль безопасно отклоняется и нет новой ошибки в журнале. Стоп-линия: если запретный fixture начинает выполняться или production-политика не воспроизводится на стенде. В поддержку передайте только GHSA-ffg3-p8fm-mjx2, версию до и после, обезличенную строку матрицы «версия пакета | policy-файл | разрешённый fixture | запрещённый fixture | исключение», timestamp Europe/Moscow, checksum артефакта и первый релевантный error-class. Не включайте секреты и не утверждайте, что отсутствие воспроизведения доказывает отсутствие риска во всех конфигурациях.
Отдельная модель риска для RestrictedPython
В этой проверке активом считается именно состояние, которое меняет RestrictedPython, а доверительной границей — место, где возникает условие «positional-only аргументы могли затенить имена guard hooks и изменить ожидаемую политику ограниченного выполнения». До патча зафиксируйте причинную цепочку своими полями: версия пакета | policy-файл | разрешённый fixture | запрещённый fixture | исключение. Для этого advisory ожидаемый ответ не сводится к зелёному health-check: требуется доказать версию, достижимость конкретной функции и результат отрицательного контроля. Компенсирующая мера до окна обновления — убрать недоверенный вход с этой границы и сократить права процесса. После патча независимым доказательством служат совпавшие checksum артефакта, vendor-версия и строка fixture-наблюдения, а не отсутствие жалоб. Для RestrictedPython отдельно сохраните hash policy-кода и перечень разрешённых builtins: смена guard-поведения без смены этих двух артефактов делает сравнение воспроизводимым.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, версии и ссылки перепроверены. Реальные пользовательские данные и вымышленные результаты тестов не использовались.
Источники и проверка
- RestrictedPython security advisory GHSA-ffg3-p8fm-mjx2 проверено 2026-08-30
- RestrictedPython vendor fix or release проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.