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

A vulnerability classified as critical has been found in code-projects Online Shoe Store 1

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

This is a sharp knife left on a toy kitchen counter

CVE-2025-0205 is a SQL injection flaw in code-projects Online Shoe Store 1.0, specifically the /details2.php endpoint where the id parameter is not safely handled before reaching backend SQL. Public descriptions consistently name version 1.0 as affected, and there is a public exploit reference tied to the CVE. I could not find any authoritative vendor patch or fixed release; for this product, the practical reality looks like *vulnerable 1.0* versus *locally modified code* rather than a clean supported upgrade path.

The vendor-side MEDIUM 6.3 call is directionally closer to reality than NVD's inflated 9.8, but for the wrong reason. The decisive downward pressure is not that SQLi is harmless—it is not—but that this is a small, freely downloadable demo-style PHP/MySQL project with weak evidence of meaningful enterprise deployment, low EPSS, no KEV listing, and no credible in-the-wild campaign reporting. If you *do* run it on the internet, it is an unauthenticated data-exposure bug; if you manage a normal enterprise estate, it is not a fleet-wide fire drill.

"Real bug, real PoC, but on a fringe training-grade app with tiny enterprise footprint and no known active abuse"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Reach the public product page

An attacker first identifies an internet-exposed instance of Online Shoe Store 1.0 and reaches /details2.php with a user-controlled id parameter. This is standard web recon with httpx, curl, or search-engine dorks rather than deep exploit engineering.
Conditions required:
  • The application is deployed and reachable over HTTP/HTTPS
  • The vulnerable details2.php route is exposed
  • The target is actually this specific code-projects app, not a lookalike storefront
Where this breaks in practice:
  • This product appears to be a small downloadable sample project, not a mainstream enterprise platform
  • Exposure population is likely tiny compared with common ERP, VPN, or edge products
  • Many enterprise inventories will have zero affected assets
Detection/coverage: ASM/EASM can usually find the exposed path if the app is public. Generic web scanners may flag SQLi, but fingerprinting this exact product is spotty.
STEP 02

Probe SQL injection in id

Using sqlmap or a manual quote-based payload, the attacker tests whether id breaks the backend query. The public CVE text and exploit reference indicate workable injection rather than a theoretical parser edge case.
Conditions required:
  • Unsanitized id is still present in the deployed code
  • The request reaches the vulnerable SQL statement
  • Database error handling or response behavior is exploitable enough for inference
Where this breaks in practice:
  • A competent WAF with tuned SQLi rules may block obvious payloads
  • Custom local code changes may have removed the issue even without a version bump
  • Blind SQLi can be slower and noisier than error-based exploitation
Detection/coverage: WAF, reverse proxy, and web server logs can catch payload patterns like quote spraying, UNION, time delays, or abnormal parameter entropy. DAST tools should have decent coverage here.
STEP 03

Read or tamper with storefront data

Once injection is confirmed, the attacker can enumerate schema, dump rows, and potentially alter records through the application's database account. Tooling is commodity: sqlmap, manual UNION SELECT, or blind extraction techniques.
Conditions required:
  • The DB user behind the app has useful read/write permissions
  • Sensitive customer, order, or admin data is present
  • The target database is reachable from the web tier
Where this breaks in practice:
  • Low-privilege DB accounts can limit blast radius
  • Some demo deployments contain fake or low-value data
  • Tight network segmentation and least-privilege DB grants reduce post-exploitation value
Detection/coverage: Database audit logs, anomalous query timing, and spikes in row reads can help, but many SMB/demo PHP apps lack that telemetry.
STEP 04

Leverage stolen secrets for follow-on access

If the database contains admin credentials, password hashes, API keys, or password reset artifacts, the attacker may pivot into the application or adjacent services. This is where business impact becomes real, but it depends entirely on what the app stores and how operators reused secrets.
Conditions required:
  • Valuable credentials or reusable secrets are stored in the database
  • Passwords are crackable or reused elsewhere
  • The vulnerable app is connected to something that matters
Where this breaks in practice:
  • This is not direct RCE from the CVE alone
  • Modern MFA and secret hygiene can break the pivot chain
  • Many deployments of this app are likely isolated student/demo installs
