
버전 < 3.3.10에 영향을 주는 SQL 인젝션 CVE-2019-8979를 실험해볼 수 있는 Docker 컨테이너 기반 koseven hello world
CVE-2019-8979(3.3.10 미만 버전에 영향을 미치는 SQL 인젝션 취약점)를 실험하기 위한 Docker 기반 https://github.com/koseven/koseven[koseven] hello world입니다. 이 hello world는 실제로 https://koseven.dev/documentation/orm/examples/simple[문서]에서 가져온 것으로, Docker 부분과 PoC 익스플로잇만 추가했습니다.
= CVE-2019-8979 이 SQL 인젝션 문제는 원래 제3자가 https://github.com/koseven/koseven/issues/323[보고]했으며 2019년 2월 27일 master에서 수정되었지만, 개발자들은 해당 수정 사항이 포함된 새 릴리스를 게시하는 것을 잊었습니다. 그 결과 당시 최신 안정 릴리스였던 2018년 11월 20일에 게시된 https://github.com/koseven/koseven/releases/tag/3.3.9[koseven-3.3.9]는, https://elttam.com[elttam]이 2020년 10월 10일에 이 실수를 발견하고 코어 개발자들에게 비공개로 알린 후 2020년 10월 12일에 https://github.com/koseven/koseven/releases/tag/3.3.10[koseven-3.3.10]이 릴리스될 때까지 취약한 상태로 남아 있었습니다.
= 제한 사항
MySQL에서 current_user(), database() 또는 information_schema의 테이블 및 컬럼 이름과 같은 일부 정보를 얻을 수 있지만, order by 방향 입력에 strtoupper()가 https://github.com/koseven/koseven/blob/3.3.9/modules/database/classes/Kohana/Database/Query/Builder.php#L236[호출]되기 때문에 다른 테이블의 데이터를 검색하지 못할 수도 있습니다.
이는 MySQL이 데이터 디렉터리가 대소문자를 구분하는 파일 시스템에 있는 운영 체제에서 실행될 때 데이터베이스 및 테이블 이름이 대소문자를 구분하기 때문입니다. 그 결과 이 SQLi는 다음 조건에서만 완전히 악용될 수 있습니다:
lower_case_table_names 시스템 변수가 > 0인 경우자세한 내용은 https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html[식별자 대소문자 구분]을 참조하세요.
= 데모