Skip to main content
Meet us at Black Hat USA 2026— Las Vegas, August 1–6Book a Meeting
Mallory
CriticalCISA KEVExploited in the wildPublic exploit

Unauthenticated RCE in Joomla Content Editor (JCE) Profile Import

IdentifiersCVE-2026-48907CWE-284· Improper Access Control

CVE-2026-48907 is a critical improper access control vulnerability in Widget Factory's Joomla Content Editor (JCE) extension for Joomla. The flaw affects the profile import functionality exposed via the JCE profiles.import task and allows unauthenticated users to create new editor profiles. Multiple supporting sources indicate the vulnerable import path lacks an authentication check and can be abused to upload attacker-controlled files, including PHP payloads, through the editor profile import workflow. Supporting analysis also indicates insufficient validation of uploaded content and file type restrictions during import, enabling arbitrary PHP file placement on the server, commonly in writable locations such as the configured tmp directory. If the uploaded PHP file is reachable and executable by the web server, the attacker can invoke it to achieve remote code execution.

Share:
For your environment

Are you exposed to this one?

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.

ANALYST BRIEF

Impact, mitigation & remediation

What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.

Impact

What an attacker gets, and what they’ve been doing with it.

Successful exploitation allows an unauthenticated remote attacker to upload and execute arbitrary PHP code on the target Joomla server. This can result in full compromise of the affected website, deployment of webshells, persistent backdoor access, arbitrary command execution with the privileges of the web server user, modification or destruction of site content, theft of configuration and credential material, and potential follow-on lateral movement or privilege escalation depending on the host environment. The vulnerability is reported as actively exploited in the wild, including automated mass exploitation.

Mitigation

If you can’t patch tonight, do this now.

If immediate patching is not possible, reduce exploitability by blocking PHP execution in writable upload/staging directories such as tmp, images, media, and uploads; restrict access to the vulnerable JCE component where feasible; monitor and alert on requests to index.php?option=com_jce&task=profiles.import; and use web server controls such as Apache .htaccess or equivalent NGINX rules to deny execution of .php, .phtml, .phar, and similar script files in non-code directories. Additional hardening mentioned in supporting content includes restricting administrative access by IP allowlisting and enforcing MFA on administrator accounts. These measures are temporary and do not replace upgrading to a fixed JCE version.

Remediation

Patch, then assume compromise.

Upgrade JCE to a fixed release immediately. Supporting content consistently indicates that JCE 2.9.99.5 contains the initial fix and JCE 2.9.99.6 or later is the preferred remediation because it adds additional hardening. For deployments that cannot move to the latest branch, apply the vendor-provided legacy patch where available. After patching, review JCE editor profiles for unauthorized additions, inspect writable directories such as tmp, images, and media for unexpected PHP or similarly suspicious files, remove attacker-created profiles and uploaded payloads, rotate administrator, database, hosting, and FTP credentials, and perform a full server-side malware scan because patching alone does not remove post-compromise artifacts.
PUBLIC EXPLOITS

Exploits

7 valid exploits after Mallory filtered fakes, detection scripts, and README-only repos (2 hidden).

VALID 7 / 9 TOTALView more in app
CVE-2026-48907MaturityPoCFrameworknucleiVerified exploit

Repository contains a small exploit PoC set for an unauthenticated Joomla JCE file-upload-to-RCE issue labeled CVE-2026-48907. There are 5 files total: one Python exploit script, one Nuclei template, a README, license, and .gitignore. The Python script is the main operational exploit: it accepts either a single URL or a file of targets, reads an operator-supplied local payload file, fetches the target homepage to extract a CSRF token, submits a multipart POST to `/index.php?option=com_jce` with `task=profiles.import`, uploads the payload as a randomly named `.xml.php` file, and then requests `/tmp/<filename>` to confirm successful upload and likely code execution. This makes it a real exploit rather than a detector, because it performs the upload and can deliver arbitrary PHP content. The Nuclei YAML is a framework-based verification template that follows the same three-step flow: GET `/` to extract `csrf.token`, POST the upload with a fixed PHP expression payload, then GET `/tmp/{{tmp_file}}` and match on output `3105`. Because the repository includes a Nuclei template, it belongs to a framework, but the repo also includes standalone exploit code. The exploit capability is arbitrary unauthenticated file upload leading to remote code execution on vulnerable JCE installations. Fingerprintable targets are the Joomla root page, the JCE import endpoint `/index.php?option=com_jce`, and the uploaded file path under `/tmp/`. The README largely documents usage and provides example PHP payloads such as a command web shell and eval backdoor, reinforcing that the intended post-exploitation result is attacker-controlled PHP execution.

0xgh057r3c0nDisclosed Jun 22, 2026pythonyamlnetworkweb
CVE-2026-48907MaturityPoCVerified exploit

