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
/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./pages/forms/course.php or at minimum inspect and block suspicious course_name payloads. With no vendor fix located, route-level containment is the fastest practical guardrail while you decide whether to retire or fork-maintain the app.- 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.
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. |
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
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.
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