/

CVE-2026-33639

Severity:

HIGH RISK

(7.2)

SQL Injection (CWE-89) in InvoicePlane Tax Settings UI

CVE-2026-33639

Deferred

Vulnerability type

Category:

SQL Injection

CWE:

CWE-89

Impact:

Database Schema Manipulation and Application Unavailability

Severity:

HIGH RISK

(7.2)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

InvoicePlane improperly interpolates the administrator-controlled tax_rate_decimal_places setting into an SQL ALTER TABLE statement. A crafted value may alter the schema-changing query, allowing an authorized administrator or another party able to control the setting to corrupt database structures and disrupt invoice and payment management.

Affected context

The vulnerability occurs in InvoicePlane's settings handling when the tax_rate_decimal_places value is incorporated into an ALTER TABLE statement for the ip_tax_rates table without strict integer validation. Risk depends on whether an attacker can reach the relevant administrative setting or otherwise modify the value before the schema update executes.

Exploit preconditions

  • Attack surface: InvoicePlane's administrative settings interface and related configuration-handling logic
  • Required access: Ability to control or modify the tax_rate_decimal_places setting, typically through an authorized administrative context
  • Trigger point: Processing the setting in Settings::index() and constructing the ALTER TABLE statement
  • Why exploitation is possible: The setting is treated as SQL syntax rather than being constrained to a strictly validated numeric value

Why this happens

The underlying defect is the direct interpolation of a configuration value into a SQL statement that changes database schema. Because the value is not restricted to the intended integer domain before query construction, SQL syntax can be introduced into a data-definition operation. This maps to CWE-89: Improper Neutralization of Special Elements used in an SQL Command, commonly called SQL injection.

Potential impact

  • Required database columns may be removed or altered
  • Invoice, tax, client, or payment data structures could become inconsistent
  • The application may become unavailable or fail during normal operations
  • Financial records could be corrupted or rendered inaccessible
  • Recovery efforts could require database restoration or schema repair

General mitigation guidance

Mitigation generally focuses on separating configuration data from SQL syntax and enforcing a narrow trust boundary for administrative settings.

Common defensive patterns include:

  • Validate the setting as a bounded integer before any database operation
  • Use typed application interfaces and database mechanisms that do not permit values to become SQL syntax
  • Prefer controlled schema migration routines over dynamically assembled DDL
  • Apply allowlists and canonicalization to configuration values
  • Run the application with database privileges limited to the operations it requires
  • Maintain tested backups and recovery procedures for financial data
  • Treat administrative inputs as untrusted even when access is restricted

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static analysis rules identifying string interpolation or concatenation in SQL and DDL statements
  • Code review checks for administrative or configuration values used directly in database commands
  • Tests that supply non-numeric, boundary, and unexpected values to settings handlers
  • Database and application monitoring for unexpected ALTER TABLE operations
  • Policy enforcement requiring parameterization, strict type validation, and approved migration paths
  • Automated security review tools that flag untrusted data reaching SQL execution APIs

Sources

SourceLink
github.comgithub.com/InvoicePlane/InvoicePlane/commit/8fe41750d7c6fd039ac7353e5311bf4c140c3436
github.comgithub.com/InvoicePlane/InvoicePlane/commit/efec2d28d574ca616f218d758bd5adaa9a60b3a0
github.comgithub.com/InvoicePlane/InvoicePlane/commit/fca7792a24de0a749d881cbbe4af6f58e9545d20
github.comgithub.com/InvoicePlane/InvoicePlane/pull/1481
github.comgithub.com/InvoicePlane/InvoicePlane/pull/1488
github.comgithub.com/InvoicePlane/InvoicePlane/releases/tag/v1.7.2
github.comgithub.com/InvoicePlane/InvoicePlane/security/advisories/GHSA-34g5-4hfc-g983

Frequently asked

questions

Exploitation generally requires the ability to modify the administrator-controlled setting. Whether that is possible without authentication depends on the application's access controls and any separate authorization weakness.

An attacker usually needs administrative access or another path that permits changing the affected configuration value before the schema update is processed.

Keep configuration values separate from SQL syntax, enforce strict integer validation, and use controlled database migration or parameterized interfaces where supported.

Treat all settings as untrusted input, review dynamic SQL and DDL construction, apply least-privilege database permissions, and test configuration handlers with unexpected values.

Find out what's already
exploitable in your codebase.