침해사고분석팀ㅣ2022.07.05
보안 동향 ㅣ AstraLocker 랜섬웨어 종료 및 복호화 해제
침해사고분석팀ㅣ2022.07.05
침해사고분석팀ㅣ2022.07.04
침해사고분석팀ㅣ2022.07.04
침해사고분석팀ㅣ2022.07.01
취약점 정보[CVE-2021-32789] Woocommerce Blocks SQL Injection | ||||
작성일 | 2022-02-04 | 조회 | 13429 | |
---|---|---|---|---|
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 |