← Back to Feed CACHED · 2026-07-09 06:47:13 · CACHE_KEY CVE-2026-49049
CVE-2026-49049 · CWE-284 · Disclosed 2026-06-29

The Helix3 plugin for Joomla exposes an ajax handler task

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

A public front door on your Joomla template that lets anyone rewrite or delete files without knocking

Helix3 is JoomShaper's template framework — the scaffolding under a huge percentage of Joomla themes. Versions 1.0 through 3.1.0 expose an onAjaxHelix3 handler through Joomla's com_ajax dispatcher, which by design will route requests to a plugin's ajax handler for any anonymous visitor. Helix3 assumed Joomla enforced auth; Joomla assumed the plugin did. The result: the save, remove, and template-parameter actions execute before any session token or permission check, letting an unauthenticated attacker write arbitrary JSON files (with path traversal breaking out of the intended layout folder), delete arbitrary files, and overwrite template parameters — which in practice means injecting JavaScript directly into the theme.

The vendor's HIGH (7.5) rating is directionally correct but *understated*. The CVSS vector caps at I:H / A:N / C:N, but in practice arbitrary file write into the template + template-parameter injection is a straight path to stored XSS across every page, and file delete against Joomla's config or index files takes the site offline. Automated botnets are already exploiting this in the wild — the Hacked by antonkill / trenggalek6etar defacement campaigns are Helix3 fingerprints. This deserves an upgrade for exploitation-in-the-wild and the practical RCE-adjacent impact via JS injection.

"Unauth arbitrary file write/delete in a widely-installed Joomla template framework — already being mass-defaced by botnets. Patch now."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Locate a Joomla site running Helix3 ≤ 3.1.0

Attacker fingerprints Joomla sites carrying Helix3 template markers (CSS class prefixes sp-, helix3 in template paths, or the /plugins/system/helix3/ asset path). Mass scanners like the public shinthink/CVE-2026-49049 scanner and Shodan queries for html:sp-page-builder enumerate targets in bulk.
Conditions required:
  • Internet-reachable Joomla site
  • Helix3 framework 1.0–3.1.0 installed and enabled
Where this breaks in practice:
  • Sites behind a WAF filtering option=com_ajax traffic
  • Helix3 v2.x is only vulnerable to save/remove — narrower surface
Detection/coverage: Trivial to fingerprint from HTML; Wappalyzer, BuiltWith, and generic Joomla scanners all identify Helix3.
STEP 02

Hit the unauthenticated com_ajax → onAjaxHelix3 endpoint

Attacker sends a crafted POST to /index.php?option=com_ajax&plugin=helix3&format=json with an action parameter selecting save, remove, or a template-parameter update. Joomla's com_ajax dispatches to the plugin handler with no session token requirement because the handler itself never validates one.
Conditions required:
  • com_ajax component enabled (default)
  • Helix3 system plugin enabled (default when using the framework)
Where this breaks in practice:
  • ModSecurity CRS may flag ../ traversal payloads in the file parameter
  • Aggressive rate-limits on com_ajax from CDNs like Cloudflare
Detection/coverage: Access logs show anonymous POSTs to com_ajax referencing plugin=helix3 — grep-able signature.
STEP 03

Weaponize save → arbitrary JSON write with traversal

The save action writes attacker-controlled content to a file forced to end in .json but does not sanitize the path, allowing ../ traversal outside the template's layout folder. Public PoC on sploitus and the GHSA writeup demonstrate writing crafted JSON that later gets consumed as template parameters.
Conditions required:
  • Web server user has write permission on template directories (default install condition)
Where this breaks in practice:
  • Hardened installs mounting /templates/ read-only
  • SELinux/AppArmor confining Apache/php-fpm write scope
Detection/coverage: File integrity monitoring (Tripwire, Wazuh FIM) on /templates/**/*.json catches this immediately.
STEP 04

Inject JS via template parameter overwrite → stored XSS + defacement

The unauthenticated template-parameter overwrite drops attacker JavaScript into the Helix3 template options. Every page load renders the injection, and the observed payloads use document.write / DOM replacement to deface the entire page (Hacked by antonkill, Hacked by trenggalek6etar). Session theft, credential harvesting on admin login, and cryptojacking are the obvious next-stage payloads.
Conditions required:
  • Successful save/param-update from step 3
Where this breaks in practice:
  • Strict CSP with script-src allowlist blocks inline injection — vanishingly rare on Joomla templates
Detection/coverage: External synthetic monitoring / defacement watchers (Google Safe Browsing, Sucuri SiteCheck) surface it within hours.
STEP 05

Optional: arbitrary file delete → outage or auth bypass

