Разкрита е критична верига от уязвимости за отдалечено изпълнение на код (RCE) без необходимост от автентикация, наречена „wp2shell“, в ядрото на WordPress (WordPress Core). Тя излага на риск над 500 милиона уебсайта, които могат да бъдат напълно компрометирани от неавтентикирани атакуващи.
Веригата комбинира два отделно проследявани пропуска: CVE-2026-63030 (проблем със смесване на партидни маршрути в REST API) и CVE-2026-60137 (SQL инжекция в параметъра author__not_in на WP_Query). Благодарение на това се постига пълно компрометиране на сървъра при стандартна инсталация на WordPress без нито един инсталиран плъгин.
WordPress захранва приблизително 43 процента от всички уебсайтове в глобален мащаб, което прави това едно от най-значимите разкрития за сигурността на CMS системи в близкото минало.
Това, което отличава wp2shell от типичните проблеми със сигурността в WordPress, е липсата на каквито и да е предварителни условия: не се изисква валиден акаунт, уязвим плъгин, специална конфигурация или взаимодействие с потребителя. Всеки анонимен атакуващ, който има мрежови достъп до уязвима инстанция на WordPress, може да я компрометира веднага.
Откритието: ИИ модел го откри срещу $25
Пропускът беше открит от изследователя по сигурността Адам Кюс от екипа за изследвания Assetnote на Searchlight Cyber, използвайки нестандартен метод: проект за изследване на уязвимости, управляван от изкуствен интелект и захранван от модела GPT-5.6 Sol Ultra на OpenAI.
Кюс е адаптирал подкана (prompt), първоначално публикувана от OpenAI за решаване на математическата хипотеза „Cycle Double Cover“, и я е насочил към кодовата база на ядрото на WordPress. Той е инструктирал модела да търси верига от уязвимости от тип RCE без автентикация, използвайки до четири паралелни изследователски агента в продължение на поне шест часа.
Кюс изрично е указал на модела да не прави справки с регистри с промени (changelogs), хронология в git или интернет, за да сравнява разликите с коригирани версии. Така той го е принудил да открие грешката единствено чрез анализ на кода от фундаментални принципи. На модела е било позволено също да клонира и одитира външни зависимости, ако пълната верига изисква грешки в основни библиотеки като PHP или самата MySQL.
Резултатът: Sol идентифицира пълна SQL инжекция без автентикация в кодовата база. Първоначално Кюс се е усъмнил в това предвид десетгодишната история на WordPress без големи уязвимости преди автентикация. След като валидира SQL инжекцията срещу тестова инстанция в реално време чрез извличане на имейл адреса на администратора, Кюс попита модела дали може да ескалира уязвимостта до пълно RCE.
Около четири часа по-често моделът отговори утвърдително с работеща верига за ескалация. Общите изчислителни разходи за цялото откритие, преизчислени на базата на абонамент от $200 на месец, възлизат на около $25.
Кюс отбелязва, че разбирането и документирането на генерираната от ИИ верига от експлоати са му отнели значително повече време, отколкото на модела да я разработи, описвайки техниката след компрометиране като „напълно абсурдна“ в своята сложност.
Аномалията при десинхронизация на Batch API (CVE-2026-63030)
Основният дефект се намира в крайната точка за партидни заявки на WordPress REST API (/wp-json/batch/v1) – функция, въведена в WordPress 5.6 през 2020 г., която позволява множество виртуални API заявки да бъдат пакетирани в едно извикване.
При нормална работа всяка отделна REST заявка преминава през четиристъпков конвейер: валидиране на параметри, саниране на параметри, обратна връзка за разрешение (permission callback) и накрая изпълнение на крайната точка.
Партидната крайна точка нарушава този модел, като изпълнява валидирането и изпълнението в два отделни цикъла, вместо да обработва всяка заявка последователно. Ако една заявка в партидата е неправилно форматирана, масивът за валидиране записва грешката, но съответният масив от разрешени манипулатори (handlers) не се актуализира синхронно поради оператор continue, който пропуска вмъкването в масива от едната страна, но не и от другата.
Това десинхронизира съпоставянето на индексите между двата масива, така че при изпълнението валидираните параметри на заявка N могат да се приложат към действителния манипулатор на заявка N+1, като напълно се заобикаля предвиденото саниране на параметрите. Тази уязвимост се класифицира като CWE-436 (конфликт при интерпретацията) и има базова оценка по CVSS v3.1 от 7.5 (висока).
Точката на SQL инжекция (CVE-2026-60137)
Сама по себе си уязвимостта за десинхронизация не дава нищо без уязвима точка (sink), която да бъде експлоатирана. Тази точка е параметърът author__not_in на WP_Query – основния клас на WordPress за изграждане на заявки към базата данни. Когато параметърът се подава като масив, WordPress санира всяка стойност с absint(). Но ако се изпрати като обикновен скаларен низ, стъпката за саниране се пропуска изцяло и стойността се интерполира директно в необработена SQL клауза NOT IN. Обикновено този път е недостъпен, тъй като публичният параметър author_exclude се валидира като масив от цели числа, преди изобщо да достигне до author__not_in.
Десинхронизацията на партидните маршрути заобикаля тази валидация, позволявайки на скаларен злонамерен SQL код да премине недокоснат. Тъй като базовата крайна точка поддържа само GET заявки (които партидният API по подразбиране не позволява), експлоатацията използва рекурсивно, вложено партидно извикване, за да преведе GET заявката през механизма за десинхронизация втори път.