
PoC Python e laboratorio Docker per CVE-2026-22599, un'iniezione SQL autenticata nella write API del Content-Type Builder di Strapi tramite il defaultTo raw di Knex.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-22599
Strapi 5.33.1 - Strapi
Sono @abraxas_null. Laboratorio loopback. CVE-2026-22599-Abraxas-Labs.py esegue chdir in lab/ ed esegue run.sh.
Injection di query al database tramite l'API di scrittura del Content-Type Builder. Yup valida ma non rimuove il campo sconosciuto column.defaultTo. Il costruttore di schema unisce [value, { isRaw: true }] in Knex defaultTo(raw()). Corretto in 5.33.2 / 4.26.1 nascondendo le API di scrittura CTB in produzione.
| CVE | CVE-2026-22599 · CVE.org |
| CWE | CWE-89 |
| CVSS | Critico: 9.3 CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N |
| Prodotto | Strapi |
| Affette | tutte le versioni fino alla 5.33.1 (inclusa) |
| Corrette | 5.33.2 / 4.26.1 e successive |
| Autenticazione | autenticato |
| Licenza | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
JWT di amministratore autenticato. POST /content-type-builder/content-types con un'espressione DEFAULT raw. Il successivo insert su quel tipo utilizza SQL controllato dall'attaccante. L'oracolo del laboratorio è GHSA22599-WITNESS su una nuova riga labitem, non una shell.
Ho mappato createColumn che propaga attribute.column su defaultTo, poi isRaw che chiama knex raw() senza sanitizzazione. Ho avviato Strapi 5.33.1, registrato un amministratore, inviato il content type, inserito una riga.
Controlli di fallimento già presenti nel laboratorio: eval/base64/system non è il testimone; una reverse shell non è il testimone; la 5.33.2 non deve accettare la tupla raw.
Porta 18098. Strapi 5.33.1. JWT di amministratore. API di scrittura CTB raggiungibile (pre-patch: anche in produzione). ./run.sh.
Bersaglio solo 127.0.0.1:18098 (o il loopback su cui è in ascolto).
python3 CVE-2026-22599-Abraxas-Labs.py
Esegue il chdir in lab/ ed esegue run.sh (compose up, attende l'admin, poi poc.py).
Witness: il JSON della voce content-manager contiene GHSA22599-WITNESS.
Modi per perdere senza imparare nulla:
Aggiorna Strapi a 5.33.2 / 4.26.1 o versioni successive. Riesegui CVE-2026-22599-Abraxas-Labs.py contro la build con patch: il DEFAULT grezzo non deve arrivare a destinazione.
github.com/strapi/strapi/security/advisories/GHSA-3xcq-8mjw-h6mx
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. Vedi LICENSE.
Il client comunica con il loopback. L'utilizzo contro sistemi di cui non si è proprietari non è autorizzato da Abraxas Labs. Nessuna garanzia.