Detection/coverage: Look for credential replay into admin panels, SSO, VPN, or shared hosting accounts after suspicious web probing.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo reliable evidence of active exploitation found in CISA KEV or major public campaign reporting reviewed.
Proof of conceptPublic exploit reference exists via a GitHub Gist linked from NVD/OSV/OpenCVE, attributed to th4s1s in the reference trail.
EPSS0.00097 from your intel block — extremely low predicted near-term exploitation likelihood; Feedly's surfaced FIRST view also shows a low percentile band.
KEV statusNot listed in CISA's Known Exploited Vulnerabilities catalog as reviewed.
CVSS disagreementCNA/VulDB scored it 6.3 MEDIUM with PR:L, while NVD later enriched it to 9.8 CRITICAL with PR:N and C/I/A:H. That spread is a warning sign that the public record is low-fidelity.
Affected versionsPublic records consistently point to code-projects Online Shoe Store 1.0; the vulnerable component named is /details2.php handling the id parameter.
Fixed versionNo authoritative vendor-fixed version or patch advisory found. Treat this as no supported patch path identified publicly.
Exposure populationThis is a freely downloadable PHP/MySQL source project from code-projects.org, not a broadly standardized enterprise product. Real exposure is likely limited and highly skewed toward hobby, lab, student, or small ad hoc installs.
Disclosure timelinePublicly disclosed on 2025-01-04; NVD enrichment and scoring changes were added on 2025-01-22.
Researcher / source trailThe CVE source is VulDB. Public reference trail points to a PoC gist by th4s1s; I did not find a fuller vendor-authored advisory.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to MEDIUM (5.9/10)

The single biggest factor keeping this out of HIGH is reachability at scale: this is an obscure free sample-store project with very limited evidence of meaningful enterprise deployment. Yes, exploitation is likely easy *if the app is exposed*, but patch queues for 10,000-host estates should not treat fringe training-grade web apps like broadly deployed edge infrastructure.

HIGH There is a real SQL injection condition in the named app/path
MEDIUM Public PoC availability
HIGH Low enterprise prevalence and low prioritization value for most fleets
LOW Exact blast radius on any one deployment because DB privileges and stored data vary

Why this verdict

  • Unauthenticated remote path raises the floor: despite the CNA's PR:L vector, NVD's later enrichment points to a remotely reachable SQLi with no user interaction, so this is not mere local hygiene.
  • Exposure population crushes urgency: the prerequisite is not just 'internet access' but 'internet access to a niche downloadable PHP source project actually deployed in production,' which sharply narrows real-world victim count.
  • Commodity exploit path: sqlmap-class tooling and a public PoC reference reduce attacker effort once a live target exists.
  • No KEV, no campaign signal, very low EPSS: absent exploitation evidence, this does not deserve top-quartile patch priority in an enterprise queue.
  • Impact is data-layer first, not instant estate-wide takeover: the likely outcome is DB read/write abuse against one app, with further damage dependent on weak secrets, reused creds, or adjacent trust.

Why not higher?

To reach HIGH, I would want either broad enterprise prevalence, active exploitation, or a cleaner path to immediate high-value compromise across many organizations. Here, the attack starts unauthenticated, but the reachable population is narrow and the business impact is usually bounded to one small web app unless operators compounded the problem with bad secret reuse.

Why not lower?

This is still a remotely reachable SQL injection bug with public exploit material, so it is not paperwork-only noise. If you actually run this storefront on the internet, an attacker can plausibly pull data or tamper with records without already owning the environment.

05 · Compensating Control

What to do — in priority order.

  1. Block public access to the app — If this storefront is nonessential, put it behind VPN, IP allowlisting, or an internal reverse proxy and remove direct internet reachability. For a MEDIUM verdict there is no mitigation SLA — go straight to the 365-day remediation window, but internet-facing exposure is the one control most likely to collapse the attack path immediately.
  2. Deploy targeted WAF rules — Add SQLi signatures focused on /details2.php and the id parameter, including quote, comment, UNION, boolean, and time-based patterns. Use this as a compensating control where no clean vendor patch exists; tune and validate quickly, then leave it in place until the code is replaced or fixed.
  3. Constrain the database account — Reduce the web application's DB user to only the minimum tables and verbs it genuinely needs. Least privilege will not remove the bug, but it can turn a full dump/tamper event into a smaller blast radius.
  4. Hunt for probe activity — Review web, proxy, and WAF logs for requests to /details2.php carrying suspicious id values, especially quotes, comments, sleep, benchmark, or unusually long numeric-looking payloads. This is cheap detection coverage for a bug class that tends to be noisy during validation.
  5. Replace the app if it is business-facing — Because I found no authoritative fixed release, the durable answer is to retire or locally remediate this codebase rather than waiting for a vendor lifecycle that may not exist. For MEDIUM, track it inside the 365-day remediation window, but do not let 'no patch' become 'no owner'.
