Срочно: обновить PHP Apache прелендов до 8.2.35 — PHP2Shell #14

Closed
opened 2026-10-22 04:07:31 +02:00 by yury · 3 comments
Owner

Результат read-only аудита anton/api#308: productionzoompixel.ru,productionzoompixel.online и stagingzoomstage.online на153.76.161.92 используютmod_php8.2.34 из php:8.2-apache,digest06617d90f29b57b2aa200a9df03b3bafbfa5c66d2e2913fbb2b5f775a8358465,сборка06.10; контейнеры16.10, Apacheмодульнеизменён. ДоменыHTTP200/X-Powered-ByPHP8.2.34,nginxмаршрутизирует18081/18082/18083. Это затронутыеCVE-2026-109618/109619,особыйрискmod_phpдоappкодa. ОсновнойAPIужеPHP8.3.36исправлен.
Патчготов:официальныйphp:8.2.35-apache-trixie(тажеDebian13ветка); registrymanifestуспешнопрочитан22.10,linux/amd64digestsha256:a6e1550bb2c43add980125b769cd5add5aae5889419a5ddfad21bf930fa04faa. Первичныйadvisoryhttps://www.php.net/archive/2026.php#2026-10-21-1; GHSA-w8hw-w9fx-j79w иGHSA-6wmf-4rv5-p3rp.
При реализации: получитьактуальныйhostcompose/runtimeconfig,зафиксироватьcurrentSHAконтента/config/реквизитов/наборов,обновитьтолькоPHPобрази пересоздатьконтейнерыссохранениемread-onlymounts/portbinding; stage→полныйPreland→Tour/error/retry/тема/mobile→securityproductionпоотдельномуразрешению. Не переливатьконтентизGit,необновлятьдругиеключиconfig.json. ПроверитьфактическийApache/новыепроцессы/healthи регрессию,неограничиватьсяCLIверсией. Одноaptupgradeнаhostилиdockerpullбезrecreateнепатчитработающийlibphp. Ненадёжныемеры(толькоupload_progressOff/лимиты/WAF)невыдаватьзаполныйпатч.
Сейчас порученТОЛЬКОаудит, productionнеизменялся. Постоянныйзапретproductionpreland#4сохраняется: дляsecurityruntimeнужнопрямоепоручениевладельца. Основнойреестраудитаapi#308,этазадачаостаётсяоткрытойдофактическоговыпускаиприёмки.

Результат read-only аудита anton/api#308: productionzoompixel.ru,productionzoompixel.online и stagingzoomstage.online на153.76.161.92 используютmod_php8.2.34 из php:8.2-apache,digest06617d90f29b57b2aa200a9df03b3bafbfa5c66d2e2913fbb2b5f775a8358465,сборка06.10; контейнеры16.10, Apacheмодульнеизменён. ДоменыHTTP200/X-Powered-ByPHP8.2.34,nginxмаршрутизирует18081/18082/18083. Это затронутыеCVE-2026-109618/109619,особыйрискmod_phpдоappкодa. ОсновнойAPIужеPHP8.3.36исправлен. Патчготов:официальныйphp:8.2.35-apache-trixie(тажеDebian13ветка); registrymanifestуспешнопрочитан22.10,linux/amd64digestsha256:a6e1550bb2c43add980125b769cd5add5aae5889419a5ddfad21bf930fa04faa. Первичныйadvisoryhttps://www.php.net/archive/2026.php#2026-10-21-1; GHSA-w8hw-w9fx-j79w иGHSA-6wmf-4rv5-p3rp. При реализации: получитьактуальныйhostcompose/runtimeconfig,зафиксироватьcurrentSHAконтента/config/реквизитов/наборов,обновитьтолькоPHPобрази пересоздатьконтейнерыссохранениемread-onlymounts/portbinding; stage→полныйPreland→Tour/error/retry/тема/mobile→securityproductionпоотдельномуразрешению. Не переливатьконтентизGit,необновлятьдругиеключиconfig.json. ПроверитьфактическийApache/новыепроцессы/healthи регрессию,неограничиватьсяCLIверсией. Одноaptupgradeнаhostилиdockerpullбезrecreateнепатчитработающийlibphp. Ненадёжныемеры(толькоupload_progressOff/лимиты/WAF)невыдаватьзаполныйпатч. Сейчас порученТОЛЬКОаудит, productionнеизменялся. Постоянныйзапретproductionpreland#4сохраняется: дляsecurityruntimeнужнопрямоепоручениевладельца. Основнойреестраудитаapi#308,этазадачаостаётсяоткрытойдофактическоговыпускаиприёмки.
Author
Owner

