CVE-2026-56290 — Joomla "Page Builder CK" Unauthenticated Upload → Webshell RCE

CVSS 10.0 unauthenticated arbitrary file upload in the Joomlack Page Builder CK extension (com_pagebuilderck). Attackers drop PHP webshells into web-served folders and execute them — actively exploited, CISA KEV (due 2026-07-10).
Threat
CVE-2026-56290 — Page Builder CK (Joomlack)
Severity
CVSS 10.0 · KEV · IN THE WILD
Type
Public-Facing Web App · Joomla Extension
Access Vector
Unauthenticated HTTP file upload → RCE
Version
v0.2 · 2026-07-09
Author
HuntPack
Confidence
High (NVD/CISA KEV + vendor + IR reporting)
01

Executive Summary

CVE-2026-56290 (CVSS 10.0) is an improper access control / unauthenticated arbitrary file upload vulnerability in Joomlack "Page Builder CK" (com_pagebuilderck), a popular Joomla page-builder extension. A front-end upload endpoint accepts files with no authentication and no permission check, and lets the caller choose the destination folder. An unauthenticated attacker uploads a PHP file into a web-served directory and requests it — direct remote code execution.

The flaw affects every version up to and including 3.5.10. It was fixed in 3.6.0 (released 2026-06-27), with back-ports to 3.1.1 (Joomla 3) and 3.4.10 (Joomla 4). Exploitation has been observed in the wild since 2026-06-27 to plant webshells, and CISA added it to the Known Exploited Vulnerabilities catalog on 2026-07-07 with a federal remediation deadline of 2026-07-10. The first confirmed webshell was dropped at /media/com_pagebuilderck/gfonts/bhup.php — an uploader shell keyed on the $_POST['_upl'] field.

Because the upload is unauthenticated, this is mass-scannable and mass-exploitable: any internet-facing Joomla site running a vulnerable Page Builder CK is a target. The detectable endpoint story is post-exploitation on the web server itself — a new PHP file appearing in an asset/upload directory, and the web server or a PHP worker spawning a shell.

Defender priority: (1) Patch Page Builder CK to 3.6.0 / 3.4.10 / 3.1.1 now. (2) Hunt the web hosts for a PHP file written under /media/com_pagebuilderck/ (esp. the gfonts/ folder) and for the named shell bhup.php. (3) Hunt for the web server / php-fpm process spawning a shell (Q1) — the highest-fidelity RCE signal. Treat any hit as a confirmed compromise: preserve the shell, then eradicate and rebuild.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Fwd
1CISA KEVAdded 2026-07-07 as "Joomlack Page Builder Improper Access Control"; active exploitation; federal due 2026-07-10yes
1NVD — CVE-2026-56290CVSS 10.0; improper access control → unauth arbitrary file upload → RCEyes
1mySites.guruExploitation since 2026-06-27; first confirmed shell /media/com_pagebuilderck/gfonts/bhup.php keyed on $_POST['_upl']yes
1CCB Belgium advisoryAffected ≤3.5.10; fixed 3.6.0; back-ports 3.1.1 (J3) / 3.4.10 (J4); unauth upload endpoint, caller-chosen folderyes
2The Hacker NewsKEV batch context (Adobe ColdFusion, SP Page Builder CVE-2026-48908, Langflow CVE-2026-55255)partial

Hunter note: Do not confuse this with the sibling KEV entry CVE-2026-48908 (JoomShaper SP Page Builder, also CVSS 10.0 file-upload) — different vendor/extension, similar tradecraft. This pack targets Joomlack Page Builder CK (com_pagebuilderck). The single published atomic IOC is the bhup.php shell name + path; attackers will vary the filename, so the durable hunt is any new PHP under Joomla asset/upload dirs (Q2/Q4) plus web-server shell spawns (Q1). No file hashes were published at pack time — the IOC CSV uses REPLACE_WITH placeholders rather than fabricated hashes.

