← Back to Feed CACHED · 2026-07-13 20:14:37 · CACHE_KEY CVE-2026-48939
CVE-2026-48939 · CWE-434 · Disclosed 2026-06-20

A vulnerability in the iCagenda extension for Joomla

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A public event-submission form that hands anonymous strangers a PHP shell drop-box wired straight to the web root

CVE-2026-48939 is an unauthenticated arbitrary file upload in the iCagenda Joomla extension's frontend event-registration form. The controller layer skips file-type checks (access control is only enforced at the view layer — CWE-284/CWE-434), and uploads land directly under /images/icagenda/frontend/attachments/ inside the web root, where PHP is executable. Any anonymous internet visitor can POST a .php webshell and immediately fetch it via GET. Affected: iCagenda 1.0.0 through 4.0.7; fixed in 4.0.8 (mainline, 2026-06-15) and 3.9.15 (legacy branch, 2026-06-16).

The vendor CVSS of 9.8 (some feeds list 10.0) is accurate — this is a textbook pre-auth RCE on a component whose entire purpose is to be internet-facing. Add active exploitation since June 15, 2026 and CISA KEV inclusion with a remediation due date of July 13, 2026 (yesterday), and there is no plausible reading that softens this. If iCagenda is installed on a public Joomla site, assume compromise until proven otherwise.

"Unauth PHP shell upload, KEV-listed, mass-exploited since June 15. Patch or rip out iCagenda by end of week — no negotiation."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Discover an iCagenda-enabled Joomla site

Attacker fingerprints Joomla sites exposing /index.php?option=com_icagenda or the event submission route. Mass-scanning uses httpx + nuclei templates that landed within hours of the advisory, plus Shodan/FOFA queries for com_icagenda. Google dorks like inurl:option=com_icagenda return tens of thousands of results.
Conditions required:
  • Target runs Joomla with iCagenda ≤ 4.0.7
  • Frontend event submission form is reachable (default)
Where this breaks in practice:
  • Some admins disable the public submission form
  • WAFs may block com_icagenda fingerprint requests
Detection/coverage: Nuclei template CVE-2026-48939.yaml published; Wordfence-style Joomla plugin scanners flag installed version.
STEP 02

POST a PHP webshell via the attachment field

Attacker submits the event form with a multipart file field containing a .php (or .phtml, .phar) payload. The controller writes the file verbatim to /images/icagenda/frontend/attachments/<filename> without extension whitelist, MIME sniffing, or filename randomization. Public PoC by shinthink on GitHub automates this in ~15 lines of Python.
Conditions required:
  • HTTP POST reachable to the event submission endpoint
  • No upload-blocking WAF rule in front
Where this breaks in practice:
  • ModSecurity CRS PL2+ blocks .php in multipart uploads
  • Cloudflare/Sucuri managed rulesets shipped virtual patches within 48h
Detection/coverage: Web access logs show POST to iCagenda submit endpoint from unusual IPs, followed by GET of a new .php in the attachments dir.
STEP 03

Execute the webshell and pivot

Attacker requests GET /images/icagenda/frontend/attachments/shell.php?cmd=id. PHP-FPM executes as the webserver user (typically www-data/apache/nginx). Observed post-ex activity per Sucuri and TheHackerNews reporting: cron backdoors, credential theft from configuration.php, mass SEO spam injection, and pivoting to shared-hosting neighbours.
Conditions required:
  • PHP execution enabled in the uploads path (Apache/Nginx default)
  • Outbound egress permitted for C2
Where this breaks in practice:
  • Nginx location ~ /images/ { ... } blocks with .php deny stops it dead
  • suEXEC / open_basedir limits lateral file access
Detection/coverage: EDR on the host flags php spawning sh, wget, curl, or python; egress to known C2 IPs (feeds from Abuse.ch, Sucuri).
STEP 04

Establish persistence and monetize

Attacker plants a secondary backdoor in the Joomla template index.php or a fake com_ajax plugin, harvests configuration.php (DB creds), and either sells access, deploys a coin miner, or joins the box into a Balbooa/iCagenda-fed botnet observed by CISA.
Conditions required:
  • Write access to Joomla directory tree (usually yes for www-data)
  • No FIM / immutable-file protections
Where this breaks in practice:
  • Read-only filesystem for /administrator breaks persistence
  • OSSEC/Wazuh FIM alerts on Joomla core modifications
