
CVE-2023-3460에 대한 익스플로잇 및 분석, Ultimate Member WordPress 플러그인의 치명적인 권한 상승 취약점으로, 재현 환경 및 완화 지침을 포함합니다.
| CVE ID | CVSS 점수 | 발견일 | 영향받는 플러그인 | 취약점 유형 |
|---|---|---|---|---|
| CVE-2023-3460 | 2023-04-07 | Ultimate Member | 무단 관리자 액세스 |
본 연구는 WordPress의 "Ultimate Member" 플러그인에 영향을 미치는 치명적인 취약점인 CVE¹-2023-3460에 초점을 맞춥니다. 이 취약점은 무단 권한 상승을 허용합니다. 이 플러그인은 WordPress 사이트에서 프로필 관리를 위해 널리 사용됩니다. 이 취약점은 공격자가 관리자 권한을 획득하여 사이트를 완전히 제어할 수 있게 하므로 심각한 위험을 초래합니다. 그렇기 때문에 이 결함은 NIST²에 의해 CVSS 척도에서 치명적이며 9.1점으로 분류되었습니다.
CVE-2023-3460은 플러그인의 역할 및 권한 관리 결함을 악용합니다. WordPress에서 WP_Capabilities³ 함수는 사용자의 역할과 권한을 관리하는 데 사용됩니다. 이 함수는 관리자가 각 사용자 역할에 대해 특정 권한을 정의할 수 있게 합니다. 그러나 이 함수의 잘못된 사용은 권한 상승 취약점으로 이어질 수 있습니다.
Ultimate Member의 경우, 이 취약점은 공격자가 WP 권한 검사를 우회하고 사이트에 대한 관리자 수준의 액세스를 얻을 수 있게 합니다. 이 플러그인은 사용자가 조작해서는 안 되는 사전 정의된 사용자 메타데이터 키 목록을 사용하여 작동합니다. 그러나 차단 목록에 기반한 이러한 보안 접근 방식은 우회 가능성을 남겨두기 때문에 종종 불충분합니다.
WordPress는 wp_capabilities라는 구조를 통해 사용자의 역할과 권한을 관리합니다. 이 구조는 사용자에게 부여된 다양한 역할과 권한의 직렬화된 표현입니다. 예를 들어, 관리자는 편집자나 기여자와는 다른 권한 집합을 갖습니다. 이러한 권한은 wp_usermeta 테이블에 직렬화된 배열 형태로 WordPress 데이터베이스에 저장됩니다.
CVE-2023-3460 결함은 Ultimate Member의 역할 및 권한 관리 구현에서 비롯됩니다. 이 플러그인은 사용자가 조작해서는 안 되는 사전 정의된 사용자 메타데이터 키 목록을 사용하여 작동합니다. 이 목록은 계정 생성 시 사용자가 이러한 키를 저장하려고 시도하는지 확인하는 데 사용됩니다. 이 접근 방식은 일반적인 보안 안티패턴으로, 알려진 유해 입력을 차단하는 것(차단 목록)이 직관적으로 보일 수 있지만 예상보다 복잡하고 종종 보안 우회의 여지를 남깁니다.
여기서 Ultimate Member는 사용자 등록 시 제출된 메타데이터에 대한 불충분한 검증을 사용합니다. 이 플러그인은 사용자가 제출한 메타데이터가 허용되는지 확인하기 위해 is_metakey_banned이라는 함수를 사용합니다. 이 함수는 제출된 메타데이터가 금지된 메타데이터 목록에 있는지 확인합니다. 만약 그렇다면 함수는 true를 반환하고 사용자 등록이 차단됩니다. 그렇지 않으면 함수는 false를 반환하고 사용자 등록이 허용됩니다.
그러나 WordPress는 일부 악센트 문자를 기본 문자로 허용합니다. 사용자가 악센트 문자를 포함한 메타데이터를 제출하면 is_metakey_banned 함수가 이를 감지하지 못하고 사용자 등록이 허용됩니다.
Ultimate Member 플러그인은 소규모 개인 블로그부터 대규모 전자상거래 사이트까지 다양한 환경에서 널리 사용됩니다. 최종 사용자나 사이트 관리자의 컴퓨터 보안 역량에 대해 특정한 가정을 할 수 없습니다.
WordPress 사이트를 호스팅하는 서버는 일반적으로 안전한 데이터 센터에 있습니다. 개인 사이트의 경우 물리적 보안은 사용자의 개별 환경에 따라 달라집니다.
Ultimate Member 플러그인이 공식 지침에 따라 올바르게 설치 및 구성되었다고 가정합니다. WordPress 사이트는 기본 보안 조치가 적용된 상태로 최신 상태로 유지된다고 가정합니다.
7.5 보안 기능
관리자로서 이 취약점과 관련된 위험을 완화하기 위해 취할 수 있는 구체적인 조치는 다음과 같습니다.
사용자 입력 검증: 특히 wp_capabilities와 같은 메타데이터를 수정하는 모든 사용자 입력을 확인하기 위해 서버 측 검증을 구현합니다. 차단 목록 대신 정규식 또는 검증 목록(허용 목록)을 사용하여 입력을 제어합니다.
CAPTCHA 및 요청 속도 제한: 자동화된 공격을 방지하기 위해 등록 양식에 CAPTCHA 및 요청 속도 제한을 통합합니다. 클라이언트 측 검증: 클라이언트 측 검증만으로는 충분하지 않지만 자동화된 공격을 방지하고 사용자 경험을 개선하는 데 도움이 될 수 있습니다.
로그 모니터링: 사용자 역할의 의심스러운 변경 또는 메타데이터 주입 시도를 감지하기 위한 로그 모니터링 시스템을 구축합니다. 이는 로그 분석 도구를 사용하여 수행할 수 있습니다.
웹 애플리케이션 방화벽(WAF): 알려진 공격과 알려지지 않은 공격(악성 코드 주입 공격 포함)을 차단하도록 WAF⁴를 구성합니다. 침입 탐지/방지 시스템(IDS/IPS)⁵: 취약점 악용 시도를 탐지하기 위해 IDS/IPS를 구축합니다.
사용자 역할 검토: 비정상적인 권한 상승을 탐지하기 위해 사용자에게 할당된 역할을 정기적으로 검토합니다. 권한 제한: 새 사용자에게 기본적으로 부여되는 권한을 제한하고 최소 권한 원칙에 따라 높은 역할 할당에 대한 관리자 검증을 요구합니다. 이 원칙에 대한 자세한 내용은 여기에서 확인하세요.
신속한 업데이트 적용: 플러그인과 WordPress 자체에 대한 정기적인 보안 업데이트를 수행합니다.
개발자에게 앞서 언급한 보안 모범 사례를 교육하고 잘못된 구현의 위험/영향에 대한 인식을 높입니다.
결함 악용을 시작하는 데 도움이 되는 Makefile이 제공됩니다. 다음과 같이 사용할 수 있습니다:
make up 필요한 모든 설치와 함께 WordPress를 시작합니다. 대기 시간 후 WordPress 서버가 시작되고 구성되며 Ultimate Member 플러그인 버전 2.6.5가 설치됩니다.
그런 다음 로그인 페이지에서 admin:password 자격 증명으로 WordPress에 로그인할 수 있습니다. 사용자 탭으로 이동하면
admin 사용자만 존재하는 것을 확인할 수 있습니다.