The repository contains a single Python exploit script, ssi4.py, presented as an all-in-one exploit for CVE-2026-48907 affecting Joomla/JCE. It is not part of a larger framework. The script is operational rather than a simple PoC: it supports single-target or bulk-target processing, URL normalization and extraction from files/stdin, multithreaded execution via ThreadPoolExecutor, colored console output, result logging, and multiple exploitation modes. Core purpose: identify Joomla sites with JCE-related components, probe likely vulnerable endpoints, obtain CSRF-style tokens from several front-end and administrator paths, attempt exploitation through JCE task endpoints, and write a server-side shell into common writable web directories. It then verifies successful code execution and records either full RCE or file-write-only outcomes. Notable exploit capabilities inferred from the code: - Fingerprinting JCE presence using known static paths such as /plugins/editors/jce/jce.xml and /administrator/components/com_jce/jce.xml. - Probing JCE application endpoints including /index.php?option=com_jce&task=cpanel and /index.php?option=com_jce&task=profiles.import. - Collecting CSRF tokens from multiple public/admin pages using regex patterns for csrf.token and hidden input fields. - Trying alternate headers (X-Forwarded-For and X-Real-IP set to 127.0.0.1) to work around simple WAF or access controls. - Dropping either a PHP webshell or an SSI-based shell into tmp/, cache/, or administrator/cache/ using various executable extensions (.php, .phtml, .php3, .php7, .php5, .phar, .pht) and .shtml for SSI. - Verifying command execution using id and regex matching for uid=... gid=... output. - Distinguishing between successful RCE and write-only conditions, then saving results to output files. Payload details: - The PHP payload is a minimal passthru-based webshell that executes commands supplied via cmd and uses id for validation. - The SSI payload is an HTML/SSI command terminal labeled 'SSInjection Terminal' that executes commands from the query string and renders output in a styled browser interface. Repository structure is minimal: one standalone Python file with helper routines for target loading, URL parsing, WAF heuristics, version/patch checks, payload generation, scanning/exploitation orchestration, and a main() entry point. Overall, this is a bulk-capable web exploitation tool aimed at turning a JCE file-write/RCE condition into persistent webshell access.

sec0xDisclosed Jun 22, 2026pythonwebnetwork
CVE-2026-48907MaturityPoCVerified exploit

This repository is a small, single-purpose exploit PoC for CVE-2026-48907 affecting the JCE editor extension for Joomla. It contains two files: a README describing the vulnerability at a high level and a Python script, poc.py, which performs the exploit flow. The script is the main entry point and uses the requests Session API to maintain cookies across requests. Operationally, the exploit takes one argument: a target base URL. It then reads a local PHP payload file named alfa.php from the current directory. Next, it sends a GET request to the target root path to scrape a CSRF token using one of two regex patterns. With that token, it submits a multipart POST request to /index.php?option=com_jce with task=profiles.import and uploads the local alfa.php content as profile_file. After a short delay, it attempts to access /tmp/alfa.php on the target to verify upload success and trigger execution. The exploit’s main capability is unauthenticated arbitrary PHP upload followed by remote execution, assuming the vulnerable JCE import functionality is exposed and the uploaded file lands in a web-accessible, executable temporary directory. This is more than a pure detector because it actively uploads and executes attacker-controlled code. The payload itself is not embedded in the repository; instead, the operator supplies it via alfa.php, making the exploit operational but basic rather than framework-grade. There are no external C2 servers, hardcoded IPs, or third-party network services referenced beyond the operator-supplied target URL and the target-local Joomla/JCE endpoints.

wearehackers160Disclosed Jun 17, 2026pythonmarkdownweb
CVE-2026-48907MaturityPoCVerified exploit

This repository is a collection of multiple independent CVE-2026-48907 PoCs targeting unauthenticated remote code execution in the Joomla JCE component, rather than a single cohesive exploit project. It contains three Python exploit/scanner variants and one educational lab-oriented PoC with Docker environments. The main exploit capability across the Python scripts is consistent: fingerprint JCE by requesting known plugin/component files, fetch a CSRF token from the public Joomla homepage, abuse the unauthenticated JCE profile import feature at /index.php?option=com_jce to loosen upload restrictions or stage attacker-controlled content, upload a PHP payload through JCE browser/plugin RPC or via profile import staging, and finally verify code execution by requesting the uploaded file over HTTP. Successful exploitation yields a reachable PHP webshell URL and arbitrary command execution via HTTP parameters. The 0xBlackash sample is a straightforward mass scanner/uploader that writes confirmed shells to webshell.txt. The 87achrafg-stack and webshellseo8 variants are more feature-rich OPERATIONAL scanners with multiple payload encodings, GIF-header bypass attempts, extra JCE checks, and in one case a custom upload-capable PHP shell. The ywh-jfellus subtree is more educational and self-contained. It includes poc.py plus vulnerable/ and patched/ Docker Compose labs. That PoC demonstrates a slightly different exploitation path: the imported profile file is staged into Joomla's web-accessible tmp/ directory as an .xml.php file, then fetched from /tmp/ to confirm PHP execution. The lab binds Joomla to 127.0.0.1:9999 and installs either JCE 2.9.99.4 (vulnerable) or 2.9.99.5 (patched) via GitHub release ZIP URLs in custom entrypoint scripts. Notable repository quality observations: one README (87achrafg-stack) appears mismatched and describes a different WordPress-related CVE, but the Python file itself still targets JCE/Joomla. Despite some truncation in the provided content, the available code clearly implements real exploitation logic rather than mere detection. Overall, this is an exploit repository with mass-scanning and webshell-deployment functionality for CVE-2026-48907, plus a reproducible local lab for validation and patch comparison.

