PHP2Shell: как за една нощ обновихме хиляди сървъри

PHP2Shell: как за една нощ обновихме хиляди сървъри

На 21 октомври 2026 г. проектът PHP пусна пачове за две критични уязвимости в ядрото на езика, наречени PHP2Shell. По-малко от 8 часа по-късно повечето ни сървъри вече работеха с обновени версии на PHP. До следващата сутрин бяха ъпдейтнати и останалите.

За повечето ни клиенти цялата ситуация не изискваше никакви действия.

Два дни по-късно проектът PHP обяви трета, отделна уязвимост, за която все още няма корекция. Вече сме приложили препоръчаната защитна мярка на сървърите си, така че и тя не изисква действия от ваша страна.

Ето колко сериозна е PHP2Shell, как екипът ни реагира на двете предупреждения и в кой единствен случай все пак трябва да се намесите.

Какво е PHP2Shell?

PHP2Shell е общото име на две уязвимости в самия PHP: CVE-2026-109618 и CVE-2026-109619. И двете позволяват на нападател да изпълни собствен код на уязвим сървър от разстояние, без да е логнат, а екипът по сигурност на PHP оцени всяка от тях с 9,2 по скалата CVSS v4.0 (на английски).

Първата е повреда на паметта, която възниква, когато PHP остане без памет, докато обработва заявка. Втората е грешка от типа use-after-free: останали данни от една заявка сочат към памет, която следваща заявка може да използва злонамерено. Не е нужно да навлизате в механизма, за да видите последствията: нападател, който използва която и да е от двете уязвимости, може да поеме контрол над засегнатия сайт.

Три неща отличават PHP2Shell от обикновеното предупреждение за сигурност:

  • Уязвимостта е в самия PHP, а не във вашия код. Напълно обновен WordPress сайт с внимателно подбрани плъгини е толкова застрашен, колкото и занемарен сайт, защото уязвимият код работи под всяко приложение. Ъпдейтът на WordPress или Laravel не променя версията на PHP, която обслужва заявките.
  • Проблемът датира отпреди повече от десетилетие. Засегната е почти всяка версия на PHP от 5.4 насам (на английски), при всички механизми за изпълнение на PHP, включително PHP-FPM, mod_php на Apache и LiteSpeed.
  • Нападателите изпревариха корекциите. Екипът за анализ на заплахи на Amazon засече опит за атака на 17 октомври, 4 дни преди публичното обявяване, а компанията за киберсигурност watchTowr съобщи за активни опити за атака малко след излизането на пачовете.

Пачовете не стигнаха до всички версии по един и същ начин. Проектът PHP пусна официални версии само за клоновете, които все още поддържа: 8.2.35, 8.3.36, 8.4.27 и 8.5.12. За версиите от PHP 7.4 до 8.1, чиято поддръжка е прекратена (end of life), публикува корекции в изходния код (backports), но не и официални версии. Версиите преди 7.4 не получиха нищо.

Точно тук реакцията на хостинг доставчика има най-голямо значение. Много активни сайтове все още работят с по-стари версии на PHP и това, дали са получили пачовете, зависеше изцяло от това кой поддържа сървърите им.

Как внедрихме пачовете в инфраструктурата си

Информацията за уязвимостите изтече на 20 октомври, ден преди извънредната версия на PHP. Тогава никой извън екипа по сигурност на PHP не знаеше кои версии са засегнати.

Когато проектът PHP публикува предупреждението си (на английски) в 14:00 UTC на 21 октомври, картината се изясни. Имаше обновени пакети за всяка версия от PHP 7.4 нагоре, така че можехме да защитим огромната част от сайтовете, без да сменяме ничия версия на PHP.

Екипът ни започна да инсталира ъпдейтите за сигурност на всички наши сървъри (както управлявани, така и самостоятелно управлявани). Ъпдейтите се прилагат автоматично, без да прекъсват работата на сайтовете. Докато течеше процесът, изпратихме имейл на клиентите си и на компаниите, които използват SPanel на собствена инфраструктура, с обяснение какво е PHP2Shell и дали трябва да предприемат нещо.

