This is an unlocked side door on a shack, not a battering ram against your datacenter
CVE-2025-0233 is an unauthenticated SQL injection in Codezips Project Management System 1.0, specifically in /pages/forms/course.php via the course_name parameter. Public PoC material shows boolean, error-based, and time-based payloads plus a sqlmap invocation, so the bug is real and straightforward to exercise against an exposed instance.
The vendor's HIGH 7.3 is technically defensible in a vacuum, but it overstates enterprise urgency. The big downward pressure is deployment reality: this is a small downloadable PHP/MySQL sample app from Codezips, not a broadly deployed enterprise platform, there is no KEV listing or credible in-the-wild activity, and available impact scoring is only low/low/low for confidentiality, integrity, and availability under the CNA vector.
3 steps from start to impact.
Find a reachable Codezips instance
- A Codezips Project Management System 1.0 instance is actually deployed
- The web app is reachable from the attacker's network position
- The target kept the vulnerable
pages/forms/course.phpendpoint in place
- This product is niche and not commonly present in managed enterprise inventories
- There is no strong public fingerprint for reliable internet-scale enumeration
- Many installations are likely lab, student, or one-off internal deployments
Exploit course_name with sqlmap or hand-built payloads
sqlmap command line. Because privileges and user interaction are both None, a reachable endpoint is enough to start extracting database behavior.- Attacker can send POST requests to
/pages/forms/course.php - Backend database queries are built from unsanitized
course_nameinput
- WAF rules, mod_security, or basic input filtering may block noisy payloads
- Time-based extraction is slow and operationally loud compared with cleaner exploit chains
- Database permissions may limit follow-on write or destructive actions
sqlmap request patterns reasonably well.Read or tamper with application data
- The database account has meaningful read or write permissions
- Useful data actually exists in the application database
- Least-privilege DB users materially reduce what the attacker can touch
- Many deployments are likely low-value demo or classroom datasets
- Pivoting from SQLi to OS-level compromise is not demonstrated here
The supporting signals.
| In-the-wild status | No confirmed active exploitation in the sources reviewed. It is not in CISA KEV, and the available reporting points only to public disclosure and PoC material, not campaigns. |
|---|---|
| Public PoC | Yes. GitHub issue by 1074923869 includes boolean/error/time-based payloads and a sqlmap command; researcher named as qinghe. |
| EPSS | Prompt intel gives 0.00082. A secondary tracker reports roughly 30.23rd percentile, which still lands in the *very low likelihood* bucket relative to the broader CVE population. |
| KEV status | Not listed in the CISA Known Exploited Vulnerabilities Catalog. |
| CVSS reality check | CNA vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L = easy remote reachability, but only low impact across C/I/A. NVD also shows an enriched 9.8 view, but the CNA score matches the described impact better. |
| Affected versions | Codezips Project Management System 1.0 only, affecting /pages/forms/course.php and the course_name parameter. |
| Fixed version | No vendor-fixed version found in the vendor page, CVE record, or referenced advisory trail. Treat this as *patch unavailable* unless you maintain your own code fork. |
| Exposure telemetry | Weak internet-scale visibility. I found no authoritative Shodan/Censys/FOFA fingerprint or host-count source for this product, which itself is a signal that this is not a mainstream externally managed enterprise platform. |
| Disclosure | Published 2025-01-05 via VulDB/CVE; NVD modified 2025-01-10. |
| Product context | Codezips markets this as a free PHP/MySQL source-code project originally posted in August 2020. That sharply lowers expected prevalence in mature enterprise estates. |
noisgate verdict.
The decisive factor is exposure population, not exploit mechanics. This is unauthenticated remote SQLi, but in a fringe downloadable PHP project with weak evidence of real enterprise footprint and no confirmed exploitation pressure.
Why this verdict
- Downgrade for population reality: this is not Exchange, Ivanti, or a common edge product; it is a niche Codezips PHP sample app with likely sparse enterprise deployment.
- Downgrade for threat signal: no KEV listing, no campaign reporting, and a very low EPSS input mean there is little evidence attackers care at scale.
- Hold at MEDIUM because the bug is still clean: it is unauthenticated, remote, public-PoC SQLi, so any exposed instance is trivially testable and should not be ignored if you actually run it.
Why not higher?
To justify HIGH or CRITICAL for a 10,000-host program, you need either broad exposure, active exploitation, or a product that commonly sits on an enterprise edge. This has none of those amplifiers. The exploit path is simple, but the reachable population and likely business blast radius are both narrow.
Why not lower?
This is not paperwork noise. The bug is remotely reachable without auth, exploit details are public, and successful SQLi can still expose or corrupt application data on any live instance. If you have this app anywhere internet-facing, it deserves real ownership even if it is not an enterprise-wide emergency.
What to do — in priority order.
- Restrict reachability — Move the app behind VPN, allowlisted reverse proxy, or internal-only access so unauthenticated internet users cannot hit
/pages/forms/course.php. Because this is a MEDIUM verdict, there is no noisgate mitigation SLA; if you keep the app, make this part of normal risk reduction rather than an emergency change. - Block the vulnerable route — At the web server, reverse proxy, or WAF layer, deny access to
/pages/forms/course.phpor at minimum inspect and block suspiciouscourse_namepayloads. With no vendor fix located, route-level containment is the fastest practical guardrail while you decide whether to retire or fork-maintain the app. - Constrain the database account — Ensure the web app's DB user has only the minimum CRUD rights it truly needs and cannot administer the database. That limits post-exploit blast radius if an internal or external attacker lands the injection.
- Retire or replace the app — If this is a student project, demo app, or orphaned departmental tool, removing it is cleaner than carrying indefinite code-level debt with no published upstream patch. For MEDIUM, plan this in the normal remediation window rather than treating it as a break-glass event.
- Blindly patching the OS or PHP runtime does not fix an application-layer SQL injection in
course.php. - MFA does not help because the published exploit path requires no authentication.
- Network IDS alone is weak if the app stays exposed;
sqlmaptraffic can often be tuned to look mundane enough to slip through without route-level protection.
Crowdsourced verification payload.
Run this on the target Linux host or inside the container that serves the PHP app. Invoke it as sudo bash verify-cve-2025-0233.sh /var/www (replace /var/www with your webroot base); root is not strictly required, but read access to the application files is.
#!/usr/bin/env bash
# verify-cve-2025-0233.sh
# Detect likely presence of vulnerable Codezips Project Management System 1.0
# affected by CVE-2025-0233.
#
# Usage:
# bash verify-cve-2025-0233.sh /var/www
# Exit codes:
# 0 = PATCHED
# 1 = VULNERABLE
# 2 = UNKNOWN
set -u
BASE="${1:-/var/www}"
FOUND=0
UNKNOWN=0
if [ ! -d "$BASE" ]; then
echo "UNKNOWN: base path '$BASE' does not exist"
exit 2
fi
# Find candidate files named exactly course.php under pages/forms
while IFS= read -r -d '' f; do
FOUND=1
# Heuristics:
# 1) exact vulnerable path shape
# 2) file mentions course_name
# 3) file contains raw SQL construction patterns typical of vulnerable PHP apps
if grep -q "course_name" "$f" 2>/dev/null; then
if grep -Eqi "(select|insert|update|delete).*(course_name|\$_POST\['course_name'\]|\$_REQUEST\['course_name'\])|mysqli_query|mysql_query|->query\(" "$f" 2>/dev/null; then
echo "VULNERABLE: likely Codezips PMS course handler found at $f"
exit 1
else
UNKNOWN=1
fi
else
UNKNOWN=1
fi
done < <(find "$BASE" -type f -path "*/pages/forms/course.php" -print0 2>/dev/null)
if [ "$FOUND" -eq 0 ]; then
echo "PATCHED: no candidate 'pages/forms/course.php' file found under $BASE"
exit 0
fi
if [ "$UNKNOWN" -eq 1 ]; then
echo "UNKNOWN: candidate file(s) found but vulnerability signature could not be confirmed"
exit 2
fi
echo "UNKNOWN: verification inconclusive"
exit 2
If you remember one thing.
/pages/forms/course.php as ordinary risk reduction, then retire, replace, or locally fix the app within the noisgate remediation SLA of 365 days since no upstream patched version was located.Sources
- NVD entry for CVE-2025-0233
- OpenCVE record for CVE-2025-0233
- Public PoC issue with payloads and sqlmap example
- Codezips product page for Project Management System
- CISA Known Exploited Vulnerabilities Catalog
- FIRST EPSS data and field definitions
- OSV mirror of CVE affected range
- Secondary tracker with EPSS percentile view
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.