
Pack de divulgation CVE-2026-79752 pour l'injection SQL de CakePHP 5.2.13 via FunctionsBuilder::cast, avec un script PoC Python et un lab Docker pour une reproduction autorisée.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-79752
Write-up : https://abraxaslabs.tech/research/CVE-2026-79752
CakePHP 5.2.13 - cakephp
Je suis @abraxas_null. Labo en boucle locale. Le client est CVE-2026-79752-Abraxas-Labs.py.
Littéral CAST AS. FunctionsBuilder::cast (ainsi que extract / datePart / dateAdd) insère les paramètres dataType / part / unit fournis par l'appelant dans le SQL en tant que structure non échappée. Labo GET /?type= vers cast('body', $_GET['type']) sur sqlite. Pas WordPress. Frère de CVE-2026-77635 (jsonValue / Postgres). Corrigé dans 5.2.14, 5.3.7, 5.1.9, 4.6.5, 4.5.12.
| CVE | CVE-2026-79752 · CVE.org |
| CWE | CWE-89 |
| CVSS | Critique : 9.2 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Produit | CakePHP |
| Affecté | 5.2.x jusqu'à 5.2.13 (également 4.5.x < 4.5.12, 4.6.x < 4.6.5, 5.1.x < 5.1.9, 5.3.x < 5.3.7) |
| Corrigé | 5.2.14, 5.3.7, 5.1.9, 4.6.5, 4.5.12 |
| Auth | aucune |
| Licence | GNU Affero GPL v3.0 |
| Labo | 127.0.0.1 uniquement |
Une application qui transmet des données de requête à func()->cast(..., $type) (ou aux trois autres) permet à l'appelant de fermer le CAST et d'UNION ce qu'il veut. Le labo divulgue notes.body. Il s'agit d'une injection SQL dans le constructeur de requêtes CakePHP, pas dans le jsonpath de Postgres.
Le GHSA nommait quatre méthodes. J'ai lu cast, puis j'ai construit une application sqlite qui transmet le GET à celle-ci.
Le GET / par défaut est CAST(body AS INTEGER) et [{"v":0}]. C'est le produit qui fonctionne. Le GET d'injection doit placer un fragment dans sql= et renvoyer POCWitness79752.
Fausses pistes : composer 500 parce que l'image a sauté composer install ; extraire le témoin du code source PHP par grep ; sql= toujours seulement CAST(body AS INTEGER) après le GET d'injection.
Port 8088. cakephp/database 5.2.13. Application de labo sous lab/lab-www. sqlite notes.body = POCWitness79752.
Cible uniquement 127.0.0.1:8088 (ou la boucle locale que vous avez liée).
cd lab
docker compose up --force-recreate
python3 ../CVE-2026-79752-Abraxas-Labs.py
Témoin : POCWitness79752 dans le corps HTTP et sql= affiche le fragment injecté, pas seulement CAST(body AS INTEGER).
Façons d'échouer sans rien apprendre :
sql=Mettez à jour CakePHP vers 5.2.14 (ou 5.3.7 / 5.1.9 / 4.6.5 / 4.5.12). Relancez CVE-2026-79752-Abraxas-Labs.py contre la version corrigée : le fragment injecté ne doit pas apparaître dans sql=.
github.com/cakephp/cakephp/commit/3349584ca3a891afaff2dbc324d6b1c09fb880f0
github.com/cakephp/cakephp/commit/3f4d13ea4280067f3381ecf935a8bef5b7cdcc2e
github.com/cakephp/cakephp/commit/79e1d6bc6f3a50fa01805579076a02c77370c676
github.com/cakephp/cakephp/commit/8699d6f38e25fe46fcc24f2b698809948e71ad7d
github.com/cakephp/cakephp/commit/ab608711674ac662af7315c5cdf1e0fbe2000e45
github.com/cakephp/cakephp/security/advisories/GHSA-vjqc-q4mp-2rvf
github.com/CVEProject/cvelistV5/tree/main/cves/2026/79xxx/CVE-2026-79752.json
Abraxas Labs : abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. Voir LICENSE.
Le client communique avec la boucle locale. Son utilisation contre des systèmes qui ne vous appartiennent pas n'est pas autorisée par Abraxas Labs. Aucune garantie.