{"id":"CVE-2026-63223","aliases":["EUVD-2026-51399","GHSA-mmj4-63m4-r6h5","UBUNTU-CVE-2026-63223"],"status":"published","title":"CodeIgniter: Uploaded file extension validation bypass in is_image and mime_in rules","description":"CodeIgniter is a PHP full-stack web framework. Prior to 4.7.4, the is_image and mime_in upload validation rules do not independently enforce a safe client filename extension, allowing a remote attacker to upload executable content when an application preserves the client filename and stores uploads in a web-accessible script-enabled directory. Applications are impacted when they validate uploads using is_image or mime_in without an independent safe extension check (such as ext_in on patched versions), save uploaded files using the client-supplied filename, and place uploads in a web-accessible directory where PHP files can execute. This issue is fixed in version 4.7.4.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.008,"percentile":0.56842,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-434"],"published":"2026-07-31T04:10:28Z","modified":"2026-10-28T02:30:27Z","exploits":[{"source":"pocgithub","id":"imbas007/CVE-2026-63223-POC","title":"imbas007/CVE-2026-63223-POC","date":"2026-08-03","url":"https://github.com/imbas007/CVE-2026-63223-POC"},{"source":"pocgithub","id":"myeongji1/cve-2026-63223-ctf","title":"myeongji1/cve-2026-63223-ctf","date":"2026-10-14","url":"https://github.com/myeongji1/cve-2026-63223-ctf"},{"source":"pocgithub","id":"shinthink/CVE-2026-63223","title":"shinthink/CVE-2026-63223","date":"2026-08-04","url":"https://github.com/shinthink/CVE-2026-63223"}],"fixes":[{"ecosystem":"Packagist","package":"codeigniter4/framework","fixed_in":["4.7.4"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Packagist","package":"codeigniter4/framework","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.7.4"}]}]},{"source":"osv","ecosystem":"Packagist","package":"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"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"php-codeigniter-framework","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.1.13+dfsg1-1","3.1.13+dfsg1-2","3.1.13+dfsg1-2ubuntu2","3.1.13+dfsg1-3"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"php-codeigniter-framework","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.1.13+dfsg1-8","3.1.13+dfsg1-9"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"php-codeigniter-framework","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.1.13+dfsg1-6","3.1.13+dfsg1-8"]}],"products":[{"vendor":"codeigniter4","product":"codeigniter4"}],"references":[{"url":"https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-mmj4-63m4-r6h5","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/codeigniter4/CodeIgniter4/commit/b6e9a4fa1dca2df3d3f261bdf61532df8c6420aa","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/codeigniter4/CodeIgniter4/releases/tag/v4.7.4","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63223","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-mmj4-63m4-r6h5"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/63xxx/CVE-2026-63223.json","tags":["advisory"]},{"url":"https://github.com/codeigniter4/CodeIgniter4","tags":["package"]},{"url":"https://ubuntu.com/security/CVE-2026-63223","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-63223","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-63223","title":"CodeIgniter: Uploaded file extension validation bypass in is_image and mime_in rules","description":"CodeIgniter is a PHP full-stack web framework. Prior to 4.7.4, the is_image and mime_in upload validation rules do not independently enforce a safe client filename extension, allowing a remote attacker to upload executable content when an application preserves the client filename and stores uploads in a web-accessible script-enabled directory. Applications are impacted when they validate uploads using is_image or mime_in without an independent safe extension check (such as ext_in on patched versions), save uploaded files using the client-supplied filename, and place uploads in a web-accessible directory where PHP files can execute. This issue is fixed in version 4.7.4.","status":"published","published":"2026-07-31T04:10:28.179Z","modified":"2026-07-31T23:16:24.574Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna"}],"cwes":["CWE-434"],"updated_at":"2026-11-02T14:19:55.914391Z"}],"euvd":[{"id":"EUVD-2026-51399","description":"CodeIgniter is a PHP full-stack web framework. Prior to 4.7.4, the is_image and mime_in upload validation rules do not independently enforce a safe client filename extension, allowing a remote attacker to upload executable content when an application preserves the client filename and stores uploads in a web-accessible script-enabled directory. Applications are impacted when they validate uploads using is_image or mime_in without an independent safe extension check (such as ext_in on patched versions), save uploaded files using the client-supplied filename, and place uploads in a web-accessible directory where PHP files can execute. This issue is fixed in version 4.7.4.","status":"published","published":"2026-07-31T04:10:28Z","modified":"2026-07-31T23:16:24Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T18:02:25.159179Z"}],"ghsa":[{"id":"GHSA-mmj4-63m4-r6h5","title":"CodeIgniter: Uploaded file extension validation bypass in `is_image` and `mime_in` rules","description":"### 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()`.","status":"published","published":"2026-08-07T18:24:21Z","modified":"2026-08-07T18:24:23Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-434"],"updated_at":"2026-11-02T14:40:58.888637Z"}],"nvd":[{"id":"CVE-2026-63223","description":"CodeIgniter is a PHP full-stack web framework. Prior to 4.7.4, the is_image and mime_in upload validation rules do not independently enforce a safe client filename extension, allowing a remote attacker to upload executable content when an application preserves the client filename and stores uploads in a web-accessible script-enabled directory. Applications are impacted when they validate uploads using is_image or mime_in without an independent safe extension check (such as ext_in on patched versions), save uploaded files using the client-supplied filename, and place uploads in a web-accessible directory where PHP files can execute. This issue is fixed in version 4.7.4.","status":"published","published":"2026-07-31T06:16:32.297Z","modified":"2026-09-08T20:51:43.49Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"secondary"}],"cwes":["CWE-434"],"updated_at":"2026-11-02T14:12:33.955581Z"}],"osv":[{"id":"CVE-2026-63223","title":"CodeIgniter: Uploaded file extension validation bypass in is_image and mime_in rules","description":"CodeIgniter is a PHP full-stack web framework. Prior to 4.7.4, the is_image and mime_in upload validation rules do not independently enforce a safe client filename extension, allowing a remote attacker to upload executable content when an application preserves the client filename and stores uploads in a web-accessible script-enabled directory. Applications are impacted when they validate uploads using is_image or mime_in without an independent safe extension check (such as ext_in on patched versions), save uploaded files using the client-supplied filename, and place uploads in a web-accessible directory where PHP files can execute. This issue is fixed in version 4.7.4.","status":"published","published":"2026-07-31T04:10:28.179Z","modified":"2026-10-28T02:30:27.273355684Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-434"],"updated_at":"2026-11-02T15:45:13.306117Z"},{"id":"GHSA-mmj4-63m4-r6h5","title":"CodeIgniter: Uploaded file extension validation bypass in `is_image` and `mime_in` rules","description":"### 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()`.","status":"published","published":"2026-08-07T18:24:21Z","modified":"2026-08-07T18:31:29.628130028Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-434"],"updated_at":"2026-11-02T15:46:52.170928Z"},{"id":"UBUNTU-CVE-2026-63223","description":"CodeIgniter is a PHP full-stack web framework. Prior to 4.7.4, the is_image and mime_in upload validation rules do not independently enforce a safe client filename extension, allowing a remote attacker to upload executable content when an application preserves the client filename and stores uploads in a web-accessible script-enabled directory. Applications are impacted when they validate uploads using is_image or mime_in without an independent safe extension check (such as ext_in on patched versions), save uploaded files using the client-supplied filename, and place uploads in a web-accessible directory where PHP files can execute. This issue is fixed in version 4.7.4.","status":"published","published":"2026-07-31T06:16:00Z","modified":"2026-10-17T12:59:15.342088543Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T16:56:43.630667Z"}]}}
