Searchlight Cyber пусна php2shell-scanner — инструмент с отворен код, който проверява дали даден хост е уязвим към CVE-2026-109618 и CVE-2026-109619 — двойката дефекти в PHP, позволяващи отдалечено изпълнение на код (RCE), за които бяха публикувани корекции за сигурност на 21 октомври.

Скенер PHP2Shell

PHP2Shell позволява на атакуващ да постигне изпълнение на код без автентикация (pre-auth RCE) срещу PHP приложения, работещи под Apache mod_php или PHP-FPM при стандартни конфигурации, с потвърдена експлоатация върху широко внедрен софтуер, включително WordPress, Drupal, Joomla, phpMyAdmin, Nextcloud и Magento. Ако управлявате PHP зад уеб сървър, трябва да знаете кои от вашите хостове са все още уязвими, а изследователите от Searchlight твърдят, че повечето вече разпространени скенери не могат да ви дадат надеждна информация.

„Когато анализирахме други скенери, пуснати в публичното пространство, забелязахме, че повечето разчитат на проверки на версията или не отразяват точно уязвимите условия както за mod_php, така и за php-fpm“, споделят изследователите. Проверката на версията чете само това, което сървърът анонсира. Тя не потвърждава дали дефектът е достъпен и се разминава в зависимост от начина на изпълнение на PHP, тъй като двете сървърни конфигурации се сриват по различен начин.

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

Скенерът преминава последователно през три проверки. Първо се опитва да предизвика грешка за изчерпване на паметта в PHP. Ако това не успее, той следи за диференциален празен отговор HTTP 500, който сигнализира, че работен процес (worker) на PHP-FPM е прекратил работа по средата на заявката. Едва в краен случай инструментът прибягва до разчитане на анонсираната версия на PHP. Самите тестови заявки са специфични: минимална контролна multipart заявка, последвана от до три специално изработени multipart проби с вложени на 62 нива ключове на масиви в PHP, нарастващи от 1 MiB до 20 MiB. Изпращането на проби спира в момента, в който резултатът е категорично установен.

„Предвид факта, че тази уязвимост изисква задействане на състояние на недостиг на памет (OOM), тя по своята същност носи известен риск, но няма надежден начин да бъде засечена без провокиране на това условие“, заявяват изследователите. Те са избрали да го предизвикват въпреки това, защото алтернативата е гадаенето по банери с версията, което инструментът цели да замени. При повечето инсталации на PHP сривът на работен процес се възстановява бързо и не предизвиква прекъсване на услугата, но екипът съветва потребителите да действат внимателно при стартирането му.

Ако искате да знаете какво точно изпращате към хоста: всеки тестван път може да получи 42-байтова контролна заявка и три проби с общ обем от около 29 MiB, като по подразбиране скенерът тества /index.php. Целите с phpMyAdmin се проверяват автоматично и на втори път. Наличен е флаг --sapi, който ограничава засичането само до mod_php или PHP-FPM, когато вече знаете коя от двете среди използва хостът, въпреки че по подразбиране се прилагат и двата набора от правила.

php2shell-scanner е достъпен безплатно в GitHub.