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

A vulnerability was found in code-projects Point of Sales and Inventory Management System 1

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

This is a side door inside the shop, not a battering ram through the front gate

CVE-2025-0195 is an SQL injection in code-projects Point of Sales and Inventory Management System 1.0, specifically in /user/del_product.php via the id parameter. The published CVE data says the attack is remote, requires low privileges, and affects version 1.0; NVD/OpenCVE do not show any vendor-published fixed version, so the practical state is *1.0 vulnerable, no authoritative patch record surfaced*.

The vendor's MEDIUM is directionally fair in lab conditions, but it overstates urgency for enterprise patch triage. The biggest reality check is friction: the attacker needs a valid application session, this product is a niche PHP sample app rather than a common enterprise platform, and the documented impact is app/database-level data access or tampering rather than turnkey host takeover.

"Public PoC, yes—but authenticated SQLi in a niche POS app is mostly post-compromise cleanup, not a fleet emergency."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Get a valid POS user session

The published CVSS vector includes PR:L, so exploitation starts with a legitimate low-privilege account in the POS application. In practice that usually means the attacker already has stolen cashier/back-office credentials or already has internal foothold and can reach the app. Tooling is mundane here: browser, password reuse, credential stuffing against exposed login, or post-phish session reuse.
Conditions required:
  • Valid low-privilege application credentials
  • Network reachability to the POS web application
  • Target actually runs code-projects Point of Sales and Inventory Management System 1.0
Where this breaks in practice:
  • This is not unauthenticated internet RCE
  • Many deployments of small PHP POS apps are internal-only or VPN-restricted
  • Niche product sharply limits reachable population versus mainstream enterprise software
Detection/coverage: Good IAM, VPN, reverse proxy, and auth logs should show the login step; vulnerability scanners may flag the product, but version detection is often weak for ad-hoc PHP apps.
STEP 02

Reach the vulnerable endpoint

The vulnerable surface is /user/del_product.php with attacker-controlled id. A tester or attacker will usually map the app with Burp Suite or just browse authenticated product-management screens until the deletion workflow is visible.
Conditions required:
  • User role can access the product deletion workflow or endpoint
  • Application routing exposes /user/del_product.php
Where this breaks in practice:
  • Role-based menus or route guards may hide the endpoint from ordinary users
  • Some deployments customize or rename paths, which breaks canned PoC tooling
Detection/coverage: Web logs can show direct requests to /user/del_product.php; authenticated DAST or manual testing is more reliable than unauthenticated scanners.
STEP 03

Exploit id with SQLi tooling

NVD references a public exploit gist, and this kind of flaw is straightforward to weaponize with sqlmap or manual UNION/boolean/error-based payloads. Because the issue is an id parameter in a PHP CRUD page, exploitation effort is low once auth and path access are solved.
Conditions required:
  • The parameter is unsafely concatenated into SQL
  • Backend database returns distinguishable behavior or content
Where this breaks in practice:
  • Input filtering, custom error handling, or WAF rules may disrupt automation
  • Some small apps use poor but still partially constraining query patterns that reduce exploit depth
Detection/coverage: WAF/IDS can catch classic SQLi payloads and sqlmap user-agent patterns, but manual low-noise payloads may blend into normal app traffic.
STEP 04

Read or tamper with POS data

Most realistic outcomes are reading inventory/sales/customer records or modifying/deleting rows tied to products and transactions. That matters for a store or branch, but the blast radius is usually the application database or tenant behind this one app—not immediate enterprise-wide domain compromise.
Conditions required:
  • Database account permissions allow read/write beyond the single row
  • Sensitive business data resides in the same schema
Where this breaks in practice:
  • Least-privilege DB accounts can limit scope
  • No evidence in the cited sources of a built-in path from this CVE to OS command execution
