
Preuve de concept pour CVE-2024-43018: injection SQL dans Piwigo 13.8.0 via les paramètres non nettoyés max_level et min_register, permettant la divulgation d'informations et une exécution de code potentielle.
Lors de l'investigation pour les thèses https://hdl.handle.net/10316/118126 et https://hdl.handle.net/10316/118059, une nouvelle vulnérabilité dans l'application Piwigo a été découverte. Cette vulnérabilité provient du manque de nettoyage de certains paramètres dans une recherche filtrée depuis le point suivant : HOST/admin.php?page=user_list.
Plus précisément, Piwigo 13.8.0 et versions antérieures est vulnérable à une injection SQL dans les paramètres max_level et min_register. Ces paramètres sont utilisés dans la fonction ws_user_gerList du fichier include\ws_functions\pwg.users.php, et cette même fonction, appelée par le fichier ws.php à un moment donné, peut être utilisée pour rechercher des utilisateurs de manière avancée dans /admin.php?page=user_list. Cela pourrait entraîner plusieurs conséquences comme « Exécution de code » et « Divulgation d'informations » en manipulant les requêtes SQL. Par conséquent, ces paramètres doivent être nettoyés avant d'être utilisés dans toute requête SQL. Cela affecte la version 12.2.0 et pourrait affecter les versions futures, car une vulnérabilité similaire a été signalée dans la version 13.8.0.
Les paramètres mentionnés (max_level et min_register) sont regroupés dans une variable qui les utilisera dans l'exécution d'une requête SQL :

Tout d'abord, accédez à la page HOST/admin.php?page=user_list

En suivant la requête envoyée via Firefox, nous pouvons voir qu'il existe plusieurs paramètres

Si nous manipulons les paramètres 'max_level' et 'min_register' afin d'inclure un guillemet puis de renvoyer la requête, une erreur MYSQL apparaîtra (montrant même la requête SQL exécutée), ce qui prouve l'existence d'une vulnérabilité d'injection SQL dans les deux champs.
'max_level'

'min_register'

À ce jour, les développeurs ont mis en place un correctif pour ce problème, qui est simplement une approche de liste blanche, comme mentionné dans : https://github.com/Piwigo/Piwigo/issues/2197. Ce n'est bien sûr pas la meilleure solution, car il serait préférable d'ajouter des requêtes paramétrées, mais comme ce n'est pas possible (pour des raisons logistiques mentionnées par les développeurs), il est conseillé d'utiliser un pare-feu applicatif Web (WAF) afin d'ajouter une couche de protection supplémentaire.