← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2025-0233 · CWE-74 · Disclosed 2025-01-05

A vulnerability was found in Codezips Project Management System 1

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

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.

"Unauthenticated SQLi is bad; unauthenticated SQLi in a niche student PHP app with no exploitation signal is not your fire drill."
02 · The Attack Path

3 steps from start to impact.

STEP 01

Find a reachable Codezips instance

The attacker first needs an internet- or intranet-reachable deployment of the Codezips PHP app. This is usually done with generic web recon and manual fingerprinting rather than a clean Shodan/Censys signature, because the app is a downloadable project package rather than a standardized appliance.
Conditions required:
  • 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.php endpoint in place
Where this breaks in practice:
  • 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
Detection/coverage: ASM and external attack-surface scanners are unlikely to label this product by name reliably; detection is better done via internal software inventory, webroot searches, and manual route validation.
STEP 02

Exploit course_name with sqlmap or hand-built payloads

The public PoC shows the vulnerable parameter and includes boolean-based, error-based, and time-based payloads, plus a sqlmap command line. Because privileges and user interaction are both None, a reachable endpoint is enough to start extracting database behavior.
Conditions required:
  • Attacker can send POST requests to /pages/forms/course.php
  • Backend database queries are built from unsanitized course_name input
Where this breaks in practice:
  • 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
Detection/coverage: Web logs, WAF, IDS, and database slow-query/error telemetry can catch classic SQLi probes and sqlmap request patterns reasonably well.
STEP 03

Read or tamper with application data

If exploitation succeeds, the attacker can enumerate schema, read rows, and potentially modify or delete application data exposed through the database account used by the app. The CNA-scored impact is only low/low/low, which suggests the exploit path is credible but the expected blast radius is limited to this application's data context.
Conditions required:
  • The database account has meaningful read or write permissions
  • Useful data actually exists in the application database
Where this breaks in practice:
  • 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
Detection/coverage: DAST can find the injection point; runtime detection depends on SQL error logging, unusual SELECT/UNION patterns, and web-to-DB anomaly monitoring.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo 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 PoCYes. GitHub issue by 1074923869 includes boolean/error/time-based payloads and a sqlmap command; researcher named as qinghe.
EPSSPrompt 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 statusNot listed in the CISA Known Exploited Vulnerabilities Catalog.
CVSS reality checkCNA 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 versionsCodezips Project Management System 1.0 only, affecting /pages/forms/course.php and the course_name parameter.
Fixed versionNo 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 telemetryWeak 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.
DisclosurePublished 2025-01-05 via VulDB/CVE; NVD modified 2025-01-10.
Product contextCodezips markets this as a free PHP/MySQL source-code project originally posted in August 2020. That sharply lowers expected prevalence in mature enterprise estates.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.4/10)

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.

HIGH Technical existence of the SQL injection and remote unauthenticated reachability
MEDIUM Assessment that real-world enterprise prevalence is low
MEDIUM Conclusion that no vendor patch is available

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.

05 · Compensating Control

What to do — in priority order.

  1. 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.
  2. Block the vulnerable route — At the web server, reverse proxy, or WAF layer, deny access to /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.
  3. 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.
  4. 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.
What doesn't work
  • 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; sqlmap traffic can often be tuned to look mundane enough to slip through without route-level protection.
06 · Verification

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.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/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
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: first confirm whether you even run this thing anywhere real, because many enterprises will find zero instances. For a MEDIUM noisgate rating there is no noisgate mitigation SLA — go straight to the 365-day remediation window; if you do find an exposed instance, put it on an internal-only path or block /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

  1. NVD entry for CVE-2025-0233
  2. OpenCVE record for CVE-2025-0233
  3. Public PoC issue with payloads and sqlmap example
  4. Codezips product page for Project Management System
  5. CISA Known Exploited Vulnerabilities Catalog
  6. FIRST EPSS data and field definitions
  7. OSV mirror of CVE affected range
  8. Secondary tracker with EPSS percentile view
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.