Detection/coverage: Database audit logs, slow query logs, and anomalous app deletion/reporting activity are better detectors than endpoint AV.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo authoritative evidence surfaced here of active in-the-wild exploitation campaigns. *Public exploit disclosure exists*, but that is not the same as observed campaign use.
Public PoC availabilityYes. NVD/OpenCVE reference a public GitHub Gist by Masamuneee and tag it as an Exploit / Third Party Advisory.
EPSS0.00077 from the provided intel — extremely low predicted near-term exploitation probability. Treat this as supporting downward pressure, not proof of safety.
KEV statusNot listed in CISA KEV in the catalog referenced for this assessment.
CVSS vector meaningCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L means remote and easy *after* login, with low confidentiality/integrity/availability impact in the vendor model. The decisive limiter is PR:L.
Affected versionsAuthoritative records point to code-projects Point of Sales and Inventory Management System 1.0. Vulnerable component: /user/del_product.php; vulnerable parameter: id.
Fixed versionNo vendor-fixed version or official patch advisory was surfaced in NVD/OpenCVE for this CVE. For defenders, that means compensating controls and local code remediation may be the only path if you actually run this app.
Exposure / scanning telemetryNo trustworthy GreyNoise/Shodan/Censys/FOFA fingerprint or exposure count surfaced for this exact app/CVE in the sources reviewed. That absence usually means *niche population and poor fingerprintability*, not zero risk.
Disclosure and sourceDisclosed 2025-01-03. CVE record is assigned/published through VulDB; NVD enrichment arrived later on 2025-02-25.
Codebase quality signalThe same product shows a cluster of January 2025 SQLi disclosures across multiple endpoints, which is a strong indicator of broadly unsafe input handling rather than a one-off bug.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (4.4/10)

The single biggest driver down is authenticated access required: this is not initial-access material, it is a post-login application flaw in a niche PHP POS app. Public exploit disclosure keeps it on the radar, but the reachable population and likely blast radius are too narrow to justify a higher fleet-wide priority bucket.

HIGH Metadata correctness for affected component, disclosure date, and CVSS prerequisites
MEDIUM Real-world enterprise exploitability and exposure prevalence

Why this verdict

  • Start at vendor 6.3, then subtract for PR:L — requiring a valid application account means the attacker is already past identity controls or already inside your environment.
  • Subtract again for exposure reality — this is a niche code-projects PHP app, not Exchange, Ivanti, or a perimeter appliance with massive external footprint.
  • Subtract for constrained blast radius — current evidence supports app/database data theft or tampering, not direct host takeover or domain-wide compromise.
  • Add a little back for public exploit disclosure — NVD/OpenCVE reference a public exploit gist, so once auth is obtained the attack path is low-friction.

Why not higher?

If this were unauthenticated remote SQLi on a broadly exposed enterprise platform, the score would climb fast. But PR:L plus uncertain external exposure changes the operational story: most enterprises that get hit here are already dealing with a prior control failure or an internal attacker.

Why not lower?

It is still SQL injection, still remote *after login*, and still tied to business data in a POS/inventory workflow. Public exploit disclosure and the product's broader cluster of similar SQLi bugs mean you should not write it off as theoretical.

05 · Compensating Control

