
Rileva se un'istanza Strapi è vulnerabile a CVE-2026-27886 (esfiltrazione non autenticata di segreti dell'amministratore tramite boolean-oracle).
Rileva in modo sicuro se un'istanza di Strapi è vulnerabile a CVE-2026-27886 senza eseguire l'intera catena di account takeover. Consulta l'articolo completo sul blog di Bishop Fox.
CVE-2026-27886 è un bypass non autenticato della sanificazione dei parametri in Strapi versioni 4.0.0 fino a 5.36.1 che consente a utenti remoti non autenticati di divulgare i segreti degli amministratori tramite l'API pubblica dei contenuti. Il sanitizer delle query del framework in @strapi/utils elabora solo le chiavi di query documentate filters, sort, fields e populate e preserva silenziosamente ogni altra chiave di primo livello presente nella richiesta. Le chiavi sconosciute vengono quindi inoltrate attraverso transformQueryParams e finiscono in strapi.db.query(...) come clausola SQL WHERE. Interrogando where[updatedBy][resetPasswordToken][$startsWith]=<prefix> su qualsiasi raccolta dell'API pubblica dei contenuti, un attaccante può divulgare i segreti degli amministratori un carattere alla volta tramite il campo meta.pagination.total della risposta.
Questo strumento esegue test di vulnerabilità non distruttivi:
GET /api/<collection> di baseGET con ?where[id][$lt]=-1 aggiuntometa.pagination.total per determinare se la clausola where ha raggiunto il livello del databaseIl predicato where[id][$lt]=-1 non può corrispondere a nessuna riga reale, quindi quando la clausola viene onorata a livello di database la risposta si riduce a zero righe. Quando la patch è presente, la chiave where sconosciuta viene rimossa dalla whitelist del sanitizer prima che la query venga costruita e la risposta è identica a quella di base. Il probe non tocca mai le colonne private dell'amministratore e non modifica mai alcun dato.
where è stata onorata a livello di database.sanitizeQuery rimuove tutte le chiavi di primo livello non riconosciute prima che raggiungano il database.INCONCLUSIVE.Su un server vulnerabile lo strumento enumera quindi l'indirizzo email dell'amministratore carattere per carattere tramite where[updatedBy][email][$startsWith]=<prefix>. Non si concatenano per l'account takeover dell'amministratore.
git clone https://github.com/BishopFox/CVE-2026-27886-check
cd CVE-2026-27886-check
Nessuna dipendenza esterna. Lo scanner utilizza solo moduli della libreria standard di Python.
Testa un endpoint di raccolta dell'API pubblica di un server Strapi. Strapi mappa il pluralName del tipo di contenuto al percorso URL, quindi il nome esatto varia a seconda della distribuzione.
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
Lo strumento può rilevare la vulnerabilità solo se sono soddisfatte le seguenti condizioni:
find su almeno un tipo di contenutoupdated_by_id non NULLSe una qualsiasi condizione non è soddisfatta, lo strumento riporterà un risultato INCONCLUSIVE.
Questo codice è distribuito sotto una licenza MIT.
L'utilizzo di questo strumento per attaccare target senza previo consenso reciproco è illegale. È responsabilità dell'utente finale conformarsi a tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili per eventuali usi impropri o danni causati da questo programma.