Текуща ситуация: PHP2Shell. Две критични уязвимости в PHP (CVSS 9,2) позволяват злонамерен код без вход. Корекции от 21.10.2026 г.Какво да направите сега →

php-cgi: наследство с риск

php-cgi често остава незабелязано в стари конфигурации, панели и под Windows. Така го откривате, пачвате го след PHP2Shell и планирате прехода към PHP-FPM.

Актуалност 5 мин. четенеСървър и хостинг

Накратко: php-cgi е най-старият начин да се ползва PHP зад уеб сървър и още работи на много сървъри, често незабелязано. Уязвимостта в php-cgi от PHP2Shell засяга изрично този режим на работа. Пачнете, прекратете всички работещи php-cgi процеси и планирайте прехода към PHP-FPM.

Какво е php-cgi и къде още работи

PHP има няколко варианта: като програма за командния ред, като модул на Apache, като PHP-FPM и като php-cgi. php-cgi е програма, която уеб сървърът стартира и на която предава заявки през CGI или FastCGI. Без собствено управление на процесите тя е по-проста от PHP-FPM, но и по-малко контролируема.

Типични места, където се намира, са по-стари хостинг панели, Apache с mod_fcgid, собствени скриптове-обвивки за няколко версии на PHP и PHP под Windows с IIS през FastCGI. В агенции и ведомства освен това има сървъри, които са настроени преди години и оттогава само се експлоатират.

Уязвимостта в php-cgi при PHP2Shell

PHP2Shell обхваща уязвимостите CVE-2026-109618 и CVE-2026-109619 в самия PHP, и двете с CVSS v4.0 9,2. И двете позволяват изпълнение на зловреден код без вход в системата. Проектът PHP изрично посочва php-cgi сред засегнатите режими на работа, наред с PHP-FPM, mod_php, FrankenPHP и LiteSpeed.

Коригирани са PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35. За PHP 8.1 и по-стари вече няма официални актуализации, а само минимални бекпортове на изходния код за 7.4, 8.0 и 8.1. Именно конфигурациите с php-cgi работят над средното често на стари версии. php-cgi освен това не е засегнат за пръв път: още през 2024 г. уязвимост в php-cgi под Windows (CVE-2024-4577) предизвика сериозен отзвук. Наследство от този вид затова заслужава особено внимание.

Откриване на php-cgi на сървъра

Следващите команди само четат и помагат да се открие php-cgi. Пътищата и имената на модулите са примери.

# Работещи php-cgi процеси с време на стартиране и потребител
ps -eo pid,lstart,user,cmd | grep -E 'php-cgi|php[0-9.]*-cgi' | grep -v grep

# Инсталирани php-cgi програми
ls /usr/bin/php*-cgi /usr/lib/cgi-bin/php* 2>/dev/null

# Apache: зареден ли е mod_fcgid или mod_cgi?
apache2ctl -M 2>/dev/null | grep -Ei 'fcgid|cgi'
grep -RniE 'FcgidWrapper|AddHandler.*php|Action.*php' /etc/apache2 /etc/httpd 2>/dev/null

Ако намерите записи FcgidWrapper или манипулатори, сочещи към програма php-cgi, този режим на работа е в действие. За всяка намерена програма проверете версията с -v. При пакети на дистрибуции пачът се доказва с дневника на промените с номерата на CVE, защото бекпортовете често не променят номера на версията.

Пач и прекратяване на всички процеси

Внесете актуализацията чрез управлението на пакетите или източника, от който идва php-cgi. След това всички работещи php-cgi процеси трябва да изчезнат. При mod_fcgid Apache държи процесите известно време; пълният рестарт на Apache ги прекратява.

# Пълен рестарт на Apache (Debian/Ubuntu респективно семейство RHEL)
systemctl restart apache2   # или: systemctl restart httpd

# Проверка: има ли още php-cgi процеси, по-стари от актуализацията?
ps -eo pid,lstart,cmd | grep -E 'php-cgi' | grep -v grep

Ако php-cgi работи през собствен мениджър на процесите или услуга на панел, рестартирайте него. Под Windows с IIS рециклирайте пуловете на приложенията, вж. PHP под Windows и IIS.

Действайте веднага