참고: docker-compose가 있고 docker compose가 없는 경우 Makefile을 그에 따라 수정할 수 있습니다(변수 DOCKER_COMPOSE= docker-compose).
그런 다음 결함 악용을 시작할 수 있습니다:
make exploit
그런 다음 익스플로잇이 제공한 자격 증명으로 로그인 페이지에서 WordPress에 로그인하고 사용자 탭에서 Administrator 역할을 가진 새 사용자가 생성된 것을 확인할 수 있습니다.

make down WordPress 서버를 중지하고 데이터를 삭제합니다.
make exploit는 exploit.py 스크립트를 실행합니다. 이 스크립트는 여러 단계로 작동합니다:
익스플로잇 기술 세부 사항1. 취약점 확인: 악용을 진행하기 전에 스크립트는 대상 사이트에 설치된 Ultimate Member 플러그인 버전이 취약한지, 즉 2.6.7 미만인지 확인합니다.
2. 보안 Nonce 획득: 스크립트는 대상 사이트의 등록 페이지에서 보안 nonce³를 획득합니다. 이 nonce는 등록 요청이 WordPress에서 수락되기 위해 필요합니다. nonce는 등록 페이지의 HTML 코드를 분석하여 획득됩니다.
3. 취약점 악용: 그런 다음 스크립트는 조작된 매개변수(wp_càpabilities[administrator]=1)를 포함한 POST 요청을 등록 페이지에 제출합니다. 이 매개변수는 악센트 문자(à)를 사용하여 플러그인의 보안 검사를 우회하고 데이터를 잘못 직렬화하여 새로 생성된 사용자에게 관리자 역할을 부여합니다.
4. 익스플로잇 확인: 요청 전송 후 스크립트는 서버 응답을 분석하여 작업이 성공했는지 확인합니다.
| 위협 | B1 (사용자 데이터 기밀성) | B2 (웹사이트 무결성) | B3 (Ultimate Member 플러그인 무결성) |
|---|
| M1 무단 액세스 | X | X | X |
| M2 악성 코드 주입 | X | X | |
| M3 데이터 유출 | X | ||
| M4 평판 손상 | X |
| 이름 | 링크 |
|---|