The remove action provides an alternate primitive: delete arbitrary files. Deleting configuration.php or template index.php files takes the site offline; deleting cached auth artifacts can force reinitialization paths. Combined with the write primitive, dropping a PHP webshell into a writable Joomla directory is trivial where the extension whitelist can be bypassed.
Conditions required:
  • Web server write/delete permissions on target file
Where this breaks in practice:
  • Immutable-file mounts, containerized read-only rootfs
Detection/coverage: FIM alerts on deletion of core Joomla files; 500 errors spike immediately.
03 · Intelligence Metadata

The supporting signals.

In the wildActive mass exploitation. Automated botnets defacing sites with Hacked by antonkill and Hacked by trenggalek6etar payloads via Helix3 template parameter injection.
Public PoCYessploitus exploit entry and a public scanner at shinthink/CVE-2026-49049.
EPSS0.00228 (~0.2%) — *low but stale*; expected to climb as defacement telemetry is ingested.
KEVNot listed as of 2026-07-09. Given in-the-wild defacement campaigns, CISA addition is plausible.
CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N = 7.5 HIGH. Vector understates A: arbitrary file delete plainly breaks availability.
Affected versionsHelix3 1.0 through 3.1.0. Helix3 2.x only vulnerable to save/remove actions (narrower but still critical).
Fixed versionHelix3 3.1.1, released 2026-06-29 by JoomShaper. No distro backports — this is a Joomla extension update only.
ExposureHelix3 underpins a substantial slice of Joomla templates (JoomShaper is one of the top-3 Joomla template vendors). Shodan/BuiltWith show tens of thousands of live Helix3 instances.
Disclosed2026-06-29 (coordinated with patch release).
ReporterPhil Taylor (mySites.guru).
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (8.2/10)

Active in-the-wild exploitation by defacement botnets against an unauthenticated, network-reachable primitive on a widely-installed Joomla template framework is the single decisive factor holding this at HIGH and pushing the score above the vendor's 7.5. It does not clear the CRITICAL floor because the affected component is a public-facing web template plugin — blast radius is bounded to the compromised site, not fleet, identity, or supply-chain infrastructure.

HIGH Technical root cause and patch fix
HIGH Active exploitation evidence
MEDIUM Enterprise installed-base share (Joomla itself is a minority CMS)

Why this verdict

  • Unauthenticated + network reachable + trivial payload — no PR, no UI, one HTTP POST. The friction audit finds *zero* prerequisite that assumes a prior compromise stage.
  • Active exploitation, PoC in the wild. Public scanner and PoC are already weaponized by defacement botnets; EPSS will catch up.
  • Role multiplier — public-facing CMS: the chain succeeds on every reachable install. Blast radius per site: stored XSS, defacement, file deletion, credential harvest on admin login. Not fleet-scale — bounded to that host/site.
  • Role multiplier — not a high-value-role component. Helix3 is a template framework, not an IdP, hypervisor, CA, PAM, backup, or edge appliance. No path from one compromised Joomla site to domain, tenant, or supply-chain compromise. This is why the CRITICAL floor does not trigger.
  • Vendor score understated I:H impact. Availability is also broken (file delete → outage), and JS injection into template params is functionally stored XSS at every request — worth +0.7 above vendor 7.5.

Why not higher?

CRITICAL is reserved for chains that end in fleet, identity, hypervisor, or supply-chain compromise. Helix3 sits on a public-facing content tier; a compromised Joomla instance is a bad day for that site, not the enterprise identity plane. There is also no known unauthenticated RCE primitive — only file write with a .json extension constraint — so the RCE path requires additional chaining.

Why not lower?

Downgrading to MEDIUM would ignore that this is unauthenticated, network-accessible, actively exploited by automation, and has public PoC and scanner code. Any of those four conditions individually would keep it out of MEDIUM; all four together make HIGH the floor.

05 · Compensating Control

What to do — in priority order.

  1. Upgrade Helix3 to 3.1.1 immediately — The only real fix. Log into Joomla admin → Extensions → Manage → Update, or drop the 3.1.1 package manually. Deploy within 3 days per noisgate mitigation SLA given active exploitation.
  2. WAF rule blocking com_ajax + plugin=helix3 from unauthenticated sources — As a stopgap while you stage the upgrade, block or challenge any request matching option=com_ajax&plugin=helix3 that doesn't carry a valid admin session cookie. Cloudflare/Akamai/ModSecurity all support this in a single custom rule. Deploy within hours, not days.
  3. File integrity monitoring on /templates/ and /plugins/system/helix3/ — Wazuh, OSSEC, or Tripwire alerting on any write/delete under those paths catches both this exploit and its persistence. Enable in parallel with the WAF rule.
  4. Audit templates for injected JS in template parameters NOW — Before patching, check params fields in the Helix3 template options for <script>, document.write, eval, or unfamiliar URLs. Patching does not remove already-planted payloads.
  5. Rotate admin credentials post-cleanup — If JS injection has been live for any period, assume harvested admin sessions/credentials. Force password reset + invalidate all sessions before re-enabling admin login.
