
Proof-of-concept для CVE-2024-43018: SQL-инъекция в Piwigo 13.8.0 через несанитизированные параметры max_level и min_register, что приводит к раскрытию информации и потенциальному выполнению кода.
В ходе исследования для диссертации https://hdl.handle.net/10316/118126 и https://hdl.handle.net/10316/118059 была обнаружена новая уязвимость в приложении Piwigo. Эта уязвимость возникает из-за отсутствия санитизации некоторых параметров при фильтрованном поиске из следующей точки: HOST/admin.php?page=user_list.
Более конкретно, Piwigo 13.8.0 и ниже уязвим для SQL-инъекции в параметрах max_level и min_register. Эти параметры используются в функции ws_user_gerList из файла include\ws_functions\pwg.users.php, и эта же функция, вызываемая файлом 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'

На сегодняшний день разработчики внедрили исправление этой проблемы, которое представляет собой простой подход белого списка (whitelist), как упоминается в: https://github.com/Piwigo/Piwigo/issues/2197. Конечно, это не лучшее решение, так как было бы лучше добавить параметризованные запросы, но поскольку это невозможно (из-за логистических проблем, упомянутых разработчиками), рекомендуется использовать брандмауэр веб-приложений (WAF) для добавления дополнительного уровня защиты.