Когато целият интернет обновява едновременно

Имаше една пречка, която никаква подготовка не можеше да предотврати. Хостинг доставчици и системни администратори по целия свят теглеха едни и същи пакети в един и същ момент и основното хранилище с пакети не издържа на натоварването. Заявките постоянно завършваха с таймаут, а огледалните сървъри, които обикновено поемат част от трафика, още не бяха синхронизирали новите пакети.

Да чакаме на опашка не беше вариант, затова проявихме изобретателност. Един от инженерите ни настрои специален кеширащ сървър в европейския ни дата център, който изтегляше всеки обновен пакет от основното хранилище само веднъж и го запазваше. След това сървърите ни теглеха ъпдейтите от този кеш, вместо да се борят с останалия свят за претовареното хранилище.

Резултатът? За по-малко от 8 часа обновихме хиляди сървъри. През нощта и сутринта на 22 октомври екипът ни откри сървърите, на които първият опит не беше минал, включително малка група cPanel сървъри, и обнови и тях.

Последващо предупреждение: CVE-2026-115560

На 23 октомври проектът PHP публикува информационно предупреждение за трета уязвимост (на английски), CVE-2026-115560. Тя е отделна от PHP2Shell и версиите от 21 октомври не я отстраняват. Вместо да пусне нов пач, проектът PHP ще я отстрани в следващата си редовна версия.

Причината за по-бавния график е, че тази уязвимост е много по-трудна за използване. Нападател може да извърши атака чрез нея само ако приложението съчетава необичайна конфигурация на сесиите с код, който променя тази конфигурация по време на работа, и само докато е включена функцията на PHP за проследяване на напредъка на качването (session upload progress). Проектът PHP смята тази комбинация за малко вероятна на практика, а към момента на публикуване на предупреждението не е имало съобщения за атаки.

Малко вероятно обаче не означава невъзможно. На сървърите ни работят хиляди различни приложения и не искахме да залагаме, че нито едно от тях не използва тази комбинация. Затова последвахме препоръката на проекта PHP и изключихме проследяването на напредъка на качването (настройката session.upload_progress.enabled) на всички наши сървъри. Същата промяна вече беше посочена като защитна мярка срещу CVE-2026-109619, една от уязвимостите в PHP2Shell, така че добавя втори слой защита и срещу нея.

Файловете се качват нормално. Настройката управлява само вграденото в PHP проследяване на това докъде е стигнало качването, така че най-много може да забележите лента за напредъка, която спира да се движи, ако приложението ви разчита на тази функция.

Екипът по поддръжка не изостана

Уязвимост с оценка 9,2 попада в новините, а новините разбираемо тревожат собствениците на сайтове. В часовете след обявяването тикетите и чатовете за PHP2Shell не спираха.

Екипът ни по поддръжка работи през цялата нощна смяна, а на следващия ден се включиха и старши инженери. Вместо да препраща клиентите към общо известие за статуса, екипът проверяваше сървъра на всеки клиент поотделно, щом той се свърже с нас, така че всеки отговор отразяваше състоянието на конкретния сървър.

Трябва ли да направите нещо?

Не, ако сайтовете ви работят с PHP 7.4 или по-нова версия на сървър на NS1. Сайтовете ви вече използват версии на PHP с корекциите и няма какво да променяте. Същото важи и за CVE-2026-115560: защитната мярка вече е активна на сървърите ни, а официалния пач ще инсталираме, щом излезе. Ако управлявате собствени настройки на PHP за сайтовете си, оставете проследяването на напредъка на качването изключено дотогава.

Ако някой от сайтовете ви все още използва PHP 7.3 или по-стара версия, включително PHP 5.6, преминете поне към PHP 7.4 възможно най-скоро. За старите версии няма пач, така че никакъв ъпдейт от наша страна не може да ги защити. В SPanel отворете PHP Manager, изберете домейна от списъка и задайте новата версия. По-старите приложения не винаги работят веднага с по-нова версия на PHP, затова, ако не сте сигурни, екипът ни по поддръжка може да ви помогне да проверите съвместимостта преди смяната.

