CVE-2026-48907 — Joomla Content Editor (JCE) Unauthenticated RCE
Executive Summary
CVE-2026-48907 is a maximum-severity (CVSS v4 10.0) unauthenticated remote code execution flaw in the Joomla Content Editor (JCE) extension, present in all versions up to and including 2.9.99.4. The root cause is a chained design failure in JCE's profile import workflow: a missing authorization check lets an unauthenticated attacker create a fake editor profile, insufficient file validation lets that profile re-enable uploads of .php and .txt files, and disabled upload safety controls then permit a webshell to be uploaded and executed.
Attackers drop a PHP webshell into world-writable web directories such as /images/, /media/, or /tmp/, yielding a persistent, unauthenticated backdoor on the Linux web server (Apache/nginx + PHP-FPM). From there the typical objective is command execution, ingress tool transfer, and lateral movement. CISA added CVE-2026-48907 to the Known Exploited Vulnerabilities catalog on 2026-06-16, citing active, automated exploitation, and ordered FCEB agencies to patch by Friday. Fixed in JCE 2.9.99.5 (early June 2026), with additional hardening in 2.9.99.6.
The highest-value defensive angle is behavioral, not signature-based: a web-server process (httpd / apache2 / nginx / php-fpm) is not supposed to spawn an interactive shell or write a new .php file into an upload directory. Those two telemetry events are the spine of this hunt and survive payload/IP rotation that automated exploitation churns through.
Defender priority: Patch JCE to ≥ 2.9.99.5 immediately. In parallel, hunt for httpd/apache2/nginx/php-fpm → sh/bash/python/perl process lineage and for new .php files written under web-writable directories. A single confirmed hit on either is a probable live webshell — treat as active intrusion.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| 1 · Gov | CISA KEV Catalog | Added 2026-06-16; active automated exploitation; FCEB patch-by-Friday directive. | Yes |
| 1 · Vendor | YesWeHack RCE disclosure (JCE) | Chained authz + file-validation + upload-control failure in profile import; fix in 2.9.99.5. | Yes |
| 2 · Press | BleepingComputer | CISA orders feds to patch max-severity Joomla plugin flaw by Friday; CVSS 10.0. | Yes |
| 2 · Press | The Hacker News | CISA warns of actively exploited Joomla extension flaw; webshell drops in writable dirs. | Yes |
| 2 · Press | SC World / SC Media | Max-severity JCE flaw targeted in automated attacks; affects sites running JCE. | Partial |
Web-hunter note: Atomic IOCs (specific webshell hashes, C2 IPs) are not consistently published because exploitation is automated and payloads/infrastructure rotate. The pack therefore leads with behavioral detection and treats published file/IP indicators as perishable hunt/enrich values rather than durable blocks.
Hunt Brief & Attack Chain
Hypotheses (ordered by fidelity)
- H1 (high): A web-server process (
httpd/apache2/nginx/php-fpm) spawned an interactive shell or scripting interpreter (sh/bash/dash/python/perl) → webshell command execution. Lowest FP, highest fidelity. - H2 (high): A new
.phpfile was written into a web-writable, non-code directory (/images/,/media/,/tmp/) by a web-server-owned process → dropped webshell. - H3 (medium): The web-server process tree spawned recon/network utilities (
whoami/id/uname/curl/wget) shortly after a shell, indicating hands-on-keyboard or scripted post-exploitation. - H4 (medium): A web-server process made outbound connections to new/rare external IPs (ingress tool transfer or reverse shell), i.e. server-initiated egress that is atypical for a content site.
- H5 (medium): Local web/access logs show unauthenticated POSTs to JCE profile-import / file-upload endpoints (
com_jcecontroller,profileimport,uploadtasks) — the exploitation request itself. - H6 (low): A web-server-owned ELF or interpreter executed from a writable upload/temp path (second-stage tooling staged via the webshell).
Attack chain
| Step | Telemetry | Hunt Angle |
|---|---|---|
| 1 · Unauth profile creation + import (CVE-2026-48907) | Web/access logs (POST to com_jce profile import) | H5 — native log review of upload endpoints |
| 2 · Re-enable .php/.txt uploads via imported profile | App/config writes; access logs | H5 — anomalous profile-config change |
| 3 · Upload webshell to writable dir | FileCreateInfo / NewExecutableWritten (TargetFileName) | H2 — .php write into /images, /media, /tmp |
| 4 · Execute webshell → spawn shell | ProcessRollup2 (ParentBaseFileName + ImageFileName) | H1 — web-server → shell lineage |
| 5 · Post-exploitation recon | ProcessRollup2 (CommandLine) | H3 — recon utils under web-server tree |
| 6 · Ingress tool transfer / C2 | NetworkConnectIP4 / DnsRequest | H4 — server-initiated egress to new IPs |
Consolidated IOC Table
Exploitation is automated and payloads/infrastructure rotate; few durable atomic IOCs are published. The values below are behavioral and contextual. Replace REPLACE_WITH_* placeholders with indicators confirmed in your own telemetry before promoting to a block.
| Type | Value | Confidence | Action | Context |
|---|---|---|---|---|
| behavior | httpd/apache2/nginx/php-fpm spawns sh/bash/python/perl | high | detect | Webshell command execution (H1) |
| behavior | New .php written to /images/, /media/, /tmp/ by web-server uid | high | detect | Webshell drop (H2) |
| path | /images/*.php, /media/*.php, /tmp/*.php | medium | hunt | Webshell staging locations |
| uri | index.php?option=com_jce&task=...profile/import / upload | medium | hunt | Exploitation request pattern (H5) |
| sha256 | REPLACE_WITH_WEBSHELL_SHA256 | medium | hunt | Confirmed webshell file hash (perishable) |
| ipv4 | REPLACE_WITH_SCANNER_OR_C2_IP | low | enrich | Source of exploit POST / reverse-shell peer |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Linux web servers running Joomla + JCE (Apache/nginx + PHP-FPM) | Falcon sensor for Linux — ProcessRollup2 | Critical | Low |
| Web-writable upload dirs (/images, /media, /tmp) | FileCreateInfo / NewExecutableWritten / ElfFileWritten | High | Med — file telemetry coverage varies |
| Server-initiated egress | NetworkConnectIP4, DnsRequest | Medium | Low |
| Joomla / web-server access logs | HTTP logs forwarded to NGSIEM (non-sensor) | Medium | High — only if logs are shipped |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 — Exploit Public-Facing Application | Unauth profile-import RCE in JCE | Q5 · Patch (S12) |
| Persistence | T1505.003 — Server Software Component: Web Shell | PHP webshell in writable dir | Q2 · Q6 |
| Execution | T1059 — Command and Scripting Interpreter | Web server spawns sh/bash/python/perl | Q1 · Q3 |
| Discovery | T1059 / T1082 — recon utilities | whoami/id/uname under web-server tree | Q3 |
| Command & Control | T1105 — Ingress Tool Transfer | curl/wget pull; outbound to new IP | Q4 |
Native Audit-Log Hunts (non-CQL)
Checks that do not require Falcon process telemetry — run these directly on the host or against shipped logs:
- JCE version inventory: In Joomla admin → Extensions → Manage, confirm JCE is ≥ 2.9.99.5 (ideally 2.9.99.6). Any host ≤ 2.9.99.4 is presumed exposed.
- Webshell sweep: On each web root, list
.phpfiles under non-code upload dirs and sort by mtime:find /var/www -path '*/images/*' -o -path '*/media/*' -name '*.php' -newermt '2026-06-01' -printf '%TY-%Tm-%Td %p\n' - Access-log review: grep web/access logs for POSTs to
com_jceprofile-import / upload tasks, especially from single source IPs hitting many sites or with non-browser user agents. - Profile-config diff: Review JCE editor profiles for unexpected/unknown profiles or profiles that allow
.php/.txtuploads. - Auth correlation: Webshell activity is unauthenticated — there will be no corresponding admin login. Absence of an auth event before a config change is itself suspicious.
CrowdStrike LogScale CQL Hunt Queries
Looks for: a web-server parent process (httpd/apache2/nginx/php-fpm) directly spawning an interactive shell or scripting interpreter — the core webshell-execution signal (H1). FP: rare; legitimate maintenance crons or PHP exec() in plugins can fire — baseline per host and exclude known scripts.
// HUNT: Web-server process spawns shell/interpreter (webshell execution) // MITRE: T1059, T1505.003 // CONF: high FP: low COST: low | REQUIRES: Falcon for Linux ProcessRollup2 // FALSE POSITIVES: maintenance scripts, plugin exec() of helper binaries // TUNING: exclude known CommandLine helpers (e.g. /usr/bin/convert, sendmail) after baselining #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(httpd|apache2|nginx|php-fpm|php-fpm\d.*)$/i | ImageFileName=/\/(sh|bash|dash|zsh|ksh|python\d?|perl|ruby|nc|ncat)$/i | table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, UserName], limit=200)
Looks for: a .php file created under an upload/temp directory that should only hold media or scratch data (H2) — the dropped webshell. FP: some cache/plugin frameworks write generated .php into /media/ or cache paths; exclude known cache directories and legitimate writer processes.
// HUNT: PHP file dropped into web-writable upload/temp directory (webshell) // MITRE: T1505.003 // CONF: high FP: medium COST: low | REQUIRES: FileCreateInfo / NewExecutableWritten // FALSE POSITIVES: cache frameworks generating .php under /media or cache dirs // TUNING: exclude TargetFileName paths under known cache dirs (e.g. /cache/, /administrator/cache/) #event_simpleName=/NewExecutableWritten/ | TargetFileName=/\/(images|media|tmp|files|attachments)\/.*\.(php|phtml|php\d|phar)$/i | TargetFileName!=/\/(cache|administrator\/cache)\//i | table([@timestamp, ComputerName, aid, TargetFileName, ImageFileName, UserName], limit=200)
Looks for: discovery commands (whoami/id/uname/hostname/ip/netstat) whose parent is a web-server process — hands-on or scripted post-exploitation recon (H3). FP: health-check and monitoring scripts run by the web user; baseline and exclude the monitoring agent's command lines.
// HUNT: Discovery commands spawned by a web-server process // MITRE: T1059, T1082 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: monitoring/health-check scripts run as the web-server user // TUNING: exclude CommandLine of the known monitoring agent; scope to JCE/Joomla hosts #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(httpd|apache2|nginx|php-fpm.*|sh|bash|dash)$/i | ImageFileName=/\/(whoami|id|uname|hostname|ip|ifconfig|netstat|ss|cat|crontab)$/i | table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, UserName], limit=200)
Looks for: download utilities (curl/wget/fetch) executed under the web-server tree, used to pull second-stage tooling (H4/T1105). FP: package updates, plugin update checks, and legitimate API calls; exclude known update endpoints and scope to JCE hosts.
// HUNT: Download tooling executed by web-server tree (ingress tool transfer) // MITRE: T1105 // CONF: medium FP: medium COST: medium | REQUIRES: ProcessRollup2 // FALSE POSITIVES: OS/plugin update checks, legitimate outbound API calls // TUNING: exclude CommandLine matching known update/CDN hosts; restrict to Joomla/JCE servers #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(httpd|apache2|nginx|php-fpm.*|sh|bash|dash|python\d?)$/i | ImageFileName=/\/(curl|wget|fetch|tftp)$/i | CommandLine=/https?:\/\//i | table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, UserName], limit=200)
Looks for: HTTP POSTs to JCE com_jce profile-import / upload endpoints in web access logs shipped to NGSIEM — the exploitation request itself (H5). FP: legitimate admin profile management; correlate with an authenticated admin session and source IP reputation. Requires web/access logs forwarded to NGSIEM (adjust field names to your parser).
// HUNT: Unauthenticated POST to JCE profile-import / upload endpoint // MITRE: T1190, T1505.003 // CONF: medium FP: medium COST: medium | REQUIRES: web/access logs in NGSIEM // FALSE POSITIVES: legitimate admin profile management from a known admin IP/session // TUNING: exclude requests from known admin source IPs; adjust field names to your HTTP parser #repo=* | method=/POST/i | url=/option=com_jce/i | url=/(task=.*profile.*import|task=.*upload|controller=profiles)/i | table([@timestamp, src_ip, host, method, url, status, http_user_agent], limit=200)
Looks for: any binary or interpreter executing with an ImageFileName under a web-writable upload/temp directory (H6) — second-stage tooling staged through the webshell. FP: low; legitimate apps rarely execute from /tmp or /images. Investigate every hit.
// HUNT: Process executing from a web-writable upload/temp directory // MITRE: T1059, T1105 // CONF: medium FP: low COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: rare; some installers stage to /tmp briefly // TUNING: exclude package-manager temp build paths if your distro uses them #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ImageFileName=/^\/(tmp|var\/tmp|dev\/shm)\/|\/(images|media|files)\//i | table([@timestamp, ComputerName, aid, ImageFileName, ParentBaseFileName, CommandLine, UserName], limit=200)
CrowdStrike Custom IOA Recommendations
Promotion candidates from the hunt queries above (Linux platform, Process Create rule type):
| IOA Name | Pattern | Exclusions | Action / Deployment |
|---|---|---|---|
| WebServer Spawns Shell (JCE RCE) | Parent ImageFileName httpd|apache2|nginx|php-fpm → Child sh|bash|dash|python|perl | Known maintenance/health-check command lines | Detect → Block after 1–2 wk baseline (from Q1) |
| Exec From Web-Writable Path | Grandparent/parent web-server; ImageFileName under /tmp, /images, /media | Distro package-build temp paths | Detect (from Q6) |
| WebServer Downloads Tooling | Web-server tree → curl|wget with http(s):// in command line | Known update/CDN endpoints | Detect (from Q4) |
Q2 (PHP file write) is best deployed as a scheduled-search detection rather than a Process-Create IOA, since it keys on file telemetry, not process creation.
Machine-Readable IOC Appendix
One-click copy blocks for ingestion. Atomic indicators are perishable for this automated campaign — use placeholders until you confirm values in your own telemetry.
type,value,action,severity,expiration,description,tags sha256,REPLACE_WITH_WEBSHELL_SHA256,detect,critical,2026-12-18,JCE CVE-2026-48907 webshell,campaign:JoomlaJCE ipv4,REPLACE_WITH_SCANNER_OR_C2_IP,detect,high,2026-09-18,JCE exploit source or C2,campaign:JoomlaJCE domain,REPLACE_WITH_C2_DOMAIN,detect,high,2026-09-18,JCE second-stage C2,campaign:JoomlaJCE
parent_proc IN (httpd, apache2, nginx, php-fpm) AND child_proc IN (sh, bash, dash, python, perl) # webshell exec file_write: *.php INTO (/images/, /media/, /tmp/, /files/) # webshell drop proc_exec FROM (/tmp/, /var/tmp/, /dev/shm/, /images/) # staged tooling http_post: option=com_jce & (profile import | upload) # exploit request
CVE-2026-48907 — Joomla Content Editor (JCE) unauth RCE Affected: JCE <= 2.9.99.4 Fixed: 2.9.99.5 (hardening in 2.9.99.6) Mechanism: profile-import authz bypass + .php/.txt upload re-enable Webshell drop dirs: /images/ /media/ /tmp/ /files/ Server: Linux, Apache/nginx + PHP-FPM
# Find JCE version across web roots (XML manifest) grep -rl --include=jce.xml -m1 'version' /var/www 2>/dev/null \ | xargs -r grep -H '<version>' # Webshell sweep: new .php in upload dirs since campaign start find /var/www \( -path '*/images/*' -o -path '*/media/*' \) \ -name '*.php' -newermt '2026-06-01' -printf '%TY-%Tm-%Td %p\n'
Detection Validation Gates
| Gate | Check | Pass Criteria |
|---|---|---|
| 1 · Telemetry ready | Falcon for Linux deployed on all Joomla/JCE hosts; ProcessRollup2 and file events flowing | Events seen from every web host in last 24h |
| 2 · Benign baseline | Run Q1–Q4 over 7–14 days; catalog legitimate web-server→shell/curl activity (crons, monitoring) | Known-good command lines enumerated & excluded |
| 3 · Positive test | In a lab Joomla host, drop a benign .php into /images/ and have the web user run id | Q1 and Q2 both fire on the test action |
| 4 · Promotion | Q1/Q6 FP rate acceptable after tuning | Promote Q1 to blocking IOA; keep Q3–Q5 as investigate-only |
Hardening — Tiered
- Patch JCE to ≥ 2.9.99.5 (prefer 2.9.99.6) on every Joomla site. This closes CVE-2026-48907. (T1190 / MITRE M1051 — Update Software; vendor advisory.)
- Webshell sweep + eradication: run the audit block (S10) and remove any unexplained
.phpunder upload dirs; treat hits as confirmed compromise → containment runbook (S14). - Deploy Q1 as a detection on all Joomla hosts immediately, even before patching completes — it catches live exploitation. (M1040 — Behavior Prevention.)
- Disable code execution in upload dirs: configure Apache/nginx so
/images/,/media/,/tmp/cannot execute PHP (deny.phphandler in those locations). Defangs the webshell even if dropped. (M1042 — Disable or Remove Feature; CIS Apache/nginx Benchmark.) - Least-privilege web user + read-only code: run PHP-FPM as a low-priv user; make the Joomla code tree read-only to the web user; keep writable dirs on a
noexecmount. (M1026 — Privileged Account Management; CIS Linux Benchmark §1.1 mount options.) - WAF / virtual patch: add a rule blocking unauthenticated POSTs to
com_jceprofile-import/upload endpoints. (M1050 — Exploit Protection.)
- Egress filtering: default-deny outbound from web servers; allow only known update/CDN hosts. Breaks ingress tool transfer and reverse shells. (M1037 — Filter Network Traffic.)
- Extension governance: inventory all Joomla extensions, subscribe to vendor advisories, and establish an SLA to patch internet-facing CMS plugins within 48h of a KEV listing. (M1051.)
Deployable Playbooks
A · Block PHP execution in upload dirs (Apache)
Drop into the vhost / .htaccess of each web-writable directory:
# /var/www/<site>/images/.htaccess (repeat for media, tmp, files)
<FilesMatch "\.(php|phtml|php[0-9]|phar)$">
Require all denied
</FilesMatch>
php_admin_flag engine off
B · Block PHP execution in upload dirs (nginx)
# in the server { } block, before the generic php location
location ~* ^/(images|media|tmp|files)/.*\.(php|phtml|php[0-9]|phar)$ {
deny all;
return 403;
}
C · Harden writable mount + web-user privileges (Linux)
# mount the upload/tmp volume noexec,nosuid,nodev (then remount)
# /etc/fstab: /var/www/<site>/tmp ext4 defaults,noexec,nosuid,nodev 0 0
mount -o remount /var/www/<site>/tmp
# make the Joomla code tree read-only to the PHP-FPM user (www-data)
chown -R root:www-data /var/www/<site>
find /var/www/<site> -type d -exec chmod 750 {} \;
find /var/www/<site> -type f -exec chmod 640 {} \;
systemctl restart php-fpm
D · Patch verification
# confirm JCE manifest reports a fixed version (>= 2.9.99.5) grep -rH '<version>' /var/www --include=jce.xml 2>/dev/null
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host in Falcon; preserve memory + disk; do not reboot. Snapshot if virtual. | SOC / IR | Falcon containment record; snapshot ID |
| Eradicate | Identify & remove all webshell .php files (S10 sweep); kill web-server child shells; rotate any secrets readable by the web user (DB creds in configuration.php). | IR / Web admin | File hashes, process tree, removed-file inventory |
| Patch | Upgrade JCE to ≥ 2.9.99.5; apply upload-dir exec-deny + noexec mount (S13) before returning to service. | Web admin | JCE version readout; config diff |
| Recover | Restore from known-clean backup predating compromise if integrity uncertain; lift containment; monitor Q1/Q2/Q4 for 14 days. | SOC / Web admin | Backup restore log; post-restore hunt results |
| Report | For FCEB: document remediation against the CISA KEV directive. Log root cause, dwell time, data accessed. | IR lead | Timeline; KEV remediation record |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1190 | Exploit JCE profile-import endpoint | Q5 (log-dependent) | — | Partial — needs shipped access logs |
| T1505.003 | Webshell file drop | Q2, Q6 | Q6 path | Good |
| T1059 | Web server spawns shell/interpreter | Q1, Q3 | Q1 (block candidate) | Good |
| T1082 | Post-exploitation recon | Q3 | — | Partial — FP tuning required |
| T1105 | Ingress tool transfer / outbound | Q4 | Q4 | Good |
| Privilege escalation / lateral | Post-foothold movement | — | — | GAP — out of scope; use core EDR detections |
Validation: Coverage of the webshell-execution spine (Q1/Q2) is strong and low-FP. The exploitation request (Q5) is only covered where web/access logs are forwarded to NGSIEM — confirm log shipping or accept the partial gap. Post-foothold lateral movement is intentionally out of scope here and is covered by standard EDR detections. Validate Q2/Q6 path regexes and Q5 HTTP field names against your tenant before deploying.
Hunt Summary Ticket
TITLE: Hunt — CVE-2026-48907 Joomla Content Editor (JCE) Unauth RCE → Webshell
SEVERITY: Critical (CVSS 10.0, CISA KEV, exploited ITW)
SCOPE: Linux web servers running Joomla + JCE (Apache/nginx + PHP-FPM)
HYPOTHESIS: Unauth profile-import RCE drops a PHP webshell into a web-writable dir;
web-server process then spawns shells / pulls tooling / beacons out.
QUERIES: Q1 webserver->shell | Q2 .php write to upload dir | Q3 recon | Q4 egress |
Q5 com_jce POST (log) | Q6 exec from writable path
DO FIRST: 1) Inventory JCE version; patch any host <= 2.9.99.4 to >= 2.9.99.5
2) Run Q1 + Q2 across all Joomla hosts; sweep /images /media /tmp for .php
3) Any hit = treat as live webshell -> containment runbook (S14)
FINDINGS: <fill: hosts, files, process trees, source IPs>
GAPS: Q5 needs access logs in NGSIEM; lateral movement out of scope
ACTIONS: Patch JCE; deny PHP exec in upload dirs; noexec mount; egress filter
OWNER: HuntPack
VERSION: v0.1 · 2026-06-18
Changelog
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.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 · Gov | CISA Known Exploited Vulnerabilities Catalog | KEV listing (2026-06-16), FCEB directive | 2026-06-18 |
| 1 · Vendor | YesWeHack — RCE in Joomla Content Editor extension | Root cause, chained profile-import flaw, fixed version | 2026-06-18 |
| 2 · Press | BleepingComputer — CISA orders feds to patch max-severity Joomla plugin flaw | Severity, directive, timeline | 2026-06-18 |
| 2 · Press | The Hacker News — CISA warns of actively exploited Joomla flaw | Active exploitation, webshell behavior | 2026-06-18 |
| 2 · Press | SC World — Max-severity JCE flaw targeted in automated attacks | Automated exploitation context | 2026-06-18 |