在针对论文 https://hdl.handle.net/10316/118126 和 https://hdl.handle.net/10316/118059 的调查过程中,发现Piwigo应用程序存在一个新漏洞。该漏洞源于在以下页面的过滤搜索中某些参数缺乏消毒处理:HOST/admin.php?page=user_list。
具体来说,Piwigo 13.8.0及更早版本在参数max_level和min_register上存在SQL注入漏洞。这些参数用于include\ws_functions\pwg.users.php文件中的ws_user_gerList函数,而该函数被ws.php文件调用,可在/admin.php?page=user_list页面以高级方式搜索用户。这可能导致通过操纵SQL查询来实现“代码执行”和“信息泄露”等后果,因此这些参数在使用于任何SQL查询之前必须进行消毒。该漏洞影响12.2.0版本,并可能影响未来版本,因为13.8.0版本已报告存在类似漏洞。
上述参数(max_level和min_register)被分组到一个变量中,该变量将在执行SQL查询时使用它们:

首先进入 HOST/admin.php?page=user_list 页面

通过Firefox发送的请求中,我们可以看到存在多个参数

如果我们操纵参数max_level和min_register以包含一个引号,然后重新发送请求,将出现MySQL错误(甚至显示执行的SQL查询),这证明了这两个字段存在SQL注入漏洞。
'max_level'

'min_register'

截至目前,开发者已针对此问题实施了一个修复方案,该方案采用白名单方法,如 https://github.com/Piwigo/Piwigo/issues/2197 所述。当然,这并不是最佳解决方案,更好的方式是添加参数化查询,但由于开发者提到的后勤原因无法实现,建议使用Web应用防火墙以增加一层额外的保护。