Detection/coverage: File integrity monitoring on Joomla install root; unexpected .htaccess changes.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusActive mass exploitation since 2026-06-15 (zero-day). Reported by CISA, TheHackerNews, and Sucuri.
KEV statusListed on CISA KEV; remediation due date 2026-07-13 (federal deadline already passed).
Public PoCshinthink/CVE-2026-48939 — pre-auth RCE exploit, ~15 lines Python. Nuclei template also public.
EPSS0.01505 — deceptively low; EPSS lags fresh KEV entries. Treat as ≥0.90 given confirmed ITW mass-exploit.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hnetwork, no auth, no UI, full CIA. Score 9.8 (NVD) / 10.0 (vendor).
Affected versionsiCagenda 1.0.0 through 4.0.7 (all released versions prior to the patch).
Fixed versions4.0.8 (2026-06-15, mainline) and 3.9.15 (2026-06-16, legacy 3.x branch).
Exposure dataShodan/FOFA return tens of thousands of Joomla sites with com_icagenda fingerprint. Small-org and municipality sites over-represented.
Disclosure2026-06-20 — disclosed AFTER exploitation began; classic zero-day pattern.
ReporterSucuri incident-response team surfaced the pattern in customer logs; JoomliC (vendor) shipped fix within hours.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

Verdict is CRITICAL because the single most decisive factor is active KEV-listed mass exploitation of an unauthenticated pre-auth RCE on a public-facing web component — every friction check (auth, UI, network position) is bypassed by design. The affected role — a Joomla extension on a public site — IS the high-value external footprint; the blast radius is full webserver RCE with pivot potential into DB, tenant, and shared-hosting neighbours.

HIGH Exploitation-in-the-wild confirmation
HIGH Patch availability and version identification
MEDIUM Installed-base exposure count (Shodan fingerprint is heuristic)

Why this verdict

  • KEV-listed with due date already passed (2026-07-13) — CISA has independently validated exploitation; federal agencies are already out of SLA.
  • Zero prerequisites: AV:N/AC:L/PR:N/UI:N. The attacker needs an HTTP client and the target URL. No credentials, no phishing, no internal foothold.
  • Public weaponized exploit on GitHub plus Nuclei template — commoditized, script-kiddie tier.
  • Role multiplier: iCagenda by design runs on public Joomla sites. Every install occupies the internet-facing role — there is no low-value deployment tier. Blast radius is host RCE → DB credential theft (Joomla configuration.php) → tenant/shared-host pivot.
  • Friction audit fails to reduce severity: no friction point narrows the population. WAFs help but are not universal; Joomla small-shop deployments rarely front-end with ModSecurity.

Why not higher?

CRITICAL is the ceiling in this schema. Impact is capped at webserver-user RCE — it is not kernel, not identity provider, not hypervisor. A single compromised Joomla site is unlikely to cascade to enterprise-fleet takeover unless the site shares infrastructure with more sensitive tiers.

Why not lower?

Every downgrade lever fails: exploitation is active and confirmed (not theoretical), the exploit is public (not researcher-only), there are no auth prerequisites (not post-auth), and the affected component is definitionally internet-facing (not internal-only). Downgrading below HIGH would require ignoring KEV and ITW evidence.

05 · Compensating Control

What to do — in priority order.

  1. Take iCagenda offline immediately if you cannot patch today — Unpublish or uninstall the com_icagenda component via Joomla Extensions Manager. This is the noisgate CRITICAL mitigation SLA of ≤3 days — for KEV+ITW the effective window is hours. If the extension is business-critical, block frontend event submission via .htaccess deny on the submit route until patched.
  2. Deny PHP execution in the uploads directory — Add an Nginx location ~ /images/icagenda/.*\.php$ { deny all; } or Apache <FilesMatch "\.ph(p[3457]?|t|tml|ar)$">Require all denied</FilesMatch> block scoped to /images/icagenda/frontend/attachments/. Deploy within hours, well inside the ≤3-day mitigation SLA.
  3. Hunt for existing webshells — Search /images/icagenda/frontend/attachments/ recursively for .php, .phtml, .phar, and any file with PHP shebang or <?php content. Grep webserver access logs from 2026-06-01 onward for POSTs to iCagenda submission endpoints followed by GETs of new files in that directory. Assume-breach if the extension was exposed.
  4. Rotate Joomla DB credentials and admin passwords — If exposure existed prior to patching, treat configuration.php as leaked. Rotate DB user password, Joomla super-user passwords, any API tokens embedded in the config, and revoke sessions.
  5. Deploy WAF virtual patch — Cloudflare, Sucuri, and Wordfence have published rules blocking multipart uploads containing PHP magic bytes to iCagenda endpoints. Enable within hours as a stopgap while planning the version upgrade.
What doesn't work
  • Renaming the extension directory — the vulnerable route is registered by Joomla's component router, not by directory name.
  • MFA on the Joomla admin panel — the exploit does not touch admin auth; it hits the anonymous public form.
  • IP-allowlisting the admin panel — same reason; the endpoint is public by design.
  • Relying on disable_functions in PHP — the shell still gets code execution and can proxy via file writes even if exec/system are blocked.
