Wins Security Information

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보[CVE-2021-32789] Woocommerce Blocks SQL Injection
작성일 2022-02-04 조회 13429

WooCommerce Blocks – 워드프레스 플러그인 | WordPress.org 한국어

 

 

WordPress의 Woocommerce 플러그인에 SQL Injection 취약점이 존재합니다.

 

해당 취약점은 wc/store/products/collection-data API 경로에서 calculate_attribute_counts[][taxonomy] 매개 변수에 대한 부적절한 유효성 검사로 인해 발생합니다. 원격의 공격자는 악의적으로 조작된 SQL 쿼리를 전송하여 공격할 수 있습니다. 

 

공격 성공 시, 임의의 정보가 유출될 수 있습니다. 

 

 

취약점 설명

 

NVD - CVE-2021-32789

CVSS v2.0 Severity and Metrics:

Base Score: 5.0 MEDIUM

 

 

 

[그림1. NVD 내역]

 

 

 

취약점 분석

 

해당 취약점은 src/StoreApi/Utilities/ 경로에 있는 ProductQueryFilters.php에서 calculate_attribute_counts 변수에 대한 부적절한 유효성 검사로 인해 발생합니다.

 

 

 

[그림 2. src/StoreApi/Utilities/ProductQueryFilters.php 패치 전]

 

 

[그림 2]를 보면 패치 이전에는 'wc-sanitize_taxonomy_name' 함수를 이용하여 calculate_attribute_counts 변수의 attributes를 검증하는 것을 볼 수 있습니다. 'wc-sanitize_taxonomy_name' 함수는 곧 attributes의 값들을 url decoding하고 그 값을 sanitize_title() 함수에 넣고 호출합니다. sanitize_title()함수는 sanitize_title_with_dashes()함수를 호출합니다. 이 때, sanitize_title_with_dashes()함수는 url decoding 된 attributes 값에서  , &ndash 등 HTML Entity가 있는지 확인하여 있다면 '-'를 추가합니다. 

 

[그림 2]를 보면 calculate_attribute_counts가 attributes를 검증하고 난 뒤, SQL 쿼리에 들어가 실행하는 것을 볼 수 있습니다. 이 때, 입력 값에 대해 SQL Injection에 대한 검증이 이뤄지지 않아 SQL Injection이 일어날 수 있습니다. 

 

 

 

[그림 3. wc-santize_taxnomoy_name 함수]

 

 

아래 [그림 4]는 해당 취약점에 대한 패치를 결과 입니다. wc_sanitize_taxonomy_name를 통해 calculate_attribute_counts 값의 attribute를 검증하고 난 뒤, esc_sql() 함수를 이용하여 SQL 쿼리에 대한 검증이 추가된 것을 볼 수 있습니다. 

 

[그림 4. 취약한 부분 패치 비교]

 

 

 

 

취약한 버전은 2.5.16 이전 버전으로 이후 버전에서는 패치가 되었습니다. 

 

 

 

 

공격 분석 및 테스트

 

CVE-2021-32789의 공격 패킷은 다음과 같습니다.

 

 

[그림 5. 공격 패킷]

 

 

 

취약점 대응 방안

 

1. 최신 버전 사용

 

해당 벤더사에서 발표한 최신의 버전으로 업데이트한다.

https://ko.wordpress.org/plugins/woocommerce/

 

 

2. WINS Sniper 제품군 대응 방안

 

[5903] WordPress Plugin Woocommerce SQL Injection

 

첨부파일 첨부파일이 없습니다.
태그 CVE-2021-32789  Woocommerce Blocks