Владелец после отчёта API#308 о необходимости патча трёх прелендов поручил продолжить («Давай про патчи»). Реализуем минимальный PHP runtime-only security update: stage8.2.35напрежнейDebian13 → поведенческаяприёмка → обаproductionruntime. Контент/config.json/реквизиты/примеры/UTM/порты/mounts сохраняются. Это отдельное поручение security runtime; обычный production content deploy изmain по#4 не включается. План#14: снимокфактическогоcompose/хешей; immutableпатчобраз+автоматизированныйпроверяемыйрелиз/rollback;stageключевойPreland→Tour/error/retry/theme/mobile;productionконтейнерыпоодному;версияApache/newworkers/HTTP/хеши/сквознойsmoke;итогAPI#308/preland#14/KB.

Владелец после отчёта API#308 о необходимости патча трёх прелендов поручил продолжить («Давай про патчи»). Реализуем минимальный PHP runtime-only security update: stage8.2.35напрежнейDebian13 → поведенческаяприёмка → обаproductionruntime. Контент/config.json/реквизиты/примеры/UTM/порты/mounts сохраняются. Это отдельное поручение security runtime; обычный production content deploy изmain по#4 не включается. План#14: снимокфактическогоcompose/хешей; immutableпатчобраз+автоматизированныйпроверяемыйрелиз/rollback;stageключевойPreland→Tour/error/retry/theme/mobile;productionконтейнерыпоодному;версияApache/newworkers/HTTP/хеши/сквознойsmoke;итогAPI#308/preland#14/KB.
Author
Owner

Staging обновлён до php:8.2.35-apache-trixie@sha256:a6e1550bb2c43add980125b769cd5add5aae5889419a5ddfad21bf930fa04faa. Фактический Compose /srv/preland/docker-compose.yml содержит только три standalone PHP/Apache сервиса, bind webroot RO и loopback-порты; обновление инфраструктуры выполняется через SSH docker compose up --no-deps только выбранного сервиса (не через content-deploy). Новый workflow не нужен: API production-release относится к API, его не меняем. Сохранены исходный Compose и полный перечень SHA256 в /srv/preland/security-php-20261022, образ закреплён по digest той же Debian13/PHP8.2 ветки. Browser plugin недоступен, использован существующий Docker Playwright: desktop/mobile × light/dark, клики примеров, имитация HTTP503, восстановление кнопки, повторная настоящая загрузка JPEG → HTTP200 → /public/upscale с видимым preview PASS. Далее production-сервисы последовательно с теми же проверками, без загрузки/изменения файлов сайтов.

Staging обновлён до php:8.2.35-apache-trixie@sha256:a6e1550bb2c43add980125b769cd5add5aae5889419a5ddfad21bf930fa04faa. Фактический Compose /srv/preland/docker-compose.yml содержит только три standalone PHP/Apache сервиса, bind webroot RO и loopback-порты; обновление инфраструктуры выполняется через SSH docker compose up --no-deps только выбранного сервиса (не через content-deploy). Новый workflow не нужен: API production-release относится к API, его не меняем. Сохранены исходный Compose и полный перечень SHA256 в /srv/preland/security-php-20261022, образ закреплён по digest той же Debian13/PHP8.2 ветки. Browser plugin недоступен, использован существующий Docker Playwright: desktop/mobile × light/dark, клики примеров, имитация HTTP503, восстановление кнопки, повторная настоящая загрузка JPEG → HTTP200 → /public/upscale с видимым preview PASS. Далее production-сервисы последовательно с теми же проверками, без загрузки/изменения файлов сайтов.
Author
Owner

Security-патч выполнен 22.10.2026, 05:14–05:20 МСК. Все три преленда (zoomstage.online, zoompixel.ru, zoompixel.online) работают на PHP8.2.35 Apache/Debian13, закреплённом по amd64 digest sha256:a6e1550bb2c43add980125b769cd5add5aae5889419a5ddfad21bf930fa04faa. Исходный Compose сохранён /srv/preland/security-php-20261022/docker-compose.before.yml; в текущем изменены только три image. Применение — последовательный docker compose up -d --no-deps --pull never; stage → приёмка → ru → приёмка → online → приёмка. Git/CI-релиза приложения нет: это серверная runtime-операция, обычный production content-deploy не включён.

