🇰🇷 한글 설명
WP Social Login and Register Social Counter 플러그인 3.2.2 이하 버전에는 소셜 로그인 REST 콜백이 이메일 문자열만으로 기존 WordPress 계정을 찾아 비밀번호 검증 없이 인증 쿠키를 발급하는 인증 우회 취약점이 존재합니다. 이로 인해 인증되지 않은 공격자가 관리자를 포함한 기존 사용자로 로그인할 수 있습니다.
💡 쉬운 설명
공격자가 피해자와 같은 이메일 주소를 가진 페이스북이나 트위터 계정으로 로그인하면, 사이트는 비밀번호 없이 그 계정 주인으로 인식해 접속을 허용합니다. 관리자 계정도 이런 방식으로 탈취될 수 있습니다.
🇺🇸 원문 (English)
The Wp Social Login and Register Social Counter plugin for WordPress is vulnerable to Authentication Bypass in all versions up to, and including, 3.2.2. This is due to the social login REST callback registered at `/wp-json/wslu-social-login/type/{provider}/` with `permission_callback => __return_true` locating an existing WordPress account solely by the email string returned from the OAuth provider and calling `wp_set_auth_cookie()` without a password check, while the only verification guard — `!empty($getProfile->emailVerified)` in `inc/admin-create-user.php` — is a no-op for the bundled Hybridauth Facebook and Twitter adapters, both of which assign the raw email string rather than a boolean verified flag to `emailVerified`. This makes it possible for unauthenticated attackers to obtain a fully authenticated session as any existing WordPress user, including Administrators, whose registered email address can be presented through a configured Facebook or Twitter login on the target site. Exploitation requires only that the attacker control an OAuth account whose provider-returned email matches the target account's registered WordPress email address; no local credentials, nonce, or prior foothold is needed.
📍 영향받는 시스템
WordPress용 WP Social Login and Register Social Counter 플러그인 3.2.2 이하 전 버전
⚔️ 공격 벡터
공격자가 대상 사이트 관리자의 이메일과 동일한 이메일을 가진 Facebook/Twitter OAuth 계정으로 소셜 로그인 엔드포인트를 호출해 인증 없이 세션을 획득
🛡️ 대응 방법
플러그인을 최신 버전(3.2.2 초과)으로 업데이트하거나, 수정 전까지 플러그인을 비활성화하고 관리자 계정 이메일과 세션을 점검
🔧 검증 코드
출력된 버전이 3.2.2 이하이면 취약하므로 즉시 업데이트가 필요하고, 버전 정보를 얻지 못하면 플러그인 설치 경로를 직접 확인해야 합니다.
wp plugin get wp-social-login-and-register-social-counter --field=version 2>/dev/null || grep -m1 'Version:' $(find /var/www -path '*wp-social*' -name '*.php' 2>/dev/null | head -1)