What doesn't work
  • A generic perimeter AV stack does not stop SQL injection against a PHP app.
  • MFA does not prevent the initial SQLi; it only helps if attackers later try credential replay.
  • Network segmentation alone does not help if the vulnerable web route remains internet-accessible and the app can still reach its database.
  • Relying on version banners is weak here because there is no trustworthy supported patch lineage; many instances will be locally modified source drops.
06 · Verification

Crowdsourced verification payload.

Run this on the target web host that serves the PHP application, not from an auditor workstation. Invoke it as sudo bash verify-cve-2025-0205.sh /var/www/html or point it at the app root you use; read access to the web files is required, and sudo helps if the webroot is restricted.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# verify-cve-2025-0205.sh
# Checks a local code-projects Online Shoe Store deployment for signs of CVE-2025-0205
# Usage: bash verify-cve-2025-0205.sh /path/to/webroot
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

TARGET_ROOT="${1:-}"
if [[ -z "$TARGET_ROOT" ]]; then
  echo "UNKNOWN: missing webroot path argument"
  exit 2
fi

if [[ ! -d "$TARGET_ROOT" ]]; then
  echo "UNKNOWN: path does not exist or is not a directory: $TARGET_ROOT"
  exit 2
fi

DETAILS_FILE="$(find "$TARGET_ROOT" -type f -name 'details2.php' 2>/dev/null | head -n 1)"
if [[ -z "$DETAILS_FILE" ]]; then
  echo "PATCHED: details2.php not found under $TARGET_ROOT"
  exit 0
fi

# Heuristic checks only. There is no authoritative fixed version string published.
HAS_GET_ID=0
HAS_SQL=0
HAS_PREPARED=0

if grep -Eqi '\$_(GET|REQUEST)\s*\[\s*["\x27]id["\x27]\s*\]' "$DETAILS_FILE"; then
  HAS_GET_ID=1
fi

if grep -Eqi '(select|insert|update|delete).*(from|into|set)' "$DETAILS_FILE"; then
  HAS_SQL=1
fi

if grep -Eqi '(prepare\s*\(|bind_param\s*\(|PDO::prepare|->prepare\s*\()' "$DETAILS_FILE"; then
  HAS_PREPARED=1
fi

# Stronger heuristic: look for direct concatenation of id into query-ish code.
DIRECT_INJECTION_MATCH=0
if grep -Eqi '(\$_(GET|REQUEST)\s*\[\s*["\x27]id["\x27]\s*\].*(select|update|delete|insert))|((select|update|delete|insert).*(\$_(GET|REQUEST)\s*\[\s*["\x27]id["\x27]\s*\]))' "$DETAILS_FILE"; then
  DIRECT_INJECTION_MATCH=1
fi

if [[ $DIRECT_INJECTION_MATCH -eq 1 ]]; then
  echo "VULNERABLE: details2.php appears to use request parameter id in SQL logic ($DETAILS_FILE)"
  exit 1
fi

if [[ $HAS_GET_ID -eq 1 && $HAS_SQL -eq 1 && $HAS_PREPARED -eq 0 ]]; then
  echo "VULNERABLE: details2.php contains id input handling and SQL patterns without obvious prepared statements ($DETAILS_FILE)"
  exit 1
fi

if [[ $HAS_PREPARED -eq 1 ]]; then
  echo "PATCHED: details2.php found, but prepared-statement patterns are present; manual review still recommended ($DETAILS_FILE)"
  exit 0
fi

echo "UNKNOWN: details2.php exists but the script could not determine exploitability conclusively ($DETAILS_FILE)"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: first answer the asset question. If you do not run this code-projects app anywhere, document that and move on. If you do run it and it is internet-facing, put an owner on it immediately, remove or restrict public exposure, and add targeted WAF coverage; for a MEDIUM verdict there is noisgate mitigation SLA here — no mitigation SLA — go straight to the 365-day remediation window — but because no trustworthy vendor-fixed release was found, the noisgate remediation SLA means retiring the app, locally fixing the vulnerable code path, or replacing the codebase within 365 days rather than letting it sit as an orphaned exception.

Sources

  1. NVD CVE-2025-0205
  2. OpenCVE record for CVE-2025-0205
  3. OSV entry for CVE-2025-0205
  4. code-projects download page for Online Shoes Store
  5. CISA Known Exploited Vulnerabilities Catalog
  6. FIRST EPSS overview
  7. Feedly CVE page surfacing EPSS/PoC references
  8. CVE Details summary for CVE-2025-0205
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.