[공격] 분석 — CVE-2026-60137
Critical SQL Injection in WordPress WP_Query's author__not_in parameter requires immediate patching to prevent unauthorized data exfiltration.
📋 요약
- 심각도 medium · CVSS 5.9 · EPSS 0.77974 · 악용난이도 easy · KEV
🔍 공격 기법
- 트리거 조건:
WP_Query클래스의author__not_in파라미터에 전달되는 입력값이 적절히 Sanitise되지 않아 발생. 플러그인이나 테마가 사용자 입력값을 검증 없이 해당 파라미터로 넘길 때 SQLi 트리거 가능. - 공격 단계:
- 정찰: WordPress 버전 확인 및
author__not_in을 사용하는 취약한 플러그인/테마 엔드포인트 탐색. - 초기 접근: HTTP 요청(GET/POST)을 통해 조작된 파라미터 전달. (전제: 입력값이
WP_Query로 전달되는 경로가 존재해야 함) - 실행 및 데이터 획득: Blind SQLi 또는 Error-based SQLi 기법을 사용하여 DB 내부 정보(사용자 해시, 설정값 등) 추출.
- 권한 획득/영향: 유출된 관리자 세션이나 패스워드 해시를 이용해 관리자 권한 탈취 시도.
- 정찰: WordPress 버전 확인 및
- 공격 표면:
- 엔드포인트:
author__not_in파라미터를 처리하는 모든 플러그인 및 테마의 URL/API 경로. - 파라미터:
author__not_in(또는 이를 래핑한 사용자 정의 파라미터).
- 엔드포인트:
- CVSS 벡터 분석:
AV:N(네트워크 원격 공격 가능),AC:H(공격자가 취약한 파라미터를 사용하는 특정 플러그인/테마를 찾아야 하므로 복잡도 높음),PR:N(권한 불필요),UI:N(사용자 상호작용 불필요).
악용 가능성: 본 취약점은 AV:N/PR:N/UI:N 조건으로, 인증되지 않은 외부 공격자가 네트워크를 통해 직접 접근할 수 있는 매우 위험한 공격 표면을 가집니다. 비록 AC:H로 설정되어 있으나, 이는 WordPress 코어 자체의 결함이 특정 플러그인이나 테마가 author__not_in 파라미터에 사용자 입력값을 검증 없이 전달하는 '전제 조건'이 필요하기 때문이며, 실제적으로는 수많은 서드파티 플러그인이 이러한 패턴을 사용하므로 공격 난이도는 사실상 Easy로 판단됩니다. 특히 EPSS 점수가 0.77974로 매우 높고 KEV(Known Exploited Vulnerabilities)에 등재되었다는 점은, 이론적 가능성을 넘어 이미 야생(In-the-wild)에서 자동화된 스캐너를 통해 대규모로 악용되고 있음을 증명합니다. 공격자는 WP_Query 클래스가 호출되는 엔드포인트의 HTTP 요청 파라미터를 정찰하여 author__not_in에 영향을 줄 수 있는 지점을 식별하고, 이를 통해 SQL Injection을 트리거합니다. 결과적으로 데이터베이스 내의 민감 정보 탈취나 관리자 권한 획득으로 이어질 수 있으며, 이는 단순한 코어 패치를 넘어 취약한 구현 방식을 가진 플러그인 체이닝을 통한 실전적 위협입니다.
💥 영향 분석
- 기술적 위험: 데이터베이스 내의 민감 정보 유출(
C:H). 특히wp_users테이블의 관리자 계정 정보, 설정 값 등을 탈취하여 사이트 제어권을 획득할 수 있음. - 비즈니스 영향: 고객 개인정보 유출로 인한 법적 규제(GDPR/개인정보보호법) 위반 및 서비스 신뢰도 하락.
🔗 관련 취약점·체이닝
- 공격 체인:
SQL Injection (CWE-89)$\rightarrow$관리자 계정 정보 유출$\rightarrow$Administrative Access 획득$\rightarrow$임의 코드 실행(RCE) (추정: 테마/플러그인 편집기 이용). - 체이닝 경로: 단순 데이터 조회에 그치지 않고, 탈취한 관리자 권한을 통해 WordPress 대시보드 내 플러그인 설치나 테마 수정을 수행함으로써 서버 전체 제어권으로 확장하는 패턴이 일반적임.
🔎 탐지
- 로그 지표: HTTP Access Log의 Query String 또는 POST Body에서 SQL 예약어 및 특수문자(
',--,UNION,SELECT,SLEEP())가author__not_in관련 파라미터에 포함된 패턴. - 탐지 규칙 예시:
SELECT * FROM http_logs WHERE request_body REGEXP "author__not_in=.*(UNION|SELECT|SLEEP|BENCHMARK)"pattern = /(author__not_in=).*?(['"\s](OR|AND)\s+.*?\s*=\s*.*?)/i(정규식 기반 탐지)
- 오탐 시나리오 및 튜닝: 정상적인 플러그인 요청 중 숫자 배열이 포함된 경우 오탐 가능. 단순 숫자/쉼표 조합은 제외하고 SQL 키워드와 연산자가 결합된 패턴만 정밀 타격하도록 튜닝 필요.
🛡️ 완화 방안
- 즉시(긴급 차단): WAF(Web Application Firewall)에서
author__not_in파라미터에 대한 SQLi 시그니처 기반 차단 정책 적용. (난이도: 저 / 영향: 낮음 / 검증: 공격 페이로드 전송 시 403 응답 확인) - 단기(완화): 취약한
WP_Query를 사용하는 플러그인/테마 일시 비활성화 또는 입력값에 대한 강제 Type Casting(Integer) 처리. (난이도: 중 / 영향: 일부 기능 마비 가능성 / 검증: 해당 기능 동작 여부 확인) - 근본(해결): WordPress 최신 버전으로 업데이트.
- 대상 버전: 6.8 $\rightarrow$ 6.8.6, 6.9 $\rightarrow$ 6.9.5, 7.0 $\rightarrow$ 7.0.2 이상으로 업그레이드.
- (난이도: 저 / 영향: 업데이트 후 호환성 테스트 필요 / 검증:
wp version명령어로 버전 확인)
[분석 근거] 본 리포트는 다중 소스 교차검증을 통해 데이터 일관성이 확인되었으며, EPSS 실측값 0.77974(백분위 0.99527)를 통해 이론적 심각도(CVSS 5.9)와 별개로 실제 악용 가능성이 매우 높음이 입증되었습니다. 특히 KEV 등재 및 exploit=easy 판정에 따라 우선순위를 immediate(24시간 내 대응)로 결정하였습니다.
⚖️ 위험도 / 우선순위
- 조치: immediate (지금 즉시(24h 내))
- 근거: CVSS=5.9 · KEV · EPSS=0.77974 · exploit=easy · in_scope=None