
CVE-2026-9848 is an Unauthenticated SQL Injection (SQLi) vulnerability affecting the WP Ticket (Customer Support Ticket System & Helpdesk) plugin for WordPress up to and including version 6.0.4.
CVE-2026-9848은 WordPress용 WP Ticket(고객 지원 티켓 시스템 및 헬프데스크) 플러그인 6.0.4 이하 버전에 영향을 주는 인증되지 않은 SQL 삽입(SQLi) 취약점입니다. 이 결함은 플러그인이 WordPress 검색 매개변수 s를 가져와 $wpdb->prepare() 또는 적절한 이스케이프 없이 UNION 하위 쿼리 내부의 SQL LIKE 절에 직접 연결하기 때문에 발생합니다. 결과적으로 원격 공격자는 인증 없이 데이터베이스 쿼리를 조작하고 민감한 정보를 추출할 수 있습니다.
| 속성 | 값 |
|---|---|
| 제품 | WP Ticket(고객 지원 티켓 시스템 및 헬프데스크) |
| 영향받는 버전 | ≤ 6.0.4 |
| 수정된 버전 | 6.0.5 |
| 영향받는 구성 요소 | 프런트엔드 검색(s 매개변수) |
플러그인은 wp_ticket_com_posts_request()를 통해 WordPress의 posts_request 필터를 연결합니다. 인증되지 않은 프런트엔드 검색 중에 결국 emd_author_search_results()를 호출하며, 이 함수는 검색 매개변수를 읽습니다:
$query->query_vars['s']
이 시점에서 WordPress는 wp_unslash()를 사용하여 매직 쿼트를 이미 제거했습니다. 플러그인은 SQL 문을 안전하게 매개변수화하는 대신 원시 사용자 입력을 UNION 하위 쿼리 내의 SQL LIKE 절에 직접 연결합니다.
개념적으로:
User searches website
│
▼
Search parameter "s" received
│
▼
Plugin concatenates value into SQL query
│
▼
No $wpdb->prepare()
│
▼
Database executes modified query
취약점은 신뢰할 수 없는 입력이 매개변수화된 쿼리 대신 문자열 연결을 통해 SQL에 포함되기 때문에 존재합니다.
취약점의 핵심은 플러그인이 기본 SQL 쿼리를 구성하는 방식입니다:
sql
SELECT * FROM wp_posts
WHERE post_title LIKE '%[attacker's input]%'
UNION [attacker's injected SQL]
Attacker
│
▼
Submits a crafted search request
│
▼
WordPress passes the "s" parameter
│
▼
WP Ticket builds SQL query using concatenation
│
▼
Database executes injected SQL
│
▼
Sensitive database information may be disclosed
일반 방문자가 웹사이트 검색을 수행합니다:
GET /?s=printer
플러그인은 s 매개변수의 값을 티켓 관련 정보를 검색하는 SQL 쿼리에 통합합니다.
플러그인은 매개변수화된 쿼리를 사용하는 대신 검색 값을 SQL 문에 직접 연결하기 때문에 특수하게 조작된 검색 요청이 의도된 SQL 로직을 변경할 수 있습니다. 인증되지 않은 공격자는 이 동작을 악용하여 WordPress 데이터베이스에서 사용자 이름이나 기타 저장된 데이터와 같은 민감한 정보를 검색할 수 있습니다. 정확한 결과는 애플리케이션 구성과 데이터베이스 권한에 따라 달라집니다. 이제 공격자는 s 매개변수를 조작하여 자신만의 SQL을 주입할 수 있습니다. 예를 들어 다음과 같이 입력할 수 있습니다:
' UNION SELECT user_login, user_pass FROM wp_users -- -
그러면 최종 쿼리는 다음과 같이 됩니다:
SELECT * FROM wp_posts WHERE post_title LIKE '%' UNION SELECT user_login, user_pass FROM wp_users -- -%'
성공적으로 악용될 경우 공격자는 다음을 수행할 수 있습니다:
| 지표 | 점수 |
|---|---|
| CVSS v3.1 (Wordfence CNA) | 7.5 (높음) |
NVD는 아직 자체 CVSS 평가를 게시하지 않았습니다.
참고: 공급업체는 완전한 취약 구현을 공개하지 않았습니다. 다음은 취약한 코딩 패턴을 보여줍니다.
$search = $query->query_vars['s'];
$sql = "
SELECT *
FROM tickets
WHERE title LIKE '%" . $search . "%'
";
$wpdb->get_results($sql);
SQL 문은 사용자 제어 입력을 쿼리 문자열에 직접 연결하여 구성됩니다. 입력이 매개변수화되거나 이스케이프되지 않으므로 SQL 문의 구조를 변경할 수 있습니다.
$search = $query->query_vars['s'];
$sql = $wpdb->prepare(
"SELECT *
FROM tickets
WHERE title LIKE %s",
'%' . $search . '%'
);
$wpdb->get_results($sql);
$wpdb->prepare()를 사용하면 SQL 구문과 사용자 입력이 분리됩니다. 데이터베이스는 검색 값을 실행 가능한 SQL이 아닌 데이터로 취급하므로 공격자가 쿼리 구조를 수정할 수 없습니다. WP Ticket 6.0.5의 공식 수정은 취약한 쿼리 구성을 적절히 매개변수화된 구현으로 대체합니다.