Още една препоръка, макар и не спешна. Версиите от PHP 7.4 до 8.1 вече са защитени от PHP2Shell, но поддръжката им е прекратена, така че проектът PHP няма да отстрани следващата уязвимост в тези клонове. PHP 8.2 се присъединява към тях на 31 декември 2026 г. Ако планирате преминаване към PHP 8.3 или по-нова версия още сега, няма да ви се налага да повтаряте всичко това под напрежение.

Сигурността започва под кода ви

PHP2Shell напомня, че сигурността на един сайт не свършва с неговия код. Средата за изпълнение под него, сървърите, на които работи, и хората, които ги поддържат, са също толкова важни, особено в нощта, в която критична уязвимост стане публично известна. А както показа последващото предупреждение, работата не винаги свършва с излизането на ъпдейта. Същият принцип стои и зад начина, по който защитаваме облачната си инфраструктура всеки ден.

Ако искате някой друг да се грижи за това, с управлявания VPS хостинг ъпдейтите, мониторингът и поддръжката, която работи и през нощта, остават наша грижа.

Често задавани въпроси за PHP2Shell

В: Засегнат ли е сайтът ми при NS1 от PHP2Shell?

О: Не, ако сайтът ви работи с PHP 7.4 или по-нова версия. Инсталирахме версии на PHP с корекциите на всеки сървър, който управляваме, така че от ваша страна не са нужни действия. Сайтовете с PHP 7.3 или по-стара версия остават уязвими, докато не смените версията им с по-нова.

В: Кои версии на PHP съдържат корекциите за PHP2Shell?

О: Корекциите са в PHP 8.2.35, 8.3.36, 8.4.27 и 8.5.12. Версиите от 7.4 до 8.1 получиха корекции в изходния код вместо официални версии, а на нашите сървъри работят версии с тези корекции. За PHP 7.3 и по-старите версии няма пач.

В: Част от PHP2Shell ли е CVE-2026-115560?

О: Не. CVE-2026-115560 е отделна уязвимост, която проектът PHP обяви на 23 октомври. Тя засяга само приложения с необичайна конфигурация на сесиите и проектът PHP ще я отстрани в следващата си редовна версия. Вече сме изключили проследяването на напредъка на качването на сървърите си, което е препоръчаната защитна мярка, така че от ваша страна не са нужни действия.

В: Как да проверя коя версия на PHP използва сайтът ми?

О: В PHP Manager в SPanel. Там можете да видите и да смените версията на PHP за всеки домейн в акаунта си. Всеки домейн или основна директория (document root) може да работи със собствена версия, затова проверете всички сайтове, които хоствате, а не само основния.

В: Трябва ли да обновя WordPress или плъгините си, за да се защитя от PHP2Shell?

О: Не. PHP2Shell е уязвимост в самия PHP, така че ъпдейтът на WordPress, темата или плъгините не я засяга. Пробивът се затваря само с версия на PHP с корекциите, но редовното обновяване на приложенията ви остава добра практика.

В: Какво да направя, ако смятам, че сайтът ми е компрометиран?

О: Свържете се веднага с поддръжката ни. Сред признаците, за които си струва да ни съобщите, са непознати файлове в папките на сайта, cron задачи или потребителски акаунти, които не сте създавали, както и необясними грешки или забавяния. Екипът ни може да провери сървъра и при нужда да ви помогне с почистването и възстановяването от бекъп.

Борислав Тонев

Автор

Борислав е копирайтър с набито око за детайла и увлечение по информационните технологии, което датира от детството му. През годините, той е писал за огромно разнообразие от най-различни теми, но признава, че най-вълнуващото предизвикателство за него е да разбере как работи модерният онлайн свят и да предаде знанията си на читателите.

Напишете коментар

Задължително поле*