What to do — in priority order.

  1. Fence the app off the internet — Put the POS application behind VPN, IP allowlists, or an internal reverse proxy so PR:L also implies *internal reachability*. For a LOW verdict there is no formal deadline; treat this as backlog hygiene and do it during normal hardening work.
  2. Constrain who can hit product-management routes — Limit /user/* administrative and deletion workflows to only the smallest set of cashier/admin roles and, where possible, branch subnets. For LOW, there is no mitigation SLA; fold this into routine access-control cleanup.
  3. Add SQLi-aware WAF rules — A reverse proxy or WAF can blunt commodity payloads aimed at id and similar parameters, which matters because this codebase appears to have multiple SQLi points. Since there is no official patch record surfaced, virtual patching is a reasonable compensating measure during normal maintenance.
  4. Watch database and app logs for delete-path abuse — Alert on unusual requests to /user/del_product.php, bursty id probing, SQL errors, and anomalous product deletions. For LOW, monitor as backlog hygiene rather than emergency response unless the app is externally exposed.
What doesn't work
  • Endpoint AV/EDR alone does not stop SQL injection into the application database; the malicious action occurs through normal web app and DB channels.
  • MFA on admin portals is helpful but incomplete here; once an attacker has a valid low-priv POS session, MFA does nothing for the vulnerable id parameter itself.
  • Unauthenticated perimeter scanning misses the real issue because the CVE requires login and route access.
06 · Verification

Crowdsourced verification payload.

Run this on the target web server that hosts the PHP application, not from an auditor workstation. Invoke it as sudo bash verify-cve-2025-0195.sh /var/www/html/pos (replace with the app root); read access to the PHP files is required, and sudo helps if the web root is restricted.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# verify-cve-2025-0195.sh
# Detects likely vulnerable code patterns for CVE-2025-0195 in code-projects
# Point of Sales and Inventory Management System 1.0.
#
# Exit codes:
#   0 = PATCHED
#   1 = VULNERABLE
#   2 = UNKNOWN

set -euo pipefail

APP_ROOT="${1:-}"
TARGET_REL="user/del_product.php"

if [[ -z "$APP_ROOT" ]]; then
  echo "UNKNOWN - usage: $0 /path/to/app_root"
  exit 2
fi

TARGET="$APP_ROOT/$TARGET_REL"

if [[ ! -f "$TARGET" ]]; then
  echo "UNKNOWN - file not found: $TARGET"
  exit 2
fi

# Heuristics:
# 1) presence of id sourced from GET/REQUEST/POST
# 2) presence of SQL keywords in the file
# 3) evidence of string concatenation/interpolation using the id variable
# 4) absence of obvious prepared statement usage

src_id=0
sql_ops=0
concat_id=0
prepared=0

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

if grep -Eqi '(select|delete|update|insert)[[:space:]]+.*(from|into|set)' "$TARGET"; then
  sql_ops=1
fi

if grep -Eqi '(\.\s*\$[A-Za-z_][A-Za-z0-9_]*id\b|\$[A-Za-z_][A-Za-z0-9_]*id\b\s*\.|\$id\b)' "$TARGET"; then
  concat_id=1
fi

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

# Stronger signal: common vulnerable pattern in simple PHP CRUD apps
if grep -Eqi '\$id\s*=\s*\$_(GET|POST|REQUEST)\s*\[\s*["\x27]id["\x27]\s*\]' "$TARGET" \
   && grep -Eqi '(delete|select|update).*(where).*(id).*(\$id|\'.*\$id|".*\$id)' "$TARGET" \
   && [[ $prepared -eq 0 ]]; then
  echo "VULNERABLE - direct id parameter flow into SQL detected in $TARGET_REL"
  exit 1
fi

if [[ $src_id -eq 1 && $sql_ops -eq 1 && $concat_id -eq 1 && $prepared -eq 0 ]]; then
  echo "VULNERABLE - likely unsafe id-to-SQL pattern detected in $TARGET_REL"
  exit 1
fi

if [[ $prepared -eq 1 ]]; then
  echo "PATCHED - prepared statement usage detected in $TARGET_REL (manual review still recommended)"
  exit 0
fi

echo "UNKNOWN - file exists but the vulnerable pattern was not confidently confirmed"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: if you actually have this niche POS app anywhere, first verify whether it is externally reachable and whether low-priv accounts can touch /user/del_product.php. For a LOW verdict there is no noisgate mitigation SLA and no noisgate remediation SLA—treat this as backlog hygiene, document exposure, restrict access during normal hardening, and if you keep the app, schedule local code remediation or replacement in standard maintenance rather than burning an emergency patch window.

Sources

  1. NVD CVE-2025-0195
  2. OpenCVE record for CVE-2025-0195
  3. Code-projects product page
  4. CISA Known Exploited Vulnerabilities Catalog
  5. FIRST EPSS overview
  6. Indusface January 2025 bulletin
  7. CVEFeed detail page
  8. Referenced public exploit gist
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.