
CVE-2024-43018에 대한 개념 증명: Piwigo 13.8.0에서 살균되지 않은 max_level 및 min_register 매개변수를 통한 SQL 인젝션으로, 정보 노출 및 잠재적 코드 실행을 가능하게 합니다.
논문 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에 언급된 대로 단순히 화이트리스트 방식을 사용하여 이 문제에 대한 수정을 적용했습니다. 물론 매개변수화된 쿼리를 추가하는 것이 더 나은 솔루션이지만, 개발자들이 언급한 물류적 문제로 인해 불가능하므로 추가 보호 계층을 위해 웹 애플리케이션 방화벽을 사용하는 것이 좋습니다.