CVE-2026-63223 is a critical unrestricted file upload vulnerability in CodeIgniter4 affecting versions prior to 4.7.4. The flaw is caused by the is_image and mime_in upload validation rules not independently enforcing a safe client filename extension. In vulnerable configurations, these checks can accept attacker-supplied files whose content and inferred type appear image-like while the preserved client filename retains a server-executable extension. The vulnerable logic in the framework's file validation path trusted MIME-related characteristics without adequately rejecting unsafe client extensions, enabling upload of polyglot or otherwise executable content. Exploitation is possible when an application relies on is_image or mime_in without an additional safe extension check, preserves the original client-supplied filename, and stores the uploaded file in a web-accessible directory where PHP execution is enabled. Under those conditions, a remote attacker can turn the upload flaw into unauthenticated remote code execution.
Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.
What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.
What an attacker gets, and what they’ve been doing with it.
If you can’t patch tonight, do this now.
is_image or mime_in validation with public, script-enabled storage.Patch, then assume compromise.
is_image or mime_in and add an independent safe extension allowlist check, such as ext_in, for permitted image types. Ensure upload workflows do not rely solely on MIME or image validation when deciding whether a file is safe to store or serve.2 valid exploits after Mallory filtered fakes, detection scripts, and README-only repos.
This repository is a small standalone Python exploit for CVE-2026-63223, an unauthenticated CodeIgniter 4 file-upload-to-RCE vulnerability affecting versions prior to 4.7.4. The repo contains 5 files: a README with vulnerability background and usage examples, one Python exploit script (cve_2026_63223.py), requirements.txt, and standard metadata files. The exploit is not part of a larger framework. The main capability is exploitation of vulnerable upload handlers that rely on CodeIgniter 4 is_image/mime_in validation. The script builds a PHP webshell prefixed with valid image magic bytes (GIF/JPEG/PNG) so the upload passes content-based image checks while retaining a .php filename. Once uploaded into a web-accessible PHP-executable directory, the script accesses the resulting shell URL and executes arbitrary commands through a query parameter. The embedded payload also supports follow-on file upload, making it more than a simple verifier. Based on the visible code and README, the exploit supports single-target mode, mass scanning from a target list, configurable upload endpoint and form field, selectable magic-byte disguise method (gif/jpg/png), custom shell filename, custom command execution, interactive pseudo-shell mode, output saving, and multithreaded operation. The script uses requests/urllib3, disables TLS warnings, and includes result tracking and threaded scanning logic. The visible payload template confirms command execution via system($_REQUEST["c"]) and file upload via $_FILES["f"]. Fingerprintable targets and paths are mostly user-supplied rather than hardcoded infrastructure: the default upload endpoint is /upload/avatar, the default upload field is avatar, and the expected shell location is under /uploads/ with a .php filename such as shell.php. Example execution URLs include /uploads/shell.php?c=CMD. No attacker-controlled callback IPs, C2 domains, or fixed external infrastructure are present in the exploit itself. Overall, this is an operational standalone web exploit for pre-auth remote code execution against vulnerable CodeIgniter 4 applications with unsafe upload handling. It performs both exploitation and post-exploitation command execution rather than mere detection.
This repository is a real PoC exploit and self-contained vulnerable lab for CVE-2026-63223, a CodeIgniter 4 unrestricted file upload issue leading to RCE. The repo has 10 files and is organized into: (1) a Python exploit script in exploit/exploit.py, (2) a Dockerized vulnerable CodeIgniter 4.7.3 application, and (3) supporting documentation in README.md. The main exploit capability is bypassing CodeIgniter 4 upload validation rules is_image and mime_in by prepending valid image magic bytes to a PHP payload while keeping an executable filename extension such as .php or .phtml. The exploit script generates these polyglot payloads for GIF, JPEG, or PNG disguises, uploads them via multipart/form-data, attempts to discover the resulting upload path, and then triggers command execution through a webshell parameter c. It supports both single-command execution and an interactive shell mode, making it more than a simple detector but still a straightforward PoC/operational exploit. The vulnerable application is intentionally configured to demonstrate the bug. In vulnerable-app/app/Controllers/Upload.php, the avatar() handler uses is_image only, document() uses mime_in only, and both save the uploaded file using getClientName() into FCPATH . 'uploads/' without renaming or extension filtering. Because uploads are stored under the web root (/var/www/html/public/uploads in the Docker lab), a successfully uploaded PHP file becomes directly reachable and executable. The safe() handler shows the patched pattern by combining is_image with ext_in. Routes are defined in vulnerable-app/app/Config/Routes.php and expose /upload/avatar and /upload/document as vulnerable endpoints, /upload/safe as a control, and /health as a lab check. The HTML view files are simple upload forms that surface success/error messages and, in the vulnerable avatar form, link directly to the uploaded file path. The Dockerfile builds a PHP 8.2 Apache environment, installs CodeIgniter 4.7.3 specifically, enables mod_rewrite, sets the document root to /var/www/html/public, and ensures the uploads directory is writable. docker-compose.yml publishes the lab on localhost:8080 and mounts the vulnerable controller, routes, and views into the container. Overall, the repository’s purpose is to demonstrate and validate unauthenticated remote code execution via unsafe file upload handling in vulnerable CodeIgniter 4 deployments. It is not a framework module, not a fake exploit, and not merely a detection script.
Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.
Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.
13 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.
A critical unauthenticated remote code execution vulnerability in CodeIgniter4's image upload validation logic that can allow a malicious polyglot file to bypass image checks and execute server-side code.
A file upload vulnerability in CodeIgniter4 that can allow remote attackers to upload executable content when unsafe upload validation is used and files are stored with client-supplied filenames in web-accessible script-enabled directories.
Query your assets running an affected version, and investigate the blast radius.
Every observed campaign linking this CVE to a named adversary.
Malware families riding this exploit, with evidence and IOCs.
YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.
Cross-references every affected SKU, including bundled OEM variants.
Community discussion across Reddit, Mastodon, and other social sources.