Skip to main content

CodeIgniter CVE-2026-63222

| EUVDEUVD-2026-51398 HIGH
Path Traversal (CWE-22)
2026-07-31 GitHub_M GHSA-hhmc-q9hp-r662
7.5
CVSS 3.1 · Vendor: GitHub_M
Share

Severity by source

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

Remote unauthenticated multipart upload with attacker-controlled filename yields an arbitrary file write (integrity high), with no inherent confidentiality or availability loss, matching AV:N/AC:L/PR:N/I:H.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/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
None
Integrity
High
Availability
None

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:06 cve.org
HIGH 7.5

DescriptionCVE.org

CodeIgniter is a PHP full-stack web framework. Prior to 4.7.4, calling UploadedFile::move() without a second argument uses the client-provided filename without sanitization, allowing a remote attacker to use path traversal sequences to write uploaded content outside the intended directory when the application exposes an upload path. This issue is fixed in version 4.7.4.

AnalysisAI

Path traversal file write in the CodeIgniter4 PHP framework prior to 4.7.4 lets remote unauthenticated attackers place uploaded files outside the intended directory whenever an application calls UploadedFile::move() without an explicit second (name) argument. Because the default used the raw client-supplied filename, traversal sequences such as '../../public/shell.php' could drop attacker-controlled content into web-accessible or sensitive locations, potentially enabling code execution on affected sites. No public exploit identified at time of analysis, though the fixing commit ships a regression test that concretely demonstrates the traversal payload.

Technical ContextAI

The affected component is CodeIgniter4's HTTP file-upload abstraction (system/HTTP/Files/UploadedFile.php), part of a full-stack PHP framework used to build web applications. The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory / path traversal): move() defaulted its target filename to $this->getName(), which returns the untrusted, browser-supplied multipart filename, and passed it into the filesystem path without normalization. The 4.7.4 fix routes the null-name path through the framework's security helper sanitize_filename(), which strips directory separators and traversal sequences (e.g. '../../public/shell.php' becomes 'publicshell.php'); a name explicitly passed by the developer as the second argument is still treated as the caller's responsibility and is not sanitized. The single CPE, cpe:2.3:a:codeigniter4:codeigniter4:*:*:*:*:*:*:*:*, scopes the flaw to the codeigniter4 framework package itself rather than any downstream application.

RemediationAI

Vendor-released patch: 4.7.4 - upgrade the codeigniter4/framework dependency to v4.7.4 or later (composer update codeigniter4/framework) to have move() sanitize the client-provided filename by default; see the advisory at https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-hhmc-q9hp-r662 and release https://github.com/codeigniter4/CodeIgniter4/releases/tag/v4.7.4. If immediate upgrade is not possible, the direct compensating control is to never let move() derive its own name: explicitly pass a safe, application-generated target filename as the second argument (for example a random or hashed name with a validated extension), or call sanitize_filename() on the intended name before use - noting the trade-off that an explicitly supplied name is NOT sanitized by the framework, so the value you pass must already be safe. Additionally, restrict upload destination directories to non-web-served paths and enforce server-side extension/MIME allowlists so that even a stray write cannot become an executable web resource; the side effect is that legitimate workflows relying on original client filenames will see those names normalized or replaced.

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-63222 vulnerability details – vuln.today

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