06 · Verification

Crowdsourced verification payload.

Run this on the Joomla webserver host as the user owning the Joomla install (or root). Invoke as ./check_icagenda.sh /var/www/html. It reads the iCagenda manifest, compares version to the patched baselines, and inspects the attachments directory for suspicious PHP artifacts.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# noisgate verifier — CVE-2026-48939 (iCagenda Joomla RCE)
# Usage: ./check_icagenda.sh <joomla_webroot>
# Exits 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN
set -u
ROOT="${1:-/var/www/html}"
MANIFEST="$ROOT/administrator/components/com_icagenda/icagenda.xml"
ATTACH_DIR="$ROOT/images/icagenda/frontend/attachments"

if [ ! -f "$MANIFEST" ]; then
  echo "UNKNOWN: iCagenda manifest not found at $MANIFEST"
  exit 2
fi

VER=$(grep -oE '<version>[^<]+' "$MANIFEST" | head -n1 | sed 's/<version>//')
if [ -z "$VER" ]; then
  echo "UNKNOWN: could not parse version"
  exit 2
fi
echo "Installed iCagenda version: $VER"

# semver-ish compare: patched if >=4.0.8, or >=3.9.15 on 3.x branch
vuln=1
IFS='.' read -r MAJ MIN PAT <<< "$VER"
MAJ=${MAJ:-0}; MIN=${MIN:-0}; PAT=${PAT:-0}
if [ "$MAJ" -gt 4 ]; then vuln=0; fi
if [ "$MAJ" -eq 4 ] && { [ "$MIN" -gt 0 ] || [ "$PAT" -ge 8 ]; }; then vuln=0; fi
if [ "$MAJ" -eq 3 ] && [ "$MIN" -eq 9 ] && [ "$PAT" -ge 15 ]; then vuln=0; fi

# Even patched — hunt for planted shells
SHELLS=0
if [ -d "$ATTACH_DIR" ]; then
  SHELLS=$(find "$ATTACH_DIR" -type f \( -iname '*.php' -o -iname '*.phtml' -o -iname '*.phar' -o -iname '*.php[3457]' \) 2>/dev/null | wc -l)
  if [ "$SHELLS" -gt 0 ]; then
    echo "WARNING: $SHELLS suspicious PHP-executable file(s) found in $ATTACH_DIR:"
    find "$ATTACH_DIR" -type f \( -iname '*.php' -o -iname '*.phtml' -o -iname '*.phar' \) -printf '  %p (mtime %TY-%Tm-%Td)\n'
  fi
fi

if [ "$vuln" -eq 1 ]; then
  echo "VULNERABLE: iCagenda $VER is affected by CVE-2026-48939. Upgrade to 4.0.8 or 3.9.15."
  exit 1
fi
if [ "$SHELLS" -gt 0 ]; then
  echo "VULNERABLE: iCagenda patched but suspicious artifacts present — assume prior compromise."
  exit 1
fi
echo "PATCHED: iCagenda $VER is not affected and attachments dir is clean."
exit 0
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: enumerate every Joomla instance in your estate, identify anything running com_icagenda ≤ 4.0.7, and treat those hosts as assumed-breach given exploitation began 2026-06-15. Per the noisgate mitigation SLA for CRITICAL (≤3 days) — and effectively within hours given KEV+ITW status — deploy the Nginx/Apache PHP-execution deny rule on /images/icagenda/frontend/attachments/, unpublish the extension if not business-critical, and enable the vendor WAF virtual patch. Per the noisgate remediation SLA for CRITICAL (≤90 days) — but sensibly compressed to ≤7 days here — upgrade to iCagenda 4.0.8 (or 3.9.15 on the legacy branch), then run the verifier to confirm both version and clean attachments directory. On any host where the extension was reachable pre-patch, rotate configuration.php DB credentials, rotate Joomla super-user passwords, and hunt for cron/.htaccess/template-file persistence before restoring to production.

Sources

  1. CISA KEV — CVE-2026-48939
  2. TheHackerNews — iCagenda and Balbooa Joomla flaws exploited as zero-days
  3. BleepingComputer — CISA warns of actively exploited Joomla extension RCE flaws
  4. SecurityWeek — Organizations warned of exploited Joomla extension vulnerabilities
  5. IONIX threat center — CVE-2026-48939
  6. shinthink/CVE-2026-48939 PoC (GitHub)
  7. mySites.guru — iCagenda Zero Day File Upload RCE Fixed in 4.0.8
  8. SentinelOne vulnerability database — CVE-2026-48939
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.