wp_login_spike
Severity: Warning
Signal: auth.attempt — high volume of login attempts in a short window
What this signal means
A high volume of login attempts hit your site in a short window. This covers both successful and failed attempts, catching credential stuffing attacks and login floods that might use valid credentials.
What surprise this prevents
A credential stuffing attack succeeding quietly — valid credentials from a data breach being tested against your login page while the volume appears routine.
Why it matters
Unlike wp_brute_force_login which focuses on failed attempts, this alert catches volume regardless of outcome. A spike with many successes could indicate a credential stuffing attack using leaked passwords.
Investigate
View entity alerts in Logystera →
In Logystera, filter auth.attempt signals:
- How many were
success: truevssuccess: false? - Are the attempts from one IP or many IPs?
- Are they targeting one username hash or many?
Recommended actions
-
Check for successful logins from unknown IPs. Go to Users → All Users and check the Last Login date for admin accounts. Or use a user sessions plugin.
-
Rate-limit and CAPTCHA the login page. Plugins like Limit Login Attempts Reloaded or WP Cerber add rate limiting and CAPTCHA.
-
Block at the edge. If you use Cloudflare, enable Bot Fight Mode or create a WAF rule to challenge
/wp-login.phpfor non-whitelisted IPs. -
Disable XML-RPC — it allows multiple login attempts per request, multiplying the effective attack rate:
php add_filter( 'xmlrpc_enabled', '__return_false' ); -
Implement two-factor authentication for all admin accounts.
When to safely ignore
A login spike coinciding with a marketing campaign, newsletter send, or public announcement is expected. High login volume from known user IPs immediately after a prominent content publication is normal traffic, not an attack signal.
Check whether success: true dominates the spike — successful logins from your regular user base during a traffic event require no action.
Signal reference
{
"event_type": "auth.attempt",
"payload": {
"success": true,
"username_hash": "f1e2d3...",
"username_len": 8
},
"labels": {
"actor": { "user_id": 0, "ip": "198.51.100.5" }
}
}