Итоговая проверка05:20: CLI8.2.35 всех3; загруженный Apache libphp.so SHA256 caa626e6e5b520f5921bb0d9f01781a7cf0b9eab4d9e4cf1ee43324e619240ab и /proc/1/maps; новые running контейнеры; HTTP200/PHP8.2.35 трёх публичных доменов. Loopback-порты/RO mounts/restartpolicy сохранены. Полные отсортированные SHA256-манифесты728 файлов до/после cmp IDENTICAL: контент, config.json, бренды, реквизиты и наборы сохранены. API по-прежнему8.3.36; backup timer enabled/active.

Docker Playwright: на каждом домене1440/390 × light/dark (12 вариантов), реальные клики миниатюр, загруженные изображения, без JS-ошибок/overflow. На каждом HTTP503-инъекция восстановила кнопку, повторная реальная JPEG-загрузкаHTTP200→/public/upscale с видимым preview. Это проверка загрузки/перехода, не полного GPU-улучшения. В stage ошибка503 видима. В production overlay скрыт существующим старым контентом; подтверждён прежним PHP8.2.34 на изолированном контейнере с тем же RO webroot и SSR HTML в том же browser origin/assets. Контейнер удалён. Этот UI-дефект не скрываем: выделен в открытую связанную #15, отрицательный UI-сценарий production не объявляется пройденным.

Локальные доказательства: artifacts/php308/patched-runtime.txt, patch-smoke.cjs, три *-smoke.json, zoompixel.ru-baseline-smoke.json, скриншоты. KB: known-base/Аудиты/2026-10-22 PHP2Shell — версии и патчи.md; TODO/AGENT_LOG синхронизированы. Rollback-снимок сохранён, откат не понадобился и вернул бы уязвимый runtime. Задача патча закрыта; остаток интерфейса явно открыт в #15.

Security-патч выполнен 22.10.2026, 05:14–05:20 МСК. Все три преленда (zoomstage.online, zoompixel.ru, zoompixel.online) работают на PHP8.2.35 Apache/Debian13, закреплённом по amd64 digest sha256:a6e1550bb2c43add980125b769cd5add5aae5889419a5ddfad21bf930fa04faa. Исходный Compose сохранён /srv/preland/security-php-20261022/docker-compose.before.yml; в текущем изменены только три image. Применение — последовательный docker compose up -d --no-deps --pull never; stage → приёмка → ru → приёмка → online → приёмка. Git/CI-релиза приложения нет: это серверная runtime-операция, обычный production content-deploy не включён. Итоговая проверка05:20: CLI8.2.35 всех3; загруженный Apache libphp.so SHA256 caa626e6e5b520f5921bb0d9f01781a7cf0b9eab4d9e4cf1ee43324e619240ab и /proc/1/maps; новые running контейнеры; HTTP200/PHP8.2.35 трёх публичных доменов. Loopback-порты/RO mounts/restartpolicy сохранены. Полные отсортированные SHA256-манифесты728 файлов до/после cmp IDENTICAL: контент, config.json, бренды, реквизиты и наборы сохранены. API по-прежнему8.3.36; backup timer enabled/active. Docker Playwright: на каждом домене1440/390 × light/dark (12 вариантов), реальные клики миниатюр, загруженные изображения, без JS-ошибок/overflow. На каждом HTTP503-инъекция восстановила кнопку, повторная реальная JPEG-загрузкаHTTP200→/public/upscale с видимым preview. Это проверка загрузки/перехода, не полного GPU-улучшения. В stage ошибка503 видима. В production overlay скрыт существующим старым контентом; подтверждён прежним PHP8.2.34 на изолированном контейнере с тем же RO webroot и SSR HTML в том же browser origin/assets. Контейнер удалён. Этот UI-дефект не скрываем: выделен в открытую связанную #15, отрицательный UI-сценарий production не объявляется пройденным. Локальные доказательства: artifacts/php308/patched-runtime.txt, patch-smoke.cjs, три *-smoke.json, zoompixel.ru-baseline-smoke.json, скриншоты. KB: known-base/Аудиты/2026-10-22 PHP2Shell — версии и патчи.md; TODO/AGENT_LOG синхронизированы. Rollback-снимок сохранён, откат не понадобился и вернул бы уязвимый runtime. Задача патча закрыта; остаток интерфейса явно открыт в #15.
yury closed this issue 2026-10-22 04:21:21 +02:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: anton/preland#14