HORKimhabDisclosed Jun 17, 2026pythonbashwebnetwork
CVE-2026-48907MaturityPoCVerified exploit

Repository contains a single Python exploit script and a README. The Python file is a multithreaded mass scanner/exploit for a claimed Joomla JCE unauthenticated RCE, labeled CVE-2026-48907. Its workflow is: normalize target URLs, fingerprint JCE-related files, probe a JCE endpoint, fetch the site root to extract a CSRF token, then attempt an import/upload/rename chain to place a PHP webshell. It uses several PHP payload variants, including minimal command-execution shells and GIF89a-prefixed payloads intended to bypass content-type or magic-byte checks. Successful exploitation is validated by actual PHP execution, and confirmed shell URLs are written to webshell.txt. The code is operational rather than a simple detector because it includes upload and execution payloads, concurrency support, output handling, and confirmation logic. The repository README is inconsistent with the code: it describes a different CVE and WordPress /wp-json behavior, suggesting the README is copied or unrelated. Based on the available code, the real purpose of the repository is Joomla/JCE webshell deployment and RCE verification across multiple targets.

87achrafg-stackDisclosed Jun 13, 2026pythonmarkdownwebnetwork
CVE-2026-48907MaturityPoCVerified exploit

This repository is a small educational exploit lab for CVE-2026-48907, an unauthenticated RCE affecting Joomla Content Editor (JCE) up to 2.9.99.4. The main exploit logic is in poc.py, a Python script using requests.Session to interact with a Joomla instance. It first fetches the site root to extract a CSRF token from page content, then submits a multipart POST to /index.php?option=com_jce with task=profiles.import and an uploaded file named like cve-2026-48907-XXXX.xml.php. The uploaded content is a minimal PHP payload (<?= 45*69 ?>). After a short delay, the script requests /tmp/<filename> and checks whether the server executed the PHP code, confirming RCE. The exploit capability is straightforward but real: unauthenticated remote upload through JCE profile import followed by direct execution from the Joomla tmp directory. The PoC does not provide an interactive shell or post-exploitation tooling; it is a verification exploit that demonstrates arbitrary PHP execution with a hardcoded payload. Repository structure is simple: README.md explains the vulnerability and usage; poc.py is the exploit; vulnerable/ and patched/ each contain a docker-compose.yaml and entrypoint.sh to build comparison labs. The vulnerable lab installs JCE 2.9.99.4, while the patched lab installs 2.9.99.5. Both labs expose Joomla on 127.0.0.1:9999 and use MariaDB as a backend. The entrypoint scripts are largely Joomla container setup logic, with the notable difference being the JCE package URL installed at the end. Overall, this is a legitimate operational PoC repository intended to validate whether a target Joomla/JCE deployment is exploitable under the specific condition that PHP execution from the web-accessible tmp/ directory is allowed.

ywh-jfellusDisclosed Jun 11, 2026markdownyamlwebnetwork
CVE-2026-48907-Unauthenticated-RCE-in-JCEMaturityPoCVerified exploit

Repository contains a single Python exploit script and a short README. The main file, CVE-2026-48907.py, is an operational mass scanner/exploit for an alleged unauthenticated RCE in Joomla's JCE component. It is not framework-based. The script accepts a target list, uses multithreading, normalizes targets to HTTPS if no scheme is provided, and scans each host for JCE indicators using several known component/plugin file paths. It then checks a JCE endpoint (/index.php?option=com_jce&task=cpanel.feed), retrieves a Joomla CSRF token from the homepage, and attempts to import a crafted JCE profile that enables permissive upload settings including php/gif file types, disabled MIME validation, and rename capability. After that, it tries multiple PHP webshell payload variants, including GIF89a-prefixed payloads for content-type or magic-byte bypasses, to achieve code execution. The exploit's stated goal is to save only confirmed RCE results, meaning it verifies that uploaded PHP actually executes before recording the resulting shell URL to webshell.txt. Overall, this is a real exploit-oriented mass exploitation tool rather than a detector: it fingerprints targets, modifies JCE configuration through profile import, uploads a webshell, and confirms arbitrary command execution over HTTP.

webshellseo8Disclosed Jun 9, 2026pythonmarkdownwebnetwork
EXPOSURE SURFACE

Affected products & vendors

Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.

VendorProductType
Widget FactoryJceapplication

Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.

ACTIVITY FEED

Recent activity

104 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.

What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets are affected, which adversaries are exploiting it right now, which detections to deploy, and what to do tonight.
Exposure mapping

Query your assets running an affected version, and investigate the blast radius.

Threat actor evidence

Every observed campaign linking this CVE to a named adversary.

Associated malware3

Malware families riding this exploit, with evidence and IOCs.

Detection signatures1

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

Vendor-by-vendor mapping

Cross-references every affected SKU, including bundled OEM variants.

Social activity87

Community discussion across Reddit, Mastodon, and other social sources.