What doesn't work
  • Disabling the Joomla com_ajax component globally — breaks legitimate extensions and doesn't survive updates.
  • Web-server-level auth on /administrator/ — the vulnerable endpoint is under the public frontend /index.php, not /administrator/.
  • Stopping at 'restore from backup' — if the backup is post-compromise, you re-import the injection. You must verify template params are clean *and* patch before restore.
  • Relying on CSP — most Joomla templates ship permissive or absent CSP; expect the injected inline script to execute.
06 · Verification

Crowdsourced verification payload.

Run this from an auditor workstation against a target site. Invoke as ./check-helix3.sh https://target.example.com. No credentials required — the check probes the same unauthenticated endpoint the exploit uses, then also parses the site HTML for a Helix3 version marker. Requires curl and grep.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# noisgate verifier: CVE-2026-49049 — Helix3 Joomla unauth ajax handler
# Usage: ./check-helix3.sh https://target.example.com
set -u
TARGET="${1:-}"
if [ -z "$TARGET" ]; then
  echo "usage: $0 https://target.example.com" >&2
  exit 2
fi

UA='noisgate-verifier/1.0 (CVE-2026-49049)'
AJAX_URL="${TARGET%/}/index.php?option=com_ajax&plugin=helix3&format=json"
HOME_URL="${TARGET%/}/"

# 1. Fingerprint Helix3 presence
HTML=$(curl -s -A "$UA" -L --max-time 15 "$HOME_URL" || true)
if ! echo "$HTML" | grep -qiE 'helix3|sp-page|sp_helix'; then
  echo "UNKNOWN: no Helix3 fingerprint on $TARGET"
  exit 3
fi

# 2. Probe unauthenticated ajax handler with a benign action.
#    A patched (3.1.1+) install rejects unauthenticated calls; vulnerable
#    installs return a JSON response from the handler itself.
RESP=$(curl -s -A "$UA" -L --max-time 15 \
  -H 'X-Requested-With: XMLHttpRequest' \
  --data 'action=noisgate_probe' \
  "$AJAX_URL" || true)

# Patched builds should return an authorization error or a 403.
HTTP_CODE=$(curl -s -A "$UA" -L --max-time 15 -o /dev/null -w '%{http_code}' \
  -H 'X-Requested-With: XMLHttpRequest' \
  --data 'action=noisgate_probe' \
  "$AJAX_URL" || true)

if [ "$HTTP_CODE" = "403" ] || echo "$RESP" | grep -qiE 'not authoriz|forbidden|access denied|invalid token'; then
  echo "PATCHED: Helix3 fingerprint present but ajax handler rejects unauthenticated calls ($TARGET)"
  exit 0
fi

if echo "$RESP" | grep -qiE '"success"|"data"|"message"|helix3'; then
  echo "VULNERABLE: unauthenticated onAjaxHelix3 handler responded on $TARGET"
  echo "  → upgrade Helix3 to 3.1.1 immediately (CVE-2026-49049)"
  exit 1
fi

echo "UNKNOWN: inconclusive response (HTTP $HTTP_CODE) — manual review required"
exit 3
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: (1) fingerprint every internet-reachable Joomla instance in your estate for Helix3 — this typically lives on marketing sites, microsites, and acquired-brand properties that don't get the same patch cadence as the crown jewels. (2) Deploy the WAF rule blocking unauthenticated com_ajax&plugin=helix3 within hours. (3) Upgrade every Helix3 install to 3.1.1; per the noisgate mitigation SLA, the WAF/temporary block goes in within ≤3 days because this is under active exploitation, and per the noisgate remediation SLA the vendor patch itself must be applied within ≤90 days — but with public PoC and defacement botnets running, treat 3.1.1 as the same-week ceiling, not a quarterly item. (4) Before patching, audit template params for injected <script> and rotate admin credentials on any site where injection is found. KEV-listing is plausible in the next 30 days; don't wait for it.

Sources

  1. GitHub Advisory GHSA-xr7r-292v-jxg8
  2. JoomShaper Helix3 3.1.1 changelog (mySites.guru)
  3. IONIX threat center writeup
  4. VulDB CVE-2026-49049
  5. Public scanner (shinthink/CVE-2026-49049)
  6. Sploitus exploit entry
  7. HTProtect.org update guide
  8. AntonKill defacement analysis
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.