{"id":"GHSA-mmj4-63m4-r6h5","summary":"CodeIgniter: Uploaded file extension validation bypass in `is_image` and `mime_in` rules","details":"### Impact\nThis is an unsafe file upload validation vulnerability that can lead to remote code execution in vulnerable application configurations.\n\nApplications are impacted when they:\n- validate uploads using `is_image` or `mime_in` without an independent safe extension check, such as `ext_in` on patched versions\n- save uploaded files using the client-supplied filename\n- place uploads in a web-accessible directory where PHP files can execute\n\n### Patches\nUpgrade to v4.7.4 or later.\n\n### Workarounds\n- Save uploads outside the public web root, preferably under `writable/uploads`.\n- Use `$file-\u003estore()` or `$file-\u003emove($path, $file-\u003egetRandomName())` instead of preserving the original client filename.\n- Disable script execution in any public upload directory.\n- Manually verify the client filename extension before moving the file.\n- For image uploads, reject files when `$file-\u003egetClientExtension()` is not an allowed image extension.\n- For exact MIME-type validation, reject files when `$file-\u003egetClientExtension()` does not match `$file-\u003eguessExtension()`.","aliases":["CVE-2026-63223"],"modified":"2026-08-07T18:31:29.628130028Z","published":"2026-08-07T18:24:21Z","database_specific":{"cwe_ids":["CWE-434"],"severity":"CRITICAL","github_reviewed":true,"github_reviewed_at":"2026-08-07T18:24:21Z","nvd_published_at":"2026-07-31T06:16:32Z"},"references":[{"type":"WEB","url":"https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-mmj4-63m4-r6h5"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63223"},{"type":"WEB","url":"https://github.com/codeigniter4/CodeIgniter4/commit/b6e9a4fa1dca2df3d3f261bdf61532df8c6420aa"},{"type":"PACKAGE","url":"https://github.com/codeigniter4/CodeIgniter4"},{"type":"WEB","url":"https://github.com/codeigniter4/CodeIgniter4/releases/tag/v4.7.4"}],"affected":[{"package":{"name":"codeigniter4/framework","ecosystem":"Packagist","purl":"pkg:composer/codeigniter4/framework"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.7.4"}]}],"versions":["4.0.0","4.0.0-rc.4","v4.0.0-alpha.3","v4.0.0-alpha.4","v4.0.0-alpha.5","v4.0.0-beta.1","v4.0.0-beta.2","v4.0.0-beta.3","v4.0.0-beta.4","v4.0.0-rc.1","v4.0.0-rc.2","v4.0.0-rc.2.1","v4.0.0-rc.3","v4.0.1","v4.0.2","v4.0.3","v4.0.4","v4.0.5","v4.1.0","v4.1.1","v4.1.2","v4.1.3","v4.1.4","v4.1.5","v4.1.6","v4.1.7","v4.1.8","v4.1.9","v4.2.0","v4.2.1","v4.2.10","v4.2.11","v4.2.12","v4.2.2","v4.2.3","v4.2.4","v4.2.5","v4.2.6","v4.2.7","v4.2.8","v4.2.9","v4.3.0","v4.3.1","v4.3.2","v4.3.3","v4.3.4","v4.3.5","v4.3.6","v4.3.7","v4.3.8","v4.4.0","v4.4.1","v4.4.2","v4.4.3","v4.4.4","v4.4.5","v4.4.6","v4.4.7","v4.4.8","v4.5.0","v4.5.1","v4.5.2","v4.5.3","v4.5.4","v4.5.5","v4.5.6","v4.5.7","v4.5.8","v4.6.0","v4.6.1","v4.6.2","v4.6.3","v4.6.4","v4.6.5","v4.7.0","v4.7.1","v4.7.2","v4.7.3"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-mmj4-63m4-r6h5/GHSA-mmj4-63m4-r6h5.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"}]}