[{"data":1,"prerenderedAt":260},["ShallowReactive",2],{"blog:\u002Fblog\u002Fphp-rce-october-2026":3,"blog-around:\u002Fblog\u002Fphp-rce-october-2026":244,"blog-others:\u002Fblog\u002Fphp-rce-october-2026":250},{"id":4,"title":5,"body":6,"cover":228,"date":229,"description":230,"draft":231,"extension":232,"meta":233,"navigation":234,"path":235,"readingMinutes":236,"seo":237,"stem":238,"tags":239,"updated":228,"__hash__":243},"blog\u002Fblog\u002Fphp-rce-october-2026.md","Две критические дыры в ядре PHP: почему обновляться нужно в тот же день",{"type":7,"value":8,"toc":219},"minimark",[9,22,38,43,64,67,71,74,95,98,102,105,108,112,115,121,127,133,143,157,163,167,170,190],[10,11,12,13,17,18,21],"p",{},"21 октября 2026 года проект PHP выпустил внеплановые версии 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Они закрывают две уязвимости в ядре языка — ",[14,15,16],"strong",{},"CVE-2026-109618"," и ",[14,19,20],{},"CVE-2026-109619",". Обе относятся к худшему классу из возможных: удалённое выполнение кода без авторизации. Проще говоря, злоумышленнику не нужен ни логин, ни пароль, ни доступ к админке — достаточно отправить серверу специально подготовленный запрос.",[10,23,24,25,29,30,37],{},"В примечаниях к релизу разработчики PHP написали фразу, которую стоит перечитать дважды: ",[26,27,28],"em",{},"«There are no complete mitigations, updating is the only safe choice»"," — полноценных обходных мер нет, единственный безопасный вариант — обновиться (",[31,32,36],"a",{"href":33,"rel":34},"https:\u002F\u002Fgithub.com\u002Fphp\u002Fphp-src\u002Freleases\u002Ftag\u002Fphp-8.4.27",[35],"nofollow","php-src, релиз 8.4.27",").",[39,40,42],"h2",{"id":41},"почему-ситуация-хуже-обычной","Почему ситуация хуже обычной",[10,44,45,46,51,52,57,58,63],{},"Обычно у критической уязвимости есть «окно»: производитель выпускает исправление, а подробности публикуются позже, когда большинство успело обновиться. В этот раз окна не было. Детали утекли 20 октября — за день до скоординированного раскрытия, и вскоре появился публичный PoC, то есть рабочая демонстрация атаки. Разбор механики опубликовали исследователи ",[31,47,50],{"href":48,"rel":49},"https:\u002F\u002Fwww.akamai.com\u002Fblog\u002Fsecurity-research\u002Fcritical-remote-code-execution-vulnerabilities-php-core",[35],"Akamai",", предупреждение выпустил ",[31,53,56],{"href":54,"rel":55},"https:\u002F\u002Fcert.europa.eu\u002Fpublications\u002Fsecurity-advisories\u002F2026-018",[35],"CERT-EU",", ответы на частые вопросы собрала команда ",[31,59,62],{"href":60,"rel":61},"https:\u002F\u002Fwatchtowr.com\u002Fintelligence\u002Fphp-cve-2026-109618-faq\u002F",[35],"watchTowr",".",[10,65,66],{},"Когда есть публичный PoC, атака перестаёт быть делом квалифицированных одиночек. Её встраивают в сканеры, которые круглосуточно перебирают адреса в интернете. Сканеру безразлично, крупный у вас обменник или маленький: если версия PHP уязвима, сервер попадёт в список целей.",[39,68,70],{"id":69},"что-это-значит-для-обменника-на-php","Что это значит для обменника на PHP",[10,72,73],{},"Выполнение кода на сервере — это не «сломали страницу». Это доступ ко всему, что видит веб-приложение:",[75,76,77,86,89,92],"ul",{},[78,79,80,81,85],"li",{},"к файлу ",[82,83,84],"code",{},".env"," с паролями от базы данных, ключами API бирж и платёжных шлюзов;",[78,87,88],{},"к базе с заявками, балансами и данными клиентов, включая документы KYC;",[78,90,91],{},"к ключам горячего кошелька, если они хранятся на том же сервере, что и сайт;",[78,93,94],{},"к возможности тихо подменить адреса для приёма средств в интерфейсе.",[10,96,97],{},"Последний пункт особенно неприятен: злоумышленнику не обязательно что-то «красть» сразу. Достаточно незаметно поменять адрес депозита в шаблоне — и клиенты сами начнут отправлять деньги на чужой кошелёк.",[39,99,101],{"id":100},"обновим-в-следующем-спринте-стоит-денег","«Обновим в следующем спринте» стоит денег",[10,103,104],{},"Самая дорогая фраза в этой истории — «запланируем на следующей неделе». Между выходом исправления и массовым сканированием проходят не недели, а часы и дни. Каждый день на уязвимой версии — это день, когда о вашем сервере может узнать чужой автоматический сканер.",[10,106,107],{},"Отдельно стоит помнить про PHP 8.2: эта ветка получила исправление, но 31 декабря 2026 года она перестаёт поддерживаться. После этой даты следующую подобную дыру в 8.2 уже никто не закроет. Если ваш проект до сих пор на 8.2, переход на актуальную ветку нужно планировать сейчас, а не в январе.",[39,109,111],{"id":110},"как-выстроить-обновления-чтобы-не-бегать-в-панике","Как выстроить обновления, чтобы не бегать в панике",[10,113,114],{},"Хорошая новость: срочное обновление — не подвиг, если процесс подготовлен заранее. Вот что для этого нужно.",[10,116,117,120],{},[14,118,119],{},"Знать о выпусках первым."," Подпишитесь на рассылку анонсов php.net и на список рассылки безопасности вашего дистрибутива (Debian, Ubuntu). Разработчик не должен узнавать о критической дыре из новостей через неделю.",[10,122,123,126],{},[14,124,125],{},"Иметь staging."," Тестовая среда, повторяющая боевую, позволяет за час проверить, что новая версия PHP не ломает приложение. Без неё любое обновление превращается в лотерею, и его откладывают.",[10,128,129,132],{},[14,130,131],{},"Делать бэкапы и проверять восстановление."," Резервная копия, из которой никто ни разу не восстанавливался, — это надежда, а не бэкап.",[10,134,135,138,139,142],{},[14,136,137],{},"Автоматизировать обновления ОС."," Пакет ",[82,140,141],{},"unattended-upgrades"," в Debian и Ubuntu ставит исправления безопасности без участия человека. Для пакетов PHP из репозитория дистрибутива это часто означает обновление в тот же день.",[10,144,145,148,149,152,153,156],{},[14,146,147],{},"Проверять зависимости."," Команда ",[82,150,151],{},"composer audit"," показывает известные уязвимости в библиотеках проекта. Её стоит запускать в CI при каждой сборке, а версии зависимостей — фиксировать в ",[82,154,155],{},"composer.lock",", чтобы на сервер не приезжало ничего непроверенного.",[10,158,159,162],{},[14,160,161],{},"Выкатывать постепенно."," Канареечный деплой — сначала один сервер или небольшая доля трафика, затем все — позволяет обновляться быстро и при этом безопасно откатиться, если что-то пошло не так.",[39,164,166],{"id":165},"если-сервер-мог-быть-уязвим","Если сервер мог быть уязвим",[10,168,169],{},"Раз подробности были публичными до выхода исправления, само обновление не отменяет вопрос: а не успел ли кто-то зайти раньше? Если сервер работал на уязвимой версии и был доступен из интернета, имеет смысл:",[75,171,172,175,178,181,187],{},[78,173,174],{},"просмотреть журналы веб-сервера за период с 20 октября на предмет необычных запросов;",[78,176,177],{},"поискать на сервере посторонние PHP-файлы — так называемые веб-шеллы, через которые злоумышленник возвращается позже;",[78,179,180],{},"сравнить файлы приложения с репозиторием, особенно шаблоны с адресами для депозитов;",[78,182,183,184,186],{},"сменить пароли от базы данных, ключи API бирж и платёжных систем, секреты в ",[82,185,84],{},";",[78,188,189],{},"если ключи горячего кошелька лежали на том же сервере — считать их скомпрометированными и перевести средства на новые адреса.",[191,192,193,196],"blockquote",{},[10,194,195],{},"Критическая уязвимость с публичным PoC — это гонка, которую выигрывает тот, кто обновился раньше сканеров. Выиграть её можно только процессом, подготовленным заранее.",[197,198,199,202,205,213,216],"ol",{},[78,200,201],{},"Подпишитесь на анонсы php.net и рассылку безопасности дистрибутива.",[78,203,204],{},"Держите staging и проверенные бэкапы, чтобы обновление занимало часы, а не недели.",[78,206,207,208,17,210,212],{},"Включите ",[82,209,141],{},[82,211,151],{}," в CI.",[78,214,215],{},"Планируйте уход с PHP 8.2 до 31 декабря 2026 года.",[78,217,218],{},"После инцидентного окна проверьте журналы, ищите веб-шеллы и меняйте ключи.",{"title":220,"searchDepth":221,"depth":221,"links":222},"",2,[223,224,225,226,227],{"id":41,"depth":221,"text":42},{"id":69,"depth":221,"text":70},{"id":100,"depth":221,"text":101},{"id":110,"depth":221,"text":111},{"id":165,"depth":221,"text":166},null,"2026-10-30","CVE-2026-109618 и CVE-2026-109619 позволяют выполнить код на сервере без авторизации. Что это значит для обменника на PHP и как выстроить обновления так, чтобы не терять деньги на ожидании.",false,"md",{},true,"\u002Fblog\u002Fphp-rce-october-2026",6,{"title":5,"description":230},"blog\u002Fphp-rce-october-2026",[240,241,242],"PHP","уязвимости","обновления","edjuZyh206JyGF1IOQFdOGMAG_QFzEWmdrMHsurEpcg",[228,245],{"title":246,"path":247,"stem":248,"date":249,"children":-1},"SQL-инъекции: как в 2026-м всё ещё воруют базы","\u002Fblog\u002Fsql-injection","blog\u002Fsql-injection","2026-10-29",[251,252,256],{"path":247,"title":246,"date":249},{"path":253,"title":254,"date":255},"\u002Fblog\u002Fheader-trust","Подмена Referer, Host и X-Forwarded-For: почему нельзя верить заголовкам","2026-10-28",{"path":257,"title":258,"date":259},"\u002Fblog\u002Fhow-sites-get-hacked","Как чаще всего взламывают сайты: семь дверей, которые забывают закрыть","2026-10-27",1793381757141]