You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The server responds with the contents of `wp-config.php`, leaking DB credentials and auth keys.
768
768
769
+
## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
770
+
771
+
Many themes/plugins ship "social login" helpers exposed via admin-ajax.php. If an unauthenticated AJAX action (wp_ajax_nopriv_...) trusts client-supplied identifiers when provider data is missing and then calls wp_set_auth_cookie(), this becomes a full authentication bypass.
772
+
773
+
Typical flawed pattern (simplified)
774
+
775
+
```php
776
+
public function check_login() {
777
+
// ... request parsing ...
778
+
switch ($_POST['using']) {
779
+
case 'fb': /* set $user_email from verified Facebook token */ break;
780
+
case 'google': /* set $user_email from verified Google token */ break;
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
832
+
- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated.
833
+
834
+
Finding the action name
835
+
836
+
- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php).
837
+
- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers.
838
+
839
+
Detection checklist
840
+
841
+
- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=<email>.
842
+
- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent.
843
+
844
+
Hardening
845
+
846
+
- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID.
847
+
- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary.
848
+
- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id).
849
+
- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed.
850
+
851
+
Patched behaviour (Jobmonster 4.8.0)
852
+
853
+
- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']).
854
+
769
855
## References
770
856
771
857
-[Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
@@ -778,4 +864,6 @@ The server responds with the contents of `wp-config.php`, leaking DB credentials
778
864
-[Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/)
779
865
-[Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability)
780
866
867
+
-[Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/)
0 commit comments