
Определить, уязвим ли экземпляр Strapi к CVE-2026-27886 (неаутентифицированная эксфильтрация секретов администратора с помощью boolean-oracle).
Безопасно определяет, уязвим ли экземпляр Strapi к CVE-2026-27886, не выполняя полную цепочку захвата учетной записи. См. полное описание в блоге Bishop Fox.
CVE-2026-27886 — это неаутентифицированный обход санитизации параметров в Strapi версий 4.0.0–5.36.1, который позволяет удаленным неаутентифицированным злоумышленникам утекать секреты администратора через публичный Content API. Санитайзер запросов фреймворка в @strapi/utils обрабатывает только документированные ключи запросов filters, sort, fields и populate, а все остальные ключи верхнего уровня в запросе молча сохраняет. Затем неизвестные ключи передаются через transformQueryParams и попадают в strapi.db.query(...) как SQL-выражение WHERE. Путем перебора where[updatedBy][resetPasswordToken][$startsWith]=<prefix> в любой публичной коллекции Content API злоумышленник может утекать секреты администратора по одному символу через поле meta.pagination.total в ответе.
Этот инструмент выполняет неразрушающее тестирование уязвимости, путем:
GET /api/<collection>GET с добавлением ?where[id][$lt]=-1meta.pagination.total для определения, достигло ли условие where уровня базы данныхПредикат where[id][$lt]=-1 не может соответствовать ни одной реальной строке, поэтому, когда условие учитывается на уровне базы данных, ответ сокращается до нуля строк. Когда патч установлен, неизвестный ключ where отбрасывается белым списком санитайзера до построения запроса, и ответ идентичен базовому. Зонд никогда не затрагивает приватные столбцы администратора и не изменяет данные.
where было учтено на уровне базы данных.sanitizeQuery удаляет любые нераспознанные ключи верхнего уровня до их попадания в базу данных.INCONCLUSIVE.На уязвимом сервере инструмент затем перечисляет адрес электронной почты администратора посимвольно через where[updatedBy][email][$startsWith]=<prefix>. Он не выполняет захват учетной записи администратора.
git clone https://github.com/BishopFox/CVE-2026-27886-check
cd CVE-2026-27886-check
Внешние зависимости не требуются. Сканер использует только модули стандартной библиотеки Python.
Протестируйте конечную точку публичной коллекции Content API сервера Strapi. Strapi сопоставляет pluralName типа контента с путём URL, поэтому точное имя различается в зависимости от развертывания.
python3 CVE-2026-27886-check.py <ENDPOINT>
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential confirmed: baseline total=1, where-test total=0 -> VULNERABLE
[+] Enumerating admin email
admin email = [email protected]
[+] Done. To remediate, upgrade to Strapi 5.37.0 or later.
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential check: baseline total=1, where-test total=1 -> NOT VULNERABLE
Инструмент может обнаружить уязвимость только при выполнении следующих условий:
find хотя бы для одного типа контентаupdated_by_idЕсли какое-либо условие не выполнено, инструмент сообщит результат INCONCLUSIVE.
Этот код распространяется под лицензией MIT.
Использование этого инструмента для атак на цели без предварительного взаимного согласия незаконно. Конечный пользователь обязан соблюдать все применимые местные, государственные и федеральные законы. Разработчики не несут ответственности и не отвечают за любое неправомерное использование или ущерб, причиненный этой программой.