Adobe ColdFusion CVE-2026-48282 — RDS FILEIO Path Traversal → Unauthenticated RCE
Executive Summary
CVE-2026-48282 is a CVSS 10.0 path-traversal flaw in Adobe ColdFusion's Remote Development Services (RDS) FILEIO handler. An unauthenticated attacker sends a crafted RDS FILEIO WRITE request to /CFIDE/main/ide.cfm?ACTION=FILEIO and writes an arbitrary file — including a .cfm webshell — anywhere on disk, including the web root. The result is unauthenticated remote code execution as the ColdFusion service account.
Exploitation is realistic only where RDS is enabled and its authentication is disabled (not the ColdFusion default), but that misconfiguration is common on developer-adjacent and legacy CF servers. KEVIntel's honeypot network observed in-the-wild exploitation within roughly two hours of public disclosure on 2026-07-02, with early attacks from 103.207.14.220. The flaw is in CISA KEV.
The attacker's objective is a persistent web foothold. The highest-value defensive angle is process ancestry: the ColdFusion JVM (coldfusion.exe / java.exe under the CF service, or jrun) should almost never spawn cmd.exe, powershell.exe, /bin/sh, certutil, curl or whoami. Pair that with detection of newly written .cfm/.cfc/.cfml/.jsp files under web-servable ColdFusion paths.
Defender priority: Patch to ColdFusion 2025 Update 10 / 2023 Update 21 and disable RDS in production now. Until patched, hunt for ColdFusion-JVM child processes (Q1/Q5) and webshell writes under wwwroot\CFIDE / cfusion\wwwroot / cf_scripts (Q2) — these fire even when the exploiting request itself was not logged.
Source Review & Web Hunter Notes
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| 1 | Adobe PSIRT (APSB) advisory | CVE-2026-48282, CVSS 10.0; fixed in ColdFusion 2025 Update 10 and 2023 Update 21. | Yes — versions, patch |
| 1 | CISA KEV Catalog | Added on evidence of active exploitation; federal remediation mandated. | Yes — priority |
| 2 | Resecurity — RDS FILEIO analysis | Vulnerable handler /CFIDE/main/ide.cfm?ACTION=FILEIO; RDS RPC WRITE writes files to web root; requires RDS enabled + auth disabled. | Yes — endpoint, mechanism |
| 2 | SecurityAffairs / HelpNetSecurity | Exploited within ~2 hours of disclosure (2026-07-02); attacker IP 103.207.14.220 (India) via KEVIntel honeypots (Ryan Dewhurst). | Yes — IOC, timeline |
| 2 | BleepingComputer / vendor | File-based IOCs: new/modified .cfm/.cfc/.cfml/.jsp under web-servable CF paths; CF JVM spawning cmd/powershell/certutil/curl/wget/whoami/net. | Yes — behaviors |
Web-hunter note: No malware hashes or additional attacker infrastructure have been published beyond the single scanner IP. This pack is therefore behavior-led — atomic IOCs are limited to 103.207.14.220 (perishable, hunt-only). Do not enrich with unattributed indicators.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high): A ColdFusion JVM process (
coldfusion.exe/java.exe/jrun.exe) spawns a shell or LOLBin — the post-exploitation command-execution signal. Very low FP on a web tier. - H2 (high): A new
.cfm/.cfc/.cfml/.jspfile is written under a ColdFusion web-servable path by the CF process — the dropped webshell. - H3 (high): ColdFusion JVM spawns
powershell.exewith encoded/obfuscated arguments (-enc,FromBase64String, hidden window). - H4 (medium): ColdFusion JVM initiates outbound network connections to download second-stage tooling, or any host connects to the known scanner IP.
- H5 (medium): Web/proxy logs show POST requests to
/CFIDE/main/ide.cfmcarryingACTION=FILEIO— the exploitation request itself (requires web-log ingest). - H6 (medium): Reconnaissance discovery commands (
whoami,net,ipconfig,systeminfo) executed by CF-spawned shells shortly after a webshell write.
Attack chain
| # | Step | Telemetry | Hunt angle |
|---|---|---|---|
| 1 | Recon: fingerprint /CFIDE/main/ide.cfm on 8500/443 | Web/proxy logs | H5 — GET to ide.cfm, CF headers |
| 2 | Exploit: RDS FILEIO WRITE writes webshell to web root | Web logs · FileWrite | H2, H5 |
| 3 | Access webshell: GET /shell.cfm?cmd=... | ProcessRollup2 | H1, H6 |
| 4 | Execute: CF JVM spawns cmd/powershell/LOLBin | ProcessRollup2 | H1, H3 |
| 5 | Stage tooling: certutil/curl/wget download | ProcessRollup2 · NetworkConnectIP4 | H4 |
| 6 | Discovery / lateral prep | ProcessRollup2 | H6 |
Consolidated IOC Table
Provenance note: Only one atomic network IOC has been published (a honeypot-observed scanner). No file hashes or C2 domains are available. Treat the IP as hunt/enrich, not a standalone block — it is a scanning source and highly perishable.
| Type | Value | Confidence | Action | Context | Expiry |
|---|---|---|---|---|---|
| IPv4 | 103.207.14.220 | Medium | hunt | Early exploitation source (India), KEVIntel honeypots, 2026-07-02 | 2026-08-08 |
| URI pattern | /CFIDE/main/ide.cfm?ACTION=FILEIO | High | hunt | RDS FILEIO exploitation endpoint (POST, application/octet-stream) | 2026-10-08 |
| File pattern | *.cfm/.cfc/.cfml/.jsp in wwwroot\CFIDE, cfusion\wwwroot, cf_scripts | Medium | hunt | Webshell drop location (behavioral) | 2026-10-08 |
| Behavior | CF JVM → cmd/powershell/certutil/curl/whoami | High | hunt | Post-exploitation command execution | n/a |
Affected Surface & Telemetry Matrix
| Surface | Required telemetry | Priority | Gap risk |
|---|---|---|---|
| Windows CF hosts (coldfusion.exe/java.exe) | ProcessRollup2, file-write events | Critical | Low — standard Falcon EDR |
| Linux CF hosts (java under CF service) | SyntheticProcessRollup2, file-write | Critical | Med — confirm Linux sensor coverage |
| Web root / CFIDE file system | File-write telemetry on wwwroot | High | Med — dir may be excluded from FIM |
| Perimeter / reverse proxy | HTTP access logs (NGSIEM) | Medium | High — web logs often not ingested |
| Egress from web tier | NetworkConnectIP4, DnsRequest | Medium | Low |
ATT&CK Mapping
| Tactic | Technique | Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 — Exploit Public-Facing Application | RDS FILEIO path traversal → file write | Q5 · patch/RDS disable |
| Persistence | T1505.003 — Web Shell | .cfm webshell dropped in web root | Q2 · Q9 IOA |
| Execution | T1059.001 / T1059.003 / T1059.004 — Command & Scripting Interpreter | CF JVM spawns powershell/cmd/sh | Q1 · Q3 |
| Defense Evasion | T1140 — Deobfuscate / Decode | Encoded PowerShell from CF parent | Q3 |
| Command & Control | T1105 — Ingress Tool Transfer | certutil/curl/wget staging download | Q1 · Q4 |
| Discovery | T1033 / T1082 — Owner / System Discovery | whoami/net/systeminfo from CF shell | Q6 |
Native Audit-Log Hunts (non-CQL)
- ColdFusion Administrator log review: In
cfusion\logs\rdsservice.logandexception.log, look for unexpected RDS FILEIO activity and file-write exceptions to web-servable paths. - Web server access logs (IIS/Apache/nginx): Filter for
POSTto/CFIDE/main/ide.cfmwith query string containingACTION=FILEIO, and any subsequent GETs to non-standard.cfmfiles with acmd=parameter. - File integrity monitoring: Enumerate
.cfm/.cfc/.cfml/.jspfiles under the web root modified after 2026-07-01 that are not part of the application build manifest. - ColdFusion config: Confirm whether RDS is enabled and whether RDS authentication (a required RDS password) is configured — a disabled-auth RDS is the exploit precondition.
CrowdStrike LogScale CQL Hunt Queries
Looks for: a ColdFusion service process directly launching a command interpreter or download LOLBin — the strongest single post-exploitation signal. FP: some CF apps shell out via cfexecute for legitimate batch jobs; baseline per-host and exclude known scheduled maintenance scripts.
// HUNT: ColdFusion JVM spawns shell / LOLBin (CVE-2026-48282 post-exploit) // MITRE: T1059.001/003/004, T1105 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 | FALSE POSITIVES: cfexecute batch jobs // TUNING: exclude approved maintenance script paths per host #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(coldfusion|jrun|cfexec|java|coldfusionsvc)(\.exe)?$/i | FileName=/^(cmd|powershell|pwsh|whoami|net1?|certutil|curl|wget|bitsadmin|cscript|wscript|mshta|bash|sh|dash|python[0-9.]*)(\.exe)?$/i | table([ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName, ProcessStartTime], limit=200)
Looks for: a new server-side script file (.cfm/.cfc/.cfml/.jsp) written into a ColdFusion web-servable directory by the CF process — the dropped webshell. FP: legitimate application deployments and hotfixes also write .cfm files; exclude your CI/CD deploy account and maintenance windows, and alert on writes whose parent is the CF JVM rather than a deploy tool.
// HUNT: Webshell dropped in ColdFusion web root (T1505.003) // MITRE: T1505.003 | CONF: high FP: med COST: low // REQUIRES: file-write telemetry | FALSE POSITIVES: app deploys / hotfixes // TUNING: exclude CI/CD deploy account; require ParentBaseFileName = CF JVM #event_simpleName=/NewScriptWritten|PeFileWritten|FileCreateInfo|NewExecutableWritten/ | TargetFileName=/\.(cfm|cfml|cfc|jsp|jspx)$/i | TargetFileName=/(wwwroot|cfide|cf_scripts|cfusion)/i | ParentBaseFileName=/^(coldfusion|jrun|java|coldfusionsvc)(\.exe)?$/i | table([ComputerName, aid, ParentBaseFileName, TargetFileName, UserName, Timestamp], limit=200)
Looks for: PowerShell launched by the CF JVM with encoded, hidden, or download-cradle arguments — obfuscated second-stage execution. FP: extremely rare from a web-app parent; investigate every hit.
// HUNT: Encoded/obfuscated PowerShell from ColdFusion parent // MITRE: T1059.001, T1140 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 | FALSE POSITIVES: rare — always triage #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(coldfusion|jrun|java|coldfusionsvc)(\.exe)?$/i | FileName=/^(powershell|pwsh)(\.exe)?$/i | CommandLine=/-enc|-encodedcommand|frombase64string|-nop|-w hidden|-windowstyle hidden|downloadstring|iex |invoke-webrequest/i | table([ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName], limit=200)
Looks for: outbound connections initiated by the ColdFusion JVM (tool staging / callback), or any endpoint reaching the published scanner IP. FP: CF apps make legitimate outbound calls (APIs, DB, update checks); scope to non-corporate destinations and correlate with Q1/Q2 hits before alerting.
// HUNT: CF JVM outbound egress or contact with known scanner IP // MITRE: T1105, T1071 | CONF: med FP: med COST: low // REQUIRES: NetworkConnectIP4 | FALSE POSITIVES: legit CF API/DB traffic // TUNING: allowlist known API/DB endpoints; keep the IP clause standalone #event_simpleName=/NetworkConnectIP4/ | RemoteAddressIP4=/^103\.207\.14\.220$|^10\.|^192\.168\.|^172\.(1[6-9]|2[0-9]|3[01])\./ | ContextBaseFileName=/^(coldfusion|jrun|java|coldfusionsvc)(\.exe)?$/i | table([ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort, Timestamp], limit=200)
Looks for: the exploitation request itself in ingested HTTP access logs — a request to the RDS ide.cfm endpoint carrying ACTION=FILEIO. FP: legitimate RDS use from developer IPs; allowlist known developer source ranges. Requires NGSIEM web-log ingestion (parser fields shown in snake_case).
// HUNT: RDS FILEIO exploit request (requires web/proxy log ingest) // MITRE: T1190 | CONF: med FP: med COST: med // REQUIRES: HTTP access logs | FALSE POSITIVES: legit developer RDS use // TUNING: allowlist known developer source subnets url=/ide\.cfm/i | url=/action=fileio/i OR http_method=/POST/i | groupBy([src_ip, url, http_method], function=count()) | sort(_count, order=desc)
Looks for: host/user reconnaissance run by a process whose grandparent is the CF JVM — typical first commands through a fresh webshell. FP: admin/monitoring scripts; scope to CF-parented shells and correlate with Q1/Q2.
// HUNT: recon commands under a ColdFusion-spawned shell // MITRE: T1033, T1082, T1016 | CONF: med FP: med COST: low // REQUIRES: ProcessRollup2 | FALSE POSITIVES: admin scripting // TUNING: require GrandparentBaseFileName = CF JVM; correlate with Q1/Q2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | GrandparentBaseFileName=/^(coldfusion|jrun|java|coldfusionsvc)(\.exe)?$/i | FileName=/^(whoami|hostname|ipconfig|ifconfig|systeminfo|net1?|nltest|arp|tasklist|quser|id)(\.exe)?$/i | table([ComputerName, aid, GrandparentBaseFileName, ParentBaseFileName, FileName, CommandLine, UserName], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA name | Pattern | Exclusions | Action |
|---|---|---|---|
| CF-JVM-Spawns-Shell | Parent image = coldfusion/jrun/java (CF svc); child = cmd/powershell/sh/certutil/curl/wget | Approved batch/maintenance script paths | Detect → Block (high confidence) |
| CF-Webshell-Write | File create of *.cfm/.cfc/.jsp under wwwroot/CFIDE where parent = CF JVM | CI/CD deploy account & window | Detect |
| CF-Encoded-PowerShell | Parent = CF JVM; child = powershell with -enc/hidden/download cradle | None — investigate all | Block |
Promote Q1 and Q3 to blocking Custom IOAs first — both are near-zero FP on a web tier. Keep Q2 as detect-only until the deploy-account exclusion is confirmed.
Machine-Readable IOC Appendix
Only one published atomic indicator exists (a perishable scanner IP). Hashes/C2 are REPLACE_WITH_... placeholders — fill only from your own confirmed findings, never from unattributed feeds.
type,value,action,severity,expiration,description,tags ipv4,103.207.14.220,detect,high,2026-08-08,CVE-2026-48282 early exploitation scanner,campaign:ColdFusion-RDS-FILEIO sha256,REPLACE_WITH_WEBSHELL_SHA256,detect,high,2027-01-08,CF webshell (confirm locally),campaign:ColdFusion-RDS-FILEIO domain,REPLACE_WITH_C2_DOMAIN,detect,high,2026-10-08,CF second-stage C2 (confirm locally),campaign:ColdFusion-RDS-FILEIO
Parent(coldfusion|jrun|java svc) -> Child(cmd|powershell|sh|certutil|curl|wget|whoami) FileWrite(*.cfm|*.cfc|*.jsp) under wwwroot|CFIDE|cf_scripts by CF JVM PowerShell(-enc|FromBase64String|-w hidden) with CF parent POST /CFIDE/main/ide.cfm?ACTION=FILEIO from non-developer source
CVE: CVE-2026-48282 (CVSS 10.0) Component: ColdFusion Remote Development Services (RDS) FILEIO handler Endpoint: /CFIDE/main/ide.cfm?ACTION=FILEIO (POST, application/octet-stream) Precondition: RDS enabled AND RDS authentication disabled Webshell ext: .cfm .cfml .cfc .jsp .jspx
Fixed: ColdFusion 2025 Update 10 | ColdFusion 2023 Update 21 Vulnerable: 2025 Update 9 and earlier (2025.9); 2023 Update 20 and earlier (2023.20) Audit: is RDS enabled? is an RDS password set? is /CFIDE reachable externally? Action: patch, disable RDS in prod, block /CFIDE at the proxy
Detection Validation Gates
| Gate | Check | Pass criteria |
|---|---|---|
| Telemetry ready | ProcessRollup2 + file-write present on CF hosts | CF hosts appear in ProcessRollup2 within 24h |
| Benign baseline | Run Q1/Q2 over 7–14 days pre-deployment | Document any legit cfexecute / deploy writes as exclusions |
| Positive test | In a lab: CF service spawns cmd.exe; write a test .cfm to wwwroot | Q1 and Q2 both fire |
| Promotion | Q1/Q3 FP rate acceptable | Promote to blocking IOA; keep Q2 detect-only until deploy exclusion set |
Hardening — Tiered
- Patch to ColdFusion 2025 Update 10 or 2023 Update 21 (MITRE M1051 — Update Software; Adobe APSB advisory).
- Disable RDS in production. RDS is a development feature; it should be off on prod. If it must run, set an RDS password so FILEIO requires authentication (Adobe ColdFusion Lockdown Guide).
- Block
/CFIDEexternally at the reverse proxy/WAF; restrict CF Administrator and RDS to an admin VLAN (M1030 — Network Segmentation).
- WAF rule denying
POSTto/CFIDE/main/ide.cfmand any request withACTION=FILEIO(M1050 — Exploit Protection). - Run the CF service as a low-privilege account with no write access outside the app tree; deny write to system/startup dirs (M1026 — Privileged Account Management).
- Egress filtering from the web tier — default-deny outbound so a webshell cannot pull second-stage tooling (M1037 — Filter Network Traffic).
- File integrity monitoring on the web root — alert on any new server-side script outside a signed deploy (M1022 — Restrict File/Directory Permissions).
- Remove CF admin surfaces from the internet entirely; front all management with VPN + MFA.
- Apply the full ColdFusion Lockdown Guide baseline and add it to the build image so new servers ship hardened.
Deployable Playbooks
1 · Windows — check ColdFusion exposure (PowerShell)
# Find ColdFusion install + version, and recently-modified webshell candidates
Get-ChildItem 'C:\ColdFusion*','C:\inetpub' -Recurse -Include *.cfm,*.cfc,*.cfml,*.jsp -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt (Get-Date '2026-07-01') } |
Select-Object FullName,LastWriteTime,Length | Sort-Object LastWriteTime -Descending
# Is RDS reachable locally? (expects 403/redirect once locked down)
Invoke-WebRequest -UseBasicParsing -Uri 'http://localhost:8500/CFIDE/main/ide.cfm' -Method Head -ErrorAction SilentlyContinue |
Select-Object StatusCode
2 · IIS / reverse proxy — block the RDS endpoint
# IIS URL Rewrite (web.config) — deny the vulnerable RDS handler
<rule name="Block-CF-RDS-FILEIO" stopProcessing="true">
<match url="CFIDE/main/ide\.cfm" />
<action type="AbortRequest" />
</rule>
# nginx equivalent
location ~* /CFIDE/main/ide\.cfm { return 403; }
location ~* /CFIDE/ { allow 10.0.0.0/8; deny all; }
3 · Linux — locate recently written webshells
# CF service tree recently-written server-side scripts (review each hit) find /opt/coldfusion* /var/www -type f \( -name '*.cfm' -o -name '*.cfc' -o -name '*.jsp' \) -newermt '2026-07-01' -printf '%TY-%Tm-%Td %p\n' 2>/dev/null | sort
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the CF host in Falcon; block 103.207.14.220 and any confirmed C2 at the perimeter | SOC | Containment ticket, Q4 hits |
| Eradicate | Kill CF-spawned shells; remove unauthorized .cfm/.jsp from web root; preserve copies for forensics | IR + web team | Webshell files, Q1/Q2 timeline |
| Patch | Apply ColdFusion 2025 U10 / 2023 U21; disable RDS; set RDS password if required | App owner | Version banner, config |
| Rotate | Rotate CF datasource creds, service-account secrets, and any keys reachable from the host | IAM | Rotation log |
| Recover | Rebuild from known-good if RCE confirmed; re-baseline; enable FIM on web root | Platform | Rebuild record |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1190 | RDS FILEIO exploit request | Q5 | — | Partial — needs web logs |
| T1505.003 | Webshell write | Q2 | CF-Webshell-Write | Good |
| T1059.x | CF JVM spawns shell | Q1 | CF-JVM-Spawns-Shell | Good |
| T1140 | Encoded PowerShell | Q3 | CF-Encoded-PowerShell | Good |
| T1105 | Tool staging / egress | Q4 | — | Partial |
| T1033/T1082 | Discovery | Q6 | — | Good |
Known gaps: The exploitation request (T1190) is only visible where HTTP access logs are ingested into NGSIEM — on hosts without web-log ingest, rely on the post-exploitation signals (Q1–Q3). No atomic file/domain IOCs are published, so IOC-based blocking is limited to the single perishable scanner IP.
Hunt Summary Ticket
TITLE: Adobe ColdFusion CVE-2026-48282 — RDS FILEIO Path Traversal RCE SEVERITY: Critical (CVSS 10.0, exploited in the wild) SCOPE: Internet-facing / dev-adjacent ColdFusion 2025 <=U9, 2023 <=U20 with RDS enabled + auth disabled HYPOTHESIS: Attacker wrote a .cfm webshell via RDS FILEIO and executed commands via the CF JVM QUERIES: Q1 CF JVM spawns shell | Q2 webshell write | Q3 encoded PS | Q4 egress/scanner IP | Q5 web-log exploit req | Q6 discovery DO FIRST: Run Q1 + Q2 across all CF hosts; confirm patch level and whether RDS is enabled FINDINGS: <record hits> GAPS: T1190 request needs web-log ingest; no published hashes/C2 beyond one scanner IP ACTIONS: Patch to 2025 U10 / 2023 U21; disable RDS; block /CFIDE at proxy; promote Q1/Q3 to IOA OWNER: HuntPack VERSION: v0.2 · 2026-07-08
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 | Adobe PSIRT — ColdFusion security bulletin (APSB, CVE-2026-48282) | Severity, affected/fixed versions | 2026-07-08 |
| 1 | CISA KEV Catalog | Active-exploitation confirmation | 2026-07-08 |
| 2 | Resecurity — RDS FILEIO Path Traversal to RCE | Endpoint, exploit mechanism, versions | 2026-07-08 |
| 2 | SecurityAffairs — exploited in the wild | Timeline, scanner IP | 2026-07-08 |
| 2 | HelpNetSecurity — exploitation detected | KEVIntel honeypot corroboration | 2026-07-08 |
| 2 | BleepingComputer — max-severity flaw exploited | File + process IOCs | 2026-07-08 |