Ако php-cgi работи с PHP 8.1 или по-стар на публично достъпен сървър, официален пач липсва. Задайте незабавно временните мерки и обмислете по препоръка на BSI (Федерална служба за информационна сигурност на Германия) сървърът да се изключи временно от мрежата.

Временни мерки при php-cgi

php.net препоръчва временни мерки, които не осигуряват пълна защита. При php-cgi стойностите принадлежат в php.ini, който зарежда съответната програма, или в конфигурацията на сървъра. Файловете .user.ini и ini_set() според php.net не са достатъчни за session.upload_progress.enabled.

; php.ini на инсталацията с php-cgi
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M

При функция за качване php.net посочва post_max_size = 32M. При PHP 8.5 се добавя fatal_error_backtraces=0. Ограниченията на паметта задавате чрез cgroups за услугата на уеб сървъра, не чрез RLIMIT_AS или RLIMIT_DATA. След това рестартирайте всички процеси.

Пътят към PHP-FPM

В дългосрочен план php-cgi не е добър избор. PHP-FPM предлага пулове за всеки уебсайт, собствени потребители, ограничения за всеки пул, страници за състояние и контролирани рестарти. Преминаването най-често е добре планируемо: инсталиране на PHP-FPM, създаване на пулове, преминаване на уеб сървъра към FastCGI към PHP-FPM, премахване на скриптовете-обвивки. Как изглежда чистото изграждане, показва Как да обезопасите Nginx с PHP-FPM. Ако освен това работи стара версия на PHP, свържете смяната с надграждането.

Докато преминаването не е направено, преценявайте критично съществуващата конфигурация. Уеб сървърът трябва да предава на php-cgi само файлове с разширение .php и не пътища, които сочат към несъществуващи файлове. В директориите за качване не бива да е възможно изпълнение на PHP. Скриптовете-обвивки, които зареждат отделен php.ini за всеки уебсайт, проверете дали тези файлове не отменят отново временните стойности. Ако програма php-cgi стои директно в публично достъпна директория като cgi-bin, там тя трябва да се премахне. Такова наследство често идва от инструкции за инсталиране от минали години и при по-късни преустройства просто се забравя. Документирайте всяка находка с път и предназначение, за да не пропусне по-късното преустройство нищо.

Остава важно: пачът не премахва зловреден софтуер, внесен преди това. Запазете логовете от 20.10.2026 г. нататък.

Как помага PHP SOS конкретно?

  • Откриваме инсталациите на php-cgi, скриптовете-обвивки и манипулаторите и ги свързваме с уебсайтовете.
  • Пачваме, прекратяваме всички стари процеси и документираме състоянието.
  • За PHP 8.1 и по-стари планираме заедно с Вас миграция към поддържана версия на PHP.
  • В рамките на укрепването на сървъри заместваме php-cgi с PHP-FPM с отделни пулове.

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

Ползвам ли php-cgi, без да го знам?

Това е по-често, отколкото се мисли. По-стари панели, FastCGI конфигурации с mod_fcgid и PHP под Windows с IIS често стартират PHP като php-cgi. Списък на процесите или Server API в phpinfo го показват надеждно.

Едно и също ли са FastCGI и php-cgi?

Не съвсем. FastCGI е протокол. И PHP-FPM, и php-cgi могат да говорят FastCGI, но php-cgi е по-старата, по-проста програма без пулове и управление на процесите. PHP2Shell засяга изрично php-cgi.

Какво означава класически CGI при PHP?

При класическия CGI уеб сървърът стартира нов PHP процес за всяка заявка. Това е бавно и днес рядко се среща. По-често се среща php-cgi зад mod_fcgid или FastCGI, където процесите обработват няколко заявки.

Трябва ли да рестартирам нещо след актуализацията?

Да. При FastCGI конфигурациите php-cgi процесите продължават да работят известно време. Рестартирайте уеб сървъра, респективно мениджъра на процесите, и проверете дали няма php-cgi процес, по-стар от актуализацията.

Източници

Незабавен контакт

Всеки час има значение. Пишете ни сега.

Опишете накратко системата, версията на PHP и какво сте забелязали. Ние се свързваме с Вас, уточняваме ситуацията и работим отдалечено, докато инцидентът бъде приключен и документиран.

Незабавна помощ