Skip to main content

CodeIgniter CVE-2026-63221

| EUVDEUVD-2026-51397 CRITICAL
SQL Injection (CWE-89)
2026-07-31 GitHub_M GHSA-c9w5-rwh3-7pm9
9.4
CVSS 3.1 · Vendor: GitHub_M
Share

Severity by source

Vendor (GitHub_M) PRIMARY
9.4 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H
vuln.today AI
9.4 CRITICAL

Network SQLi reachable without privileges when an exposed endpoint feeds user input to deleteBatch(); DELETE context limits confidentiality (C:L) while row manipulation drives I:H/A:H.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
High
Availability
High

Lifecycle Timeline

4
Patch available
Jul 31, 2026 - 06:15 EUVD
Source Code Evidence Fetched
Jul 31, 2026 - 05:45 vuln.today
Analysis Generated
Jul 31, 2026 - 05:45 vuln.today
CVE Published
Jul 31, 2026 - 04:03 cve.org
CRITICAL 9.4

DescriptionCVE.org

CodeIgniter is a PHP full-stack web framework. From 4.3.0 through 4.7.3, Query Builder deleteBatch() substitutes bound values from where() conditions into generated SQL while ignoring their escape flags, allowing user-controlled condition values to be interpreted as SQL. This affects only the deleteBatch() code path. Regular delete() operations escape where() binds correctly. This issue is fixed in version 4.7.4.

AnalysisAI

SQL injection in CodeIgniter4's Query Builder deleteBatch() method (versions 4.3.0 through 4.7.3) allows user-controlled where() condition values to be interpreted as executable SQL because bound values are substituted into the generated DELETE statement while their escape flags are ignored. Only the deleteBatch() batch-delete path is affected; ordinary delete() operations escape their binds correctly. No public exploit was identified at time of analysis, and the flaw is resolved in version 4.7.4.

Technical ContextAI

CodeIgniter4 is a widely used full-stack PHP web framework whose database layer includes a fluent Query Builder. Internally, where() conditions store placeholders (:field:) plus a paired value and an escape flag. The vendor commit (f5e463b) shows that _deleteBatch() in BaseBuilder.php - and its OCI8/Postgre subclasses - replaced those placeholders using str_replace($this->binds[$field][0]) with the raw bound value, never consulting the escape flag at index [1] and never calling $this->db->escape(). This is a textbook CWE-89 (SQL Injection) improper-neutralization defect: data intended as a parameter is concatenated into the SQL text. The fix introduces convertWhereBindsForBatch(), which honors the escape flag, escapes scalars via db->escape(), and wraps array/whereIn() values in a parenthesized escaped list. The single affected CPE is cpe:2.3:a:codeigniter4:codeigniter4.

RemediationAI

Vendor-released patch: 4.7.4 - upgrade the codeigniter4/codeigniter4 dependency to 4.7.4 or later (composer update codeigniter4/framework) as the primary and definitive fix, per GHSA-c9w5-rwh3-7pm9 and the release at https://github.com/codeigniter4/CodeIgniter4/releases/tag/v4.7.4. If you cannot upgrade immediately, the effective compensating control is to avoid the vulnerable code path: refactor code so batch deletes that need user input do not pass unescaped user data through where()/whereIn() into deleteBatch() - instead use standard delete() (which escapes binds correctly) or pre-validate/whitelist the condition values, accepting that this requires code changes and may reduce batch-delete efficiency. Additionally, strictly validate and type-cast user input feeding any delete condition, and confirm the fix by porting the vendor's regression tests (testDeleteBatchEscapesWhereBinds) from commit f5e463b.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

Share

CVE-2026-63221 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy