
Piwigo 13.8.0 y versiones anteriores es vulnerable a inyección SQL en los parámetros max_level y min_register. Estos parámetros se utilizan en la función ws_user_gerList del archivo include\ws_functions\pwg.users.php y esta misma función, que es llamada por el archivo ws.php en algún momento, puede ser utilizada para buscar usuarios de forma avanzada en /admin.php?page=user_list.
Mientras investigaba para las tesis https://hdl.handle.net/10316/118126 y https://hdl.handle.net/10316/118059 se descubrió una nueva vulnerabilidad en la aplicación Piwigo. Esta vulnerabilidad proviene de la falta de sanitización de algunos parámetros en una búsqueda filtrada desde el siguiente punto, HOST/admin.php?page=user_list.
Más específicamente, Piwigo 13.8.0 y anteriores es vulnerable a Inyección SQL en los parámetros max_level y min_register. Estos parámetros se utilizan en la función ws_user_gerList del archivo include\ws_functions\pwg.users.php y esta misma función, que es llamada por el archivo ws.php en algún punto, puede ser utilizada para buscar usuarios de manera avanzada en /admin.php?page=user_list. Esto podría llevar a varias consecuencias como "Ejecución de Código" y "Divulgación de Información" al manipular las consultas SQL, por lo que estos parámetros deben ser sanitizados antes de ser utilizados en cualquier consulta SQL. Esto afecta a la versión 12.2.0 y podría afectar a versiones futuras, ya que existe una vulnerabilidad similar reportada en la versión 13.8.0.
Los parámetros mencionados (max_level y min_register) se agrupan en una variable que los utilizará en la ejecución de una consulta SQL:

Primero ingrese en la página HOST/admin.php?page=user_list

Siguiendo la solicitud enviada a través de Firefox, podemos ver que existen varios parámetros

Si manipulamos los parámetros 'max_level' y 'min_register' para incluir una comilla y luego reenviamos la solicitud, aparecerá un error de MYSQL (incluso mostrando la consulta SQL ejecutada), lo que demuestra la existencia de una vulnerabilidad de Inyección SQL en ambos campos.
'max_level'

'min_register'

A día de hoy, los desarrolladores implementaron una solución para este problema que es simplemente un enfoque de lista blanca, como se menciona en: https://github.com/Piwigo/Piwigo/issues/2197. Por supuesto, esta no es la mejor solución, ya que sería mejor agregar consultas parametrizadas, pero dado que no es posible (debido a preocupaciones logísticas mencionadas por los desarrolladores), es recomendable usar un Firewall de Aplicaciones Web para agregar una capa adicional de protección.