Vulnerability in WP-Ban allows visitors to bypass the IP blacklist in some configurations

Score Vector Complexity Authentication Confidentiality Integrity Availability
5
Medium
Network Low None Partial None None

You can read more about CVSS base scores on Wikipedia or in the CVSS specification.

Vulnerability

This plugin allows blacklisting users based on their IP address, however it takes the IP address from the X-Forwarded-For header if available.

Not all Web server configurations will strip or replace X-Forwarded-For headers – in which case the IP ban can be bypassed by sending this header. This plugin therefore only works in certain configurations, but does not warn admins of this fact.

Proof of concept

  • Visit http://localhost/wp-admin/admin.php?page=wp-ban/ban-options.php
  • Set “Banned IPs” to “127.0.0.1”
  • Execute “curl http://localhost/" and see the “You Are Banned” message
  • Execute “curl http://localhost/ -H 'X-Forwarded-For: 999.999.999.999'" and see that it displays the page

Note that this will not work if your Web server sets or strips X-Forwarded-For headers.

(To remove the IP blacklist run this SQL: “delete from wp_options where option_name='banned_ips';")

Mitigation/further actions

Upgrade to version 1.6.4 or later.

If a reverse-proxy is used, check the “I am using a reverse proxy” box in the plugin settings, and ensure that X-Forwarded-For headers are being set even if the request already contains an X-Forwarded-For header.