🇰🇷 한글 설명
WordPress용 Wild Apricot Login 플러그인 1.0.18 이하 버전에는 SSO 로그인 시 WildApricot 연락처 매핑이 없을 때 네트워크 전역에서 이메일로 WordPress 사용자를 조회하고, 소유권 검증 없이 해당 사용자의 인증 쿠키를 발급하는 인증 우회 취약점이 존재합니다. 이를 악용하면 공격자가 대상 관리자의 이메일과 일치하는 WildApricot 연락처로 인증하여 관리자 권한을 탈취할 수 있습니다.
💡 쉬운 설명
이 플러그인은 소셜 로그인 시 이메일 주소만 보고 기존 WordPress 관리자 계정에 로그인시켜 줍니다. 공격자가 관리자와 같은 이메일을 가진 회원 계정을 만들면 비밀번호 없이도 관리자로 접속할 수 있습니다.
🇺🇸 원문 (English)
The Wild Apricot Login plugin for WordPress is vulnerable to Authentication Bypass via SSO Email-Collision Account Binding in all versions up to, and including, 1.0.18. When no WildApricot contact-ID mapping is found for an incoming SSO login, the plugin falls back to a network-global `get_user_by('email', ...)` lookup in `Module.php` to resolve a WordPress user, then `UserSynchronizer::syncWaContact()` binds and `Controller::login()` issues a session cookie via `wp_set_auth_cookie()` for that resolved user — both guarded only by `is_super_admin()` — without ever requiring proof of ownership of the matched WordPress account such as a password, local account-linking confirmation, inbox verification, or administrator approval. This makes it possible for attackers with custom-level WildApricot membership access to authenticate as an existing WordPress subsite administrator on a path-based Multisite network, obtaining a valid network-global authentication cookie for the victim without their credentials. Exploitation requires that the attacker control a WildApricot contact whose email address matches the target WordPress administrator's email — achievable via a public zero-fee membership application on the connected WildApricot organization — and that they complete the SSO flow on any subsite where Wild Apricot Login is active; because WordPress user identities and authentication cookies are network-global, the cookie issued on that subsite is equally valid on any other subsite where the victim user holds an administrator role.
📍 영향받는 시스템
WordPress Wild Apricot Login 플러그인 1.0.18 이하 버전 (Multisite 네트워크 포함)
⚔️ 공격 벡터
관리자 이메일과 동일한 WildApricot 회원 계정을 생성한 뒤 SSO 로그인을 수행하여 관리자 세션 쿠키를 획득
🛡️ 대응 방법
플러그인을 최신 버전으로 업데이트하고, 업데이트 전까지 플러그인을 비활성화하거나 WildApricot 가입 승인 절차를 강화
🔧 검증 코드
출력된 버전이 1.0.18 이하이면 취약하므로 1.0.19 이상으로 업데이트가 필요하며, 명령이 결과를 내지 않으면 플러그인이 설치되지 않은 것입니다.
wp plugin get wild-apricot-login --field=version 2>/dev/null || grep -m1 'Version' wp-content/plugins/wild-apricot-login/*.php 2>/dev/null