Безопасная проверка Jenkins POST config.xml persistence по ghsa-m6wv-wh8g-64xc: применимость, обратимый fixture, field-class / plaintext-input / encrypt-called / persisted-bytes / marker-on-disk / read-view, PASS и stop-rule без production-данных.
Разберите симптом Jenkins POST config.xml persistence
Отдельная пользовательская боль: secret из POST сохраняется plaintext в job config и доступен через Extended Read/filesystem. Reviewed advisory описывает «Jenkins does not encrypt secrets from POST config.xml submissions before storing them in job configurations»; практический механизм: Inbound XML binding не гарантирует Secret wrapper. Sensitive fields должны преобразоваться в encrypted representation до atomic persistence и redacted read-back. Проверяем invariant «каждое sensitive config field encrypted before disk write; read views никогда не возвращают plaintext», а не общий класс проблем. Запись ghsa-m6wv-wh8g-64xc опубликована 2026-06-10, обновлена 2026-08-13; ecosystem boundary: «maven/org.jenkins-ci.main:jenkins-core < 2.555.3; first patched 2.555.3». Это не доказывает affected code в fork, факт эксплуатации, популярность или поисковый спрос.
Сопоставьте runtime и безопасный control
Зафиксируйте source package, runtime version, build digest, commit provenance, feature/config state и роль, достигающую ветви. Нормальный control: обычное non-secret поле сохраняется без изменения. Отдельно укажите самый ранний read/write/send/execute/cache/credential side effect. Если provenance или reachability неизвестна, статус unknown. Версионный диапазон «maven/org.jenkins-ci.main:jenkins-core < 2.555.3; first patched 2.555.3» — фильтр; backport подтверждается diff и поведением, а не предположением.
Запустите обратимый fixture
Лабораторный опыт: Во временном job directory config service получит synthetic secret marker; encryptor/persistence/read-view — recording adapters. Все идентификаторы и данные синтетические; network отключён или заменён recorder, filesystem ограничен mkdtemp, persistence — memory adapter/rollback. До запуска сохраните input digest, ожидаемое правило «secret marker отсутствует в persisted bytes/read view, decrypt доступен только внутреннему runtime path» и нулевые counters. После — строку «field-class / plaintext-input / encrypt-called / persisted-bytes / marker-on-disk / read-view», final-state digest и cleanup proof. Реальный payload, credential, нагрузка или production mutation запрещены.
Прочитайте матрицу field-class / plaintext-input / encrypt-called / persisted-bytes / marker-on-disk / read-view
Убедитесь, что control прошёл именно нужную ветвь, затем найдите stage policy и любой чувствительный action. PASS возможен только если secret marker отсутствует в persisted bytes/read view, decrypt доступен только внутреннему runtime path. Один status code, отсутствие exception или запись в лог не доказывают защиту. Для concurrency/state boundary используйте fixed barriers и малый детерминированный повтор. Любой неожиданный side effect переводит результат в fail/unknown до объяснения и полного cleanup.
Свяжите patch, stop-rule и решение
Diff исправления должен реализовать смысл «каждое sensitive config field encrypted before disk write; read views никогда не возвращают plaintext» до side effect. Красные флаги: fail-open, policy после action, несовпадение requested/effective target, неполный transport/path coverage или отсутствующий negative control. Stop-rule: не отправлять config.xml в Jenkins и не читать controller filesystem. Также остановитесь при privilege prompt, реальных данных, необратимой записи, росте ресурсов или невозможности cleanup. Дерево: proven patched — not-applicable; недостижимо — not-reachable; PASS — ready-for-reviewed-update; наблюдается «secret из POST сохраняется plaintext в job config и доступен через Extended Read/filesystem» — fail; иначе unknown. В support packet включите ghsa-m6wv-wh8g-64xc, build provenance, «field-class / plaintext-input / encrypt-called / persisted-bytes / marker-on-disk / read-view», expected/observed, stop reason и две source URL без секретов/персональных данных. Production rollout требует отдельного backup, canary, readiness и rollback.
Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые источники, безопасный fixture, privacy-границы и отсутствие рекламных обещаний затем перепроверены.
Источники и проверка
- GitHub Reviewed Advisory ghsa-m6wv-wh8g-64xc проверено 2026-08-31
- Official/upstream source for Jenkins POST config.xml persistence проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.