03

Hunt Brief & Attack Chain

Hunt Hypotheses (fidelity-ordered)

  1. H1 (high): A web-server / PHP worker (php-fpm, httpd, apache2, nginx, lsphp) spawns a shell/LOLBin (sh, bash, curl, python) — webshell command execution. low FP
  2. H2 (high): A new .php file is written under /media/com_pagebuilderck/ (esp. gfonts/) — the webshell drop. low FP
  3. H3 (high): The named shell bhup.php appears on disk or in a PHP command line. low FP
  4. H4 (medium): Any new .php file written into a Joomla static-asset/upload dir (/media/, /images/, /tmp/) that should hold no code. med FP
  5. H5 (medium): A PHP command line containing webshell primitives (shell_exec, system(, base64_decode, eval(, _upl). med FP
  6. H6 (medium): A web-server-context process makes an outbound connection to a non-RFC1918 raw IP — reverse shell / second-stage pull. med FP
  7. H7 (medium): A LOLBin (curl/wget) downloads a file into a web-served path — tooling staged into web root. med FP

Attack Chain

StepBehaviorTelemetryHunt Angle
1 · ReconMass-scan for Joomla sites with Page Builder CK ≤3.5.10Web/proxy logsEndpoint hits on com_pagebuilderck
2 · Initial AccessUnauthenticated POST to the front-end upload endpoint, caller-chosen folderWeb logs / n/a on EDRNative web-log hunt (§7)
3 · PersistencePHP webshell written (e.g. gfonts/bhup.php, keyed on $_POST['_upl'])FileWritePHP in asset dir (H2/H3/H4)
4 · ExecutionAttacker requests the shell → PHP executes attacker commandsProcessRollup2Web server spawns shell (H1)
5 · Defense EvasionObfuscated shell (base64_decode/eval); commands via $_POST['_upl']ProcessRollup2PHP webshell primitives (H5)
6 · Ingress / C2Reverse shell or second-stage tool pull from the web hostNetworkConnectIP4 / ProcessRollup2Web-server egress + curl/wget (H6/H7)
7 · ImpactSite defacement, data theft, pivot, cryptominer, or ransomware stagingProcessRollup2 / FileWriteFollow-on tooling on host
04

Consolidated IOC Table

TypeValueConfActionContext
Webshell path/media/com_pagebuilderck/gfonts/bhup.phphighdetectFirst confirmed dropped shell (mySites.guru)
Filenamebhup.phphighhuntNamed uploader shell; attackers may rename
Webshell key$_POST['_upl']mediumhuntCommand/upload parameter of the shell
Drop directory/media/com_pagebuilderck/ (esp. gfonts/)highhuntComponent media dir — should hold no PHP
Componentcom_pagebuilderck (Joomlack Page Builder CK)highhuntVulnerable extension
Vuln versionPage Builder CK ≤ 3.5.10highpatchFixed 3.6.0 / 3.4.10 (J4) / 3.1.1 (J3)
BehaviorUnauthenticated file upload → PHP RCEhighdetectImproper access control, no permission check
SHA256REPLACE_WITH_SHA256 (bhup.php / variant shells)mediumdetectPopulate when vendor hashes publish
IPv4REPLACE_WITH_SCANNER_IPmediumdetectExploit source / C2 — populate from your web logs
05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
Joomla web servers (Linux/Windows)ProcessRollup2, file-write events, NetworkConnectIP4criticalMedium — Falcon Linux sensor coverage varies
Shared-hosting / cPanel web nodesProcessRollup2 (per-vhost php-fpm/lsphp), file-writecriticalHigh — sensor rarely on shared hosts
Reverse proxy / WAF / web logsHTTP request logs (method, URI, status, UA)highMedium — needs NGSIEM/proxy ingestion
Network egressNetworkConnectIP4, proxy logshighMedium — web hosts often allowed broad egress
File integrity of web rootFIM / file-write events on /media, /images, /tmphighMedium — non-PE writes not always captured
06

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial AccessT1190 — Exploit Public-Facing ApplicationUnauth upload endpoint in Page Builder CK§7 web-log hunt / patch
PersistenceT1505.003 — Server Software Component: Web ShellPHP shell dropped in /media/com_pagebuilderck/Q2 / Q3 / Q4
ExecutionT1059.004 — Command and Scripting Interpreter: Unix ShellPHP worker spawns sh/bashQ1
ExecutionT1059.007 — JavaScript / server-side scriptPHP webshell executes attacker commandsQ5
Defense EvasionT1027 — Obfuscated Files or Informationbase64_decode/eval in the shellQ5
Command & ControlT1105 — Ingress Tool Transfercurl/wget pulls second-stage into web rootQ7
Command & ControlT1071.001 — Application Layer Protocol: WebReverse shell / beacon from web hostQ6
07

Native Audit-Log Hunts (non-CQL)

Web-root sweep for dropped PHP shells (run on every Joomla host)

# PHP anywhere it should not be (media/images/tmp are asset dirs, not code)
find /var/www /home/*/public_html -type f -name "*.php" \
  \( -path "*/media/*" -o -path "*/images/*" -o -path "*/tmp/*" \) 2>/dev/null
# The named shell + component drop dir specifically
find / -type f -name "bhup.php" 2>/dev/null
ls -la /var/www/*/media/com_pagebuilderck/gfonts/ 2>/dev/null
# PHP files newer than the patch window (likely attacker-dropped)
find /var/www -type f -name "*.php" -newermt "2026-06-27" 2>/dev/null

Webshell content grep (uploader/eval primitives)

grep -rEln "_upl|shell_exec|passthru|system\(|eval\(|base64_decode|move_uploaded_file" \
  /var/www/*/media /var/www/*/images 2>/dev/null

Version check + web-log triage

# Confirm installed Page Builder CK version (look for <= 3.5.10)
grep -R "version" /var/www/*/administrator/components/com_pagebuilderck/*.xml 2>/dev/null
# In your proxy/WAF logs: POST requests to com_pagebuilderck upload endpoints,
# especially those immediately followed by a GET to a new /media/*.php path.

Note: The shell is unauthenticated to plant — absence of auth logs does NOT mean no compromise. A vulnerable version + any new PHP in an asset dir = treat as compromised until proven otherwise. Patch AND remove the shell; patching alone leaves the backdoor in place.

08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Web server / PHP worker spawning a shell (RCE)
CONF HIGHFP LOWCOST LOW

Looks for: a web-server or PHP worker process spawning a shell / LOLBin — the classic webshell command-execution signal, and the highest-fidelity catch for this RCE.

// HUNT: web server / php-fpm spawns a shell (webshell RCE)
// MITRE: T1190, T1505.003, T1059.004
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 (Linux/Windows)
// FALSE POSITIVES: rare CMS plugins/cron shelling out — verify the child + args
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(php|php-fpm|lsphp|httpd|apache2|nginx|w3wp|caddy)[0-9.-]*(\.exe)?$/i
| ImageFileName=/(\/|\\)(sh|bash|dash|zsh|python[0-9.]*|perl|ruby|curl|wget|nc|ncat|whoami|id|uname)(\.exe)?$/i
| table([ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData, aid], limit=200)
Q2 · PHP written under com_pagebuilderck media dir
CONF HIGHFP LOWCOST MED

Looks for: a .php file written under the component's media directory — no PHP should ever live there. ⚠ validate in tenant — non-PE file-write telemetry varies by sensor/OS; confirm the event flows before relying on this query.

// HUNT: PHP webshell written under /media/com_pagebuilderck/
// MITRE: T1505.003
// CONF: high  FP: low  COST: medium | REQUIRES: FileCreateInfo (validate in tenant)
// FALSE POSITIVES: none expected — component media dir holds fonts/images, not PHP
#event_simpleName=/FileCreateInfo|NewScriptWritten/
| TargetFileName=/[\/\\]media[\/\\]com_pagebuilderck[\/\\].*\.php$/i
| table([ComputerName, UserName, TargetFileName, ContextBaseFileName, aid], limit=200)
Q3 · Known bhup.php shell on disk or in a PHP command
CONF HIGHFP LOWCOST LOW

Looks for: the named atomic IOC bhup.php — either written to disk or referenced by a PHP process. High-fidelity but narrow (attackers rename); pair with Q2/Q4.

// HUNT: known bhup.php webshell (atomic IOC)
// MITRE: T1505.003
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 or FileCreateInfo
// FALSE POSITIVES: none — bhup.php is attacker-attributed
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|FileCreateInfo|NewScriptWritten/
| CommandLine=/bhup\.php/i OR TargetFileName=/(\/|\\)bhup\.php$/i
| table([ComputerName, UserName, ImageFileName, CommandLine, TargetFileName, aid], limit=200)
Q4 · New PHP in Joomla asset/upload directories
CONF MEDFP MEDCOST MED

Looks for: any .php written into a Joomla static-asset/upload dir (/media/, /images/, /tmp/) — generalizes beyond the known filename. FP: a few extensions legitimately place PHP; inspect any hit's content for webshell primitives. ⚠ validate in tenant — file-write telemetry varies.

// HUNT: new PHP in Joomla asset/upload dirs (generalized shell drop)
// MITRE: T1505.003
// CONF: medium  FP: medium  COST: medium | REQUIRES: FileCreateInfo (validate in tenant)
// FALSE POSITIVES: rare legit PHP in media/images — inspect content (Q5 / §7 grep)
// TUNING: baseline expected PHP paths per site; alert on net-new only
#event_simpleName=/FileCreateInfo|NewScriptWritten/
| TargetFileName=/[\/\\](media|images|tmp)[\/\\].*\.php$/i
| table([ComputerName, UserName, TargetFileName, ContextBaseFileName, aid], limit=200)
Q5 · PHP process with webshell primitives
CONF MEDFP MEDCOST LOW

Looks for: a PHP process invoked with webshell/command primitives (shell_exec, system(, base64_decode, eval() or the shell's _upl parameter. FP: some CLI PHP tooling uses these; scope to web-server user context.

// HUNT: PHP process with webshell primitives / _upl key
// MITRE: T1059.007, T1027
// CONF: medium  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: legit CLI PHP using system()/eval — scope to www-data/apache user
// TUNING: exclude known maintenance scripts by ParentBaseFileName / UserName
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ImageFileName=/(\/|\\)(php|php-fpm|lsphp)[0-9.-]*(\.exe)?$/i
| CommandLine=/(shell_exec|passthru|system\(|eval\(|base64_decode|_upl)/i
| table([ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, aid], limit=200)
Q6 · Web-server-context outbound to raw external IP
CONF MEDFP MEDCOST MED

Looks for: a web-server / PHP / shell context process connecting outbound to a non-RFC1918 raw IP — reverse shell or beacon from a compromised web host. FP: web apps make legit outbound API calls; exclude known egress and focus on shell/php contexts.

// HUNT: web-server context outbound to raw external IP (reverse shell / C2)
// MITRE: T1071.001, T1059.004
// CONF: medium  FP: medium  COST: medium | REQUIRES: NetworkConnectIP4
// FALSE POSITIVES: legit outbound API calls from the web app
// TUNING: exclude RFC1918 + known API/CDN ranges; correlate with Q1 on aid
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName=/^(php|php-fpm|lsphp|httpd|apache2|nginx|sh|bash|dash)[0-9.-]*(\.exe)?$/i
| RemoteAddressIP4!=/^(10\.|127\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.)/
| table([ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, aid], limit=200)
Q7 · LOLBin downloading into a web-served path
CONF MEDFP MEDCOST MED

Looks for: curl/wget/python fetching a file into a web root or asset dir — second-stage tooling staged after the initial shell. FP: deploy/CI pipelines pull into web roots; scope to unexpected hosts/users.

// HUNT: LOLBin download into web-served path (staging)
// MITRE: T1105
// CONF: medium  FP: medium  COST: medium | REQUIRES: ProcessRollup2
// FALSE POSITIVES: legit deploy/CI fetching into web root — exclude known pipelines
// TUNING: correlate with Q1 (web server spawned the LOLBin) on the same aid
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ImageFileName=/(\/|\\)(curl|wget|python[0-9.]*|fetch)(\.exe)?$/i
| CommandLine=/(\/var\/www|public_html|htdocs|[\/\\]media[\/\\]|[\/\\]images[\/\\])/i
| CommandLine=/(https?:|ftp:|-O|-o )/i
| table([ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, aid], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOA NamePatternActionExclusions
webserver-spawns-shellParent php-fpm/httpd/nginx spawning sh/bash/LOLBinDetect (Critical) → Prevent after tuningKnown maintenance cron/deploy chains
php-in-media-dirPHP file written under /media/com_pagebuilderck/Detect (Critical)None expected
bhup-shellFile/command references bhup.phpPrevent (Critical)None
php-webshell-primitivesPHP CLI with system()/eval()/_uplDetect (High)Baselined admin/maintenance scripts

Promotion path: Q1, Q2, Q3 are strong IOA/Prevent candidates (attacker-specific, low FP). Q4–Q7 stay Investigate-only until per-site baselined, and are strongest correlated on the same aid.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,REPLACE_WITH_SHELL_SHA256,prevent,critical,2027-01-09,bhup.php / variant webshell,cve:CVE-2026-56290
domain,REPLACE_WITH_C2_DOMAIN,detect,high,2026-10-09,reverse-shell/C2 (populate from web logs),cve:CVE-2026-56290
ipv4,REPLACE_WITH_SCANNER_IP,detect,high,2026-10-09,exploit source / C2 (populate from web logs),cve:CVE-2026-56290
Behavioral Signatureshunt logic
rce_shell   := php-fpm|httpd|nginx -> sh|bash|curl|python
shell_drop  := *.php written under /media/com_pagebuilderck/**
named_shell := bhup.php  (keyed on $_POST['_upl'])
asset_php   := *.php in /media|/images|/tmp  (should hold no code)
primitives  := php CLI with shell_exec|system(|eval(|base64_decode|_upl
egress      := php|httpd|sh -> outbound raw non-RFC1918 IP
Affected / Fixed Versionspatch matrix
Extension: Joomlack "Page Builder CK" (com_pagebuilderck)
VULNERABLE: <= 3.5.10
FIXED (current Joomla): 3.6.0   (2026-06-27)
FIXED (Joomla 4 branch): 3.4.10
FIXED (Joomla 3 branch): 3.1.1
CVE: CVE-2026-56290  CVSS: 10.0  KEV-added: 2026-07-07  Due: 2026-07-10
Sibling (different ext): CVE-2026-48908 SP Page Builder (JoomShaper) fixed 6.6.2
Response / Remediation Checklistremediation
# 1. Patch Page Builder CK to 3.6.0 / 3.4.10 (J4) / 3.1.1 (J3)
# 2. find /var/www -name "*.php" -newermt "2026-06-27" -path "*/media/*"
# 3. Delete every attacker PHP shell (bhup.php + variants) from asset dirs
# 4. Reset Joomla admin creds + secret; rotate DB creds + API keys on host
# 5. Review configuration.php, .htaccess, and admin users for tampering
# 6. Block/deny PHP execution in /media, /images, /tmp at the web-server config
# 7. Rebuild the host if RCE (Q1/Q3) confirmed — a shell may have added others
11

Detection Validation Gates

GateCheckPass Criteria
Telemetry readyProcessRollup2 + NetworkConnectIP4 flowing from Joomla web hosts; confirm file-write events for Q2/Q4Event types present in last 24h
InventoryEnumerate every Joomla host + Page Builder CK version (§7)Version list built; ≤3.5.10 flagged for patch
Positive testIn a lab, drop a benign .php under /media/com_pagebuilderck/ and have php-fpm spawn idQ1 & Q2 fire on the test artifacts
Benign baselineRun Q4 & Q5 over 7d; catalog legit PHP in asset dirs / CLI PHP toolingKnown-good list built; exclusions added
PromotionQ1/Q2/Q3 FP-clean for 7dPromote to Custom IOA / Prevent
12

Hardening — Tiered

Immediate (this week)
  • Patch: update Page Builder CK to 3.6.0 / 3.4.10 (J4) / 3.1.1 (J3). (M1051 Update Software)
  • Remove shells: sweep asset dirs and delete every attacker PHP (§7); patching does not remove a planted backdoor. (M1050 Exploit Protection)
  • Deny PHP execution in upload dirs: block .php handling in /media, /images, /tmp (see §13). (M1042 Disable or Remove Feature)
  • Rotate secrets: Joomla admin + secret, DB creds, and any API keys reachable from the host. (M1027 Password Policies)
Near term (1–4 weeks)
  • WAF virtual-patch: block unauthenticated POSTs to the com_pagebuilderck upload endpoint and any request writing .php to /media. (M1037 Filter Network Traffic)
  • Egress control: restrict web-host outbound to required destinations so reverse shells / tool pulls fail. (M1037)
  • File integrity monitoring on the web root; alert on any new/changed PHP outside deploys. (M1022 Restrict File and Directory Permissions)
Strategic (1–3 months)
  • Least-privilege web user: run PHP-FPM pools per-site as distinct low-priv users; read-only code, writable only where required. (M1026 Privileged Account Management)
  • Extension governance: inventory Joomla extensions, subscribe to vendor security feeds, and auto-alert on new CVEs. (M1016 Vulnerability Scanning)
  • Network segmentation: isolate public web tier from internal data/DB tiers so a webshell can't pivot. (M1030 Network Segmentation)
13

Deployable Playbooks

1 · Deny PHP execution in Joomla asset dirs (Apache)

# Drop into /var/www/<site>/media/.htaccess (and images/, tmp/)
<FilesMatch "\.(php|phtml|php3|php4|php5|phar)$">
  Require all denied
</FilesMatch>
php_admin_flag engine off

2 · Deny PHP execution in asset dirs (nginx)

location ~* ^/(media|images|tmp)/.*\.php$ {
    deny all;
    return 403;
}

3 · Find & quarantine dropped shells (bash)

#!/usr/bin/env bash
set -euo pipefail
WEBROOT="${1:-/var/www}"
Q="/root/quarantine_$(hostname)"
mkdir -p "$Q"
find "$WEBROOT" -type f -name "*.php" \
  \( -path "*/media/*" -o -path "*/images/*" -o -path "*/tmp/*" \) \
  -newermt "2026-06-27" -print 2>/dev/null | while read -r f; do
    echo "[!] quarantining $f"
    mv "$f" "$Q/"
done
find "$WEBROOT" -type f -name "bhup.php" -exec mv {} "$Q/" \; 2>/dev/null || true

4 · Confirm patched version

grep -R "version" /var/www/*/administrator/components/com_pagebuilderck/*.xml 2>/dev/null
# Ensure the reported version is 3.6.0 / 3.4.10 / 3.1.1 or later
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain (Falcon RTR contain) any web host with Q1/Q2/Q3 hits; put the site behind maintenance / WAF-block the upload endpointSOC / IRaid list, contain timestamps
PreserveCapture the webshell(s), web/access logs, and process tree before deleting — establish scope + first-drop timeIRShell copy, log export
EradicatePatch Page Builder CK; remove all attacker PHP; kill any reverse-shell process; reset Joomla admin/secret + DB/API credsIR / Web teamPatch version, file/credential list
RecoverRebuild the host if RCE was confirmed (assume additional backdoors); restore code from a known-good deploy, not from the live diskWeb team / ITRebuild records
RecoverRe-expose only after PHP-exec denied in asset dirs + egress control; monitor Q1/Q6 for re-compromiseSOC7-day clean window
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1190Unauth upload exploit (request)NoGAP — web/WAF logs only
T1505.003Shell dropped in media dirQ2YesGood
T1505.003Named bhup.php shellQ3YesGood
T1059.004Web server spawns shell (RCE)Q1YesGood
T1505.003Generalized asset-dir PHPQ4NoPartial — file-write telemetry varies
T1059.007 / T1027PHP webshell primitivesQ5NoPartial
T1071.001Reverse shell / beaconQ6NoPartial
T1105LOLBin stages toolingQ7NoPartial

Endpoint coverage of the post-exploitation chain (drop → execute → egress) is strong (Q1/Q2/Q3). The initial unauthenticated upload itself is a web-log / WAF hunt (§7) — Falcon endpoint telemetry does not see the HTTP request, so pair this pack with proxy/WAF log detection. File-write queries (Q2/Q4) depend on non-PE file-write telemetry — validate it flows in your tenant (§11).

16

Hunt Summary Ticket

TITLE:      CVE-2026-56290 Joomla Page Builder CK — unauth upload → webshell RCE hunt
SEVERITY:   Critical (CVSS 10.0; CISA KEV; exploited in the wild since 2026-06-27)
SCOPE:      Internet-facing Joomla web servers running Page Builder CK <= 3.5.10
HYPOTHESIS: An unauthenticated upload drops a PHP webshell in a web-served folder
            (e.g. /media/com_pagebuilderck/gfonts/bhup.php) and yields RCE via the
            web server / php-fpm spawning shells.
QUERIES:    Q1 web server spawns shell | Q2 PHP under com_pagebuilderck media
            Q3 bhup.php | Q4 asset-dir PHP | Q5 php webshell primitives
            Q6 web-host egress | Q7 LOLBin into web root
DO FIRST:   1) Inventory Page Builder CK versions; patch <=3.5.10 (§7)
            2) Run Q1/Q2/Q3 across web hosts; contain + preserve any hit
            3) Deny PHP exec in /media,/images,/tmp; WAF-block the endpoint
FINDINGS:   <fill: hosts, aids, shell paths, versions, creds exposed>
GAPS:       Initial HTTP upload seen only in web/WAF logs, not on EDR
ACTIONS:    Patch; remove shells; rotate Joomla/DB/API creds; rebuild if RCE
OWNER:      <assign SOC/IR + web team lead>
VERSION:    v0.2 · 2026-07-09 · HuntPack
17

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-07-09Initial HuntPack. 7 CQL queries (Q1/Q2/Q3 IOA/Prevent candidates; Q4–Q7 Investigate/correlate), atomic + behavioral IOC appendix (webshell path/name real + cited; hashes are placeholders pending publication), patch matrix, tiered hardening, deployable web-server playbooks, containment runbook. Built from CISA KEV, NVD, CCB Belgium advisory, and mySites.guru IR reporting.
18

References

TierSourceUsed ForAccess Date
1CISA — KEV additions 2026-07-07KEV status, active exploitation, due date2026-07-09
1NVD — CVE-2026-56290CVSS 10.0, vuln class2026-07-09
1mySites.guru — PageBuilder CK RCEIn-the-wild shell path bhup.php, $_POST['_upl'], first-seen date2026-07-09
1CCB Belgium — CVE-2026-56290 advisoryAffected/fixed versions, endpoint behavior2026-07-09
2The Hacker News — CISA adds Adobe/Joomla/Langflow flawsKEV batch context, sibling CVEs2026-07-09