본문 바로가기
Hack/Web

[KVE-2021-0172,0329,0330] YoungCart 1Day 취약점 분석 (SQL Injection)

by Becoming a Hacker 2021. 4. 19.
반응형

KVE에 해당하는 취약점은 SQL Injection을 포함하여 여러 취약점으로 구성되어있지만, SQL Injeciotn에 대해서 먼저 분석을 진행하였습니다.

 

취약점 관련 정보

정보 내용
취약 버전 Young Cart <= 5.4.5.1
패치 버전 Young Cart 5.4.5.2
취약점 종류 SQL Injection
KVE 번호 KVE-2021-0172
KVE-2021-0329
KVE-2021-0330

 

패치 내역(-는 패치 이전 코드, +는  패치 이후 코드)

 

adm/qa_config_update.php

# 추가된 보안 패치 코드1
+ $src_char = array('&', '=');
+ $dst_char = array('&', '〓');
+ $qa_category = str_replace($src_char, $dst_char, $_POST['qa_category']);
+ $qa_category = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*]/", "", $qa_category);

# 추가된 보안 패치 코드2
$sql = " update {$g5['qa_config_table']}
            set qa_title                = '{$_POST['qa_title']}',
-                 qa_category             = '{$_POST['qa_category']}',
+                 qa_category             = '{$qa_category}',
                qa_skin                 = '{$_POST['qa_skin']}',
                qa_mobile_skin          = '{$_POST['qa_mobile_skin']}',
                qa_use_email            = '{$_POST['qa_use_email']}',

 

bbs/qawrite_update.php

# 160 Line
-        @unlink(G5_DATA_PATH.'/qa/'.$write['qa_file'.$i]);
+        @unlink(G5_DATA_PATH.'/qa/'.clean_relative_paths($write['qa_file'.$i]));

# 207 Line
-        @unlink(G5_DATA_PATH.'/qa/'.$write['qa_file'.$i]);
+        @unlink(G5_DATA_PATH.'/qa/'.clean_relative_paths($write['qa_file'.$i]));

# 247 Line
-        $qa_category = $write['qa_category'];
+        $qa_category = addslashes($write['qa_category']);

분석

패치 내역을 분석해본 결과, 관리자 페이지에서 1:1문의 분류에 싱글 쿼터를 포함한 데이터를 저장할 경우 해당 데이터가 이용되는 SQL Query문에서 싱글 쿼터를 쿼리 내 문자열로 인식하지 않아 SQL Injeciton이 발생하는 것을 확인하였습니다.

 

먼저 1:1문의 설정의 분류에서 싱글 쿼터를 포함한 데이터를 저장합니다. 이때 주의해야할 점은 싱글 쿼터 앞에 \가 붙은 동일한 문자열을 한 번 더 입력해줘야 한다는 점입니다. (이를 지키지 않으면 1:1 문의 설정에서 글이 저장 안됨)

 

예시 : 회원|포인트|123'|123\'

1:1문의 설정 저장

 

이후 1:1문의의 분류에서 \가 들어가지 않은 분류를 선택한 뒤, 일반적인 문의 내용을 작성하여 저장합니다.

일반적인 문의 내용 작성 및 저장

 

작성된 문의 게시글을 클릭해서 답변을 입력한 뒤, 답변등록 버튼을 클릭합니다.

답변 저장

 

qa_category에 저장된 싱글 쿼터가 문자열로 인식되지 않아 SQL Injection이 발생하는 것을 확인할 수 있습니다. (Young Cart의 sql_query 함수에서 에러 발생 이유가 노출되도록 설정한 화면입니다.)

SQL Injection

 

더 자세한 Exploit 방법 및 다른 취약점들에 대한 내용은 나중에 추가하도록 하겠습니다.


Reference

sir.kr/yc5_pds/2843

 

[보안패치] 영카트 5.4.5.2 > SIR

** 수정내역 **


게시판 스킨에서 문제가 되는 download attribute 제거
쇼핑몰 테마에서 커뮤니티 사용 안할시 메뉴 html코드 처리
오타 코드 및 잘못된 위치에 있는 코드 수정
PH

sir.kr

 

github.com/gnuboard/youngcart5/commit/4acf51fb49b3ba8ef4b3b6e56d5f3e3cb5b23f17

 

[KVE-2021-0172,0329,0330] 그누보드 다중 취약점 수정 · gnuboard/youngcart5@4acf51f

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files [KVE-2021-0172,0329,0330] 그누보드 다중 취약점 수정 Loading branch information Showing 3 changed files with

github.com

 

댓글