Safeguard
Vulnerability Analysis•

CVE-2025-40731: Critical SQL Injection in Daily Expense Manager

Critical SQL injection in Daily Expense Manager 1.0 (update.php). INCIBE reports no fix, so patch the query, limit access to trusted users or retire it.

Safeguard Security Team
4 min read

CVE-2025-40731 is a critical SQL injection flaw in Daily Expense Manager, with a CVSS score of 9.8. INCIBE reported no solution at the time of writing. Treat any instance reachable from untrusted networks as exposed until you have confirmed the fix, and review your logs for unexpected requests.

What's affected

  • Product: Daily Expense Manager version 1.0, a PHP project from code-projects for tracking expenses.
  • Fixed version: INCIBE reports no solution at this time.
  • Severity: Critical, CVSS 9.8 (vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).
  • Weakness: CWE-89.
  • Published: 2025-06-30.

The injectable inputs are the pname, pprice and id parameters in /update.php. The record says an attacker could retrieve, create, update and delete data in the database.

INCIBE advisory INCIBE-2025-0348 lists four CVEs. This is the one rated high by INCIBE, and the record scores it 9.8. The others are a user enumeration issue (CVE-2025-40732) and two reflected cross-site scripting issues.

How to check if you're exposed

This is source code you host yourself, so you can search for the file and parameter named in the record:

grep -rn '\$_GET\|\$_POST\|\$_REQUEST' --include=*.php . | grep -i 'query'

The command lists lines where request input and a database query appear together. Read each hit and look for values placed straight into the SQL text. It is a starting point for review, not proof of safety.

You can also run your dependency manifests and container images through the free in-browser scan to see which known CVEs affect the packages you ship. It will not find a flaw inside a vendor appliance or an unmanaged install, so keep an inventory of those too.

What to do now

  1. Identify every copy of Daily Expense Manager you run, including test and forgotten ones.
  2. There is no reported fix. Patch the query, restrict access, or retire the application.
  3. Until that is done, remove public access where you can. Put the application behind a VPN, a network allow list or a web application firewall rule, and watch the access and database logs for unusual requests to the endpoint named above.
  4. If you can edit the code, change the vulnerable query or check to a safe form and review nearby files for the same pattern.
  5. Record the outcome, including the date, the version you ended on and who confirmed it, so a later audit has something to read.
  6. Add the product to your continuous monitoring so a future CVE against it reaches you without a manual search.

Why it matters

SQL injection happens when an application builds a database query by gluing user input into the query text. The database cannot tell where the developer's command ends and the visitor's data begins, so a crafted value can change what the query does. The class is catalogued as CWE-89 (SQL injection).

The usual fix is a parameterized query, where the SQL text and the values travel separately. Input validation helps as a second layer, but it is not a substitute. Because this flaw needs no login and no click from a victim, anything that can reach the page over the network is in range.

The record's KEV flag is false, so CISA does not list it as known to be exploited, and nothing in the sources here says it is being exploited in the wild.

Try it yourself

See how the SAST code scan step works in practice.

Click through it at your own pace, or open it full screen.

Quick check

What does the score of 9.8 mean for Daily Expense Manager?

The vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H reads as network reachable, low complexity, no privileges and no user interaction. The impact ratings are confidentiality high, integrity high, availability high. Use it to rank the work, then confirm exposure for your own deployment.

Is escaping the parameter enough to fix this?

Escaping is fragile and easy to get wrong in one place out of many. Parameterized queries are the reliable fix because the value is never treated as SQL. If you maintain the code, change the query itself rather than patching the symptom.

Sources

Last reviewed: 18 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

We email you a link to confirm, and only then add you to the list. Unsubscribe in one click. Privacy

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.