SC-403: зловредният код за WordPress, който се самовъзстановява
Напоследък WordPress е доста гореща тема, що се касае сигурност. След близо 10 години „мълчание“, изведнъж се появиха няколко критични уязвимости в ядрото на най-популярния CMS в света.
Освен ядрото, в последната седмица на август се появи един зловреден код, който ни грабна вниманието с устойчивостта си. Условното му име е SC-403 и има една неприятна особеност: изтривате заразения файл, а той се връща след секунди.
Причината е, че не става дума за един файл. Кодът се разписва на девет места едновременно – в темата, в базата данни, в drop-in файловете на WordPress, в паметта на PHP процеса, в скрити конфигурационни директиви и дори във вашия собствен браузър, през service worker. Изтриете ли едно копие, останалите го възстановяват. Затова стандартното почистване не просто не помага – то храни заразата.
Как се осъществява пробива
Зловредният код влиза през нещо дребно: остарял плъгин, слаба парола, бекдорнат модул от неофициален източник. Оттам нататък краде администраторски пароли, създава скрит админ акаунт, който не се вижда в списъка с потребители, подправя валидни сесии и се разпространява към всеки друг сайт на същия хостинг акаунт.
Ако подозирате компрометиране, най-важното правило е да не триете файлове един по един на жив сайт – така просто задействате възстановяването. Първо изолирайте сайта и спрете PHP процесите, после премахнете всички копия наведнъж, ротирайте паролите и ключовете в wp-config.php, унищожете сесиите и – това често се пропуска – изчистете service worker-а от браузъра на всеки администратор.
Скритият администратор се хваща лесно с директна заявка към базата, която кодът не може да филтрира:
SELECT u.user_login, u.user_email FROM wp_users u JOIN wp_usermeta um ON um.user_id = u.ID WHERE um.meta_key = 'wp_capabilities' AND um.meta_value LIKE '%administrator%';
Ако тук изскочи акаунт, който не виждате в администрацията – това е достатъчно доказателство.
За да не се ровите на ръка, публикувахме безплатен, отворен инструмент, който само сканира и докладва, но никога не трие: github.com/ux2dev/wordpress-sc403-cleaner.
AI казва тежката си дума
Истинската поука е по-скучна от самата заплаха. Едва ли зад SC-403 стои гений – просто устойчивост, която доскоро изискваше елитен екип, днес е евтина. А причината да е толкова упорит е една: при типичния споделен хостинг PHP процесът е собственик на файловете, които изпълнява. Тоест „да изпълниш код“ и „да презапишеш кода“ са едно и също право, и никаква настройка вътре в WordPress не го променя.
Затова и защитата не е в wp-config.php, а едно ниво по-надолу: PHP потребителят да не е собственик на кода, забранено изпълнение на PHP в uploads/, отделен потребител и пул за всеки сайт. Плюс двуфакторна автентикация за всички администратори, разбира се.
SC-403 не е силен. Просто границата на доверие стои на грешното място. Преместите ли я под PHP, всяко пробиване си остава инцидент, вместо да се превърне в постоянен наемател.