Adobe ColdFusion servers are often old, internet-facing and forgotten, and attackers keep returning to them because deserialization and access control flaws turn an exposed Administrator into code execution. The CISA Known Exploited Vulnerabilities catalogue lists 16 ColdFusion entries, from 2010 directory traversal in the administrator console to 2023 deserialization flaws marked as used in ransomware campaigns. This guide sets out how authentication and administration work in ColdFusion, the settings from Adobe's own lockdown guide that close the common entry points, and what to log and hunt for so that compromise is found and contained. It is for application server administrators, incident responders and security engineers who inherit ColdFusion estates. If you are already responding to a suspected web shell, start with the Web Shell Response Playbook and return here to harden the rebuilt server.
Key takeaways
- Patch ColdFusion and the JDK together. Adobe's bulletins state that applying the ColdFusion update without the matching JDK or JRE update will not secure the server.
- The Administrator and AdminAPI must not be reachable from the internet. Block
/CFIDEat the web server and restrict "Allowed IP Addresses for ColdFusion Internal Components"; KEV describes CVE-2024-20767 as exploitable through an internet-exposed admin panel. - Run the Secure Profile and the lockdown tool. Adobe's auto-lockdown installer applies a dedicated service account, file permissions, connector rules and recommended Administrator settings, and rolls back if it fails.
- The password seed protects stored credentials. Data source and service passwords are encrypted with the seed in
seed.properties, so a server compromise means rotating every database and service credential it held. - Assume compromise on unpatched exposed servers. With exploitation going back years, an internet-facing server that missed updates needs a hunt for web shells before it is trusted again.
How identity and access work in Adobe ColdFusion
ColdFusion has two separate access planes, and hardening must cover both. The application plane is whatever the developers built: CFML pages and components, their own sign-in logic and sessions. The server plane is the ColdFusion Administrator, the AdminAPI, Remote Development Services (RDS), the Performance Monitoring Toolset (PMT) and internal servlets, which control the whole server.
| Component | What it exposes | Lockdown guide setting |
|---|---|---|
ColdFusion Administrator (/CFIDE/administrator) | Full server configuration, data sources, scheduled tasks | Block /CFIDE at the web server; restrict Allowed IP Addresses for ColdFusion Internal Components (section 4.29) |
| AdminAPI | Programmatic administration | Covered by the same internal components IP restriction |
| Remote Development Services | Remote file and data source access for IDEs | Keep RDS disabled and remove the RDSServlet mapping (4.26) |
| Exposed services | Remote service access | Leave "Allowed IP Addresses for Exposed Services" empty (4.29) |
| Built-in web server (default port 8500) | Direct access bypassing the front-end web server | Change the port, bind to 127.0.0.1, use TLS, or disable it if unused (2.3.8, 5.1 to 5.3) |
| PMT endpoints | /pms, /connector, /__cf_connector_heartbeat__ | Block if PMT is not used (5.8) |
| Internal servlets and mappings | CFSecurityAnalyzerServlet, JSDebugServlet, /gateway | Comment out or remove unused ones (4.6, 5.11) |
For the application plane, the lockdown guide sets ColdFusion session defaults that apply to every application unless it overrides them: "Use UUID for CFToken", a session variable default timeout of 20 minutes or less and a maximum under two days, cookies marked HTTPOnly and Secure (where all sites use HTTPS), and a SameSite default of lax or strict (section 4.5). Application sign-in logic is the developers' responsibility; review it against the Application Security Guide.
Admin roles and privileged access
A fresh install can be administered with a single shared password. Adobe's lockdown guide moves away from that model.
- Named administrator accounts: choose "Separate user name and password authentication" (4.25) and add a user account for each person who signs in to the Administrator (4.28). Separate accounts let you limit which parts of the Administrator each user can use and attribute changes to a person.
- No concurrent sessions: uncheck "Allow concurrent login sessions for Administrator Console" (4.25).
- Network restriction first: the IP allow list for internal components is the control that stops internet attackers reaching the Administrator at all. Pair it with web server rules blocking
/CFIDE,/WEB-INF,/Application.cfcand/jakarta, plus/cf_scriptswhere not needed (5.8, 2.6.14). - Least privilege service account: run ColdFusion under a dedicated low-privilege account (the guide creates
cfuseron Linux), never as root, SYSTEM or a domain account. Code execution through a deserialization flaw runs "in the context of the current user", so this account decides how bad a compromise is. - Sandbox security: where several applications share a server, use sandboxes to restrict file system, tag and function, data source and network access per application (4.27).
- Operating system administrators: whoever can log on to the host can read
password.propertiesandseed.properties. Treat host admin rights as ColdFusion admin rights and manage them through your privileged access process. See the Privileged Access Management Guide.
Integrations, API tokens and service accounts
A ColdFusion server is usually a hub of stored credentials: database logins in data sources, mail server accounts, scheduled tasks that call other systems, and keys embedded in application code. After exploitation, these are what attackers harvest (T1552.001 Credentials In Files).
| Credential | Where it lives | Hardening |
|---|---|---|
| Data source passwords | ColdFusion configuration, encrypted using the Password Seed | Set a random seed (4.25); give database accounts only the rights the application needs and never use sa or root (4.10) |
| Seed and password files | {cf.instance.root}/lib/password.properties, seed.properties, runtime/conf/ | Restrict file permissions to the service account and administrators (5.13) |
| Connector shared secret | Web server connector configuration | Set by the auto-lockdown tool so only the web server can talk to ColdFusion (2.6) |
| Mail server account | Mail settings | Use TLS to the mail server and log all sent mail (4.7) |
| Keys and tokens in CFML code | Application source, Application.cfc | Move to a secrets manager; scan source for secrets |
| Scheduled task credentials | Scheduled task definitions | Inventory, log task execution (4.21), remove unused tasks |
Each of these is a non-human identity with no person attached, which is why they survive staff changes and rebuilds. Record an owner for each, store new secrets outside the server where possible, and plan a full rotation for the day a server is found compromised. See the Secrets Management Guide.
Logging and detection
The lockdown guide's logging settings (4.21) are the starting point: a non-default log directory, at least 10 archived files, "Use operating system logging facilities" so logs reach syslog or the Windows event log, and "Enable logging for scheduled tasks". Forward those logs and the front-end web server logs off the host, because an attacker running as the service account can alter local files.
| Signal | Source | What it suggests | ATT&CK |
|---|---|---|---|
Requests to /CFIDE, AdminAPI or PMT paths from outside the admin network | Web server and WAF logs | Scanning or exploitation of the server plane | T1190 |
New or modified .cfm, .cfc or .jsp files in the webroot | File integrity monitoring | Web shell placed after exploitation | T1505.003 |
| Writes in a webroot the lockdown made read-only | File integrity monitoring, OS audit | Permission change or exploitation as a privileged account | T1505.003 |
| Shell or scripting processes spawned by the ColdFusion Java process | EDR, Sysmon, auditd | Code execution through deserialization | T1190 |
Reads of password.properties, seed.properties or broad directory listings | EDR, OS audit | Credential harvesting and discovery | T1552.001, T1083 |
| Administrator sign-ins, new scheduled tasks, data source changes | ColdFusion logs | Persistence through the Administrator | T1505.003 |
Responding to a suspected compromise
- Contain: remove the server from internet exposure, but keep it running if you need memory evidence.
- Preserve: copy web server logs, ColdFusion logs, the webroot and configuration directories, and a list of running processes and network connections.
- Scope: compare the webroot against a known-good build, check scheduled tasks and data sources for additions, and review outbound connections from the server.
- Rotate: change every data source, mail and integration credential, the Administrator accounts and the password seed, and any key held in application code.
- Rebuild: install a current ColdFusion release and JDK on a clean host, apply the lockdown, then redeploy code from source control rather than copying from the compromised server.
For the forensic steps in detail, see the Web Shell Response Playbook and the Incident Response Guide.
Metrics
- Number of ColdFusion servers in the inventory, and how many run a supported version with the current update and JDK.
- Days from an Adobe priority 1 ColdFusion bulletin to deployment on every server.
- Servers where
/CFIDEanswers from the internet (target zero, tested from outside). - Percentage of servers with the Secure Profile and lockdown applied, and with file integrity monitoring on the webroot.
- Data source accounts with more than the required database rights.
Hardening baseline
Patching rules from Adobe's bulletins
| Bulletin | Key CVEs | Fixed in | Note |
|---|---|---|---|
| APSB23-25 | CVE-2023-26360 (exploited in very limited attacks), CVE-2023-26359 | ColdFusion 2018 Update 16, 2021 Update 6 | Update JDK to current LTS; serial filter on JEE installs |
| APSB23-40 | CVE-2023-29300 (9.8), CVE-2023-29298 (exploited in limited attacks) | 2018 Update 17, 2021 Update 7, 2023 Update 1 | CVE-2023-29300 listed in KEV with known ransomware use |
| APSB24-14 | CVE-2024-20767 (arbitrary file read, public proof of concept) | Further addressed in 2023 Update 12 and 2021 Update 18 | KEV ties it to internet-exposed admin panels |
Two rules apply to every bulletin. Update the JDK or JRE to the release in Adobe's support matrix alongside ColdFusion. And on JEE deployments (ColdFusion running inside Tomcat, WebLogic or WildFly rather than standalone), set the -Djdk.serialFilter JVM flag with the values in the bulletin, in JAVA_OPTS or JAVA_OPTIONS in the application server's start-up file. Adobe says to set it on JEE installations only. Unsupported releases receive no fixes at all (NIST SA-22): plan migration for any server on a ColdFusion version outside Adobe's support.
Configuration settings
- Install profile: Production Profile plus Secure Profile (2.3.3, 4.30).
- Debugging off: keep "Allow Remote Inspection", "Allow Line Debugging" and other debugging options unchecked (4.18 to 4.22).
- Internal Java components: check "Disable access to internal ColdFusion Java components" (4.1).
- Uploads and requests: set "Blocked file extensions for CFFile uploads" to
*or a list of executable extensions, limit post size and parameter count, and set "Timeout Requests After" to 5 seconds or less (4.1). - Non-default script source: change the "Default ScriptSrc Directory" (4.1).
- File system: make
wwwrootread-only exceptWEB-INF/cfclasses,WEB-INF/rest-skeletonsandWEB-INF/cfc-skeletons(5.4). - Remove what you do not use: example data sources and the
bookclubcollection (4.10, 4.12), Event Gateway Services (4.23), and unused packages found withcfpm scan(3.4).
Rollout
- Inventory: find every ColdFusion instance, including test and forgotten servers, with version, update level, JDK and internet exposure.
- Triage exposure: block
/CFIDEand the built-in server port at the perimeter immediately for any exposed server; this needs no application change. - Patch: apply the latest ColdFusion update and JDK in a test environment, run application regression tests, then production.
- Lock down in test: run the auto-lockdown installer against a test instance with a backup taken; Adobe documents that it rolls back on failure and writes logs under
<CF_HOME>/lockdown/<instance>/logs/. - Roll out: apply to production during a change window, then test the application and confirm
/CFIDEis unreachable from outside. - Roll back: use the lockdown uninstall properties (service user, Administrator credentials) or restore the backup if the application breaks.
Framework mapping
| Area | NIST SP 800-53 Rev. 5 | NIST CSF 2.0 | MITRE ATT&CK |
|---|---|---|---|
| Patching, JDK and supported versions | SI-2, RA-5, SA-22 | ID.RA-01, PR.PS-02 | T1190 |
| Administrator exposure and accounts | AC-17, AC-6 | PR.AA-05 | T1190 |
| Lockdown settings and removed features | CM-6, CM-7 | PR.PS-01 | T1505.003 |
| Stored credentials | IA-5 | PR.AA-05 | T1552.001 |
| Session settings | SC-23 | PR.PS-01 | T1190 |
| Inventory and logging | CM-8, AU-9 | DE.CM-09 | T1083, T1005 |
Common misconfigurations
- Administrator reachable from the internet: many ColdFusion flaws need the Administrator or internal components to be reachable. A web server rule blocking
/CFIDEand an IP allow list would have reduced several KEV entries, including the 2013 authentication bypasses and CVE-2024-20767, to internal-only risk. - Patching ColdFusion but not the JDK: Adobe repeats in each bulletin that the update alone does not secure the server.
- Built-in web server left on port 8500: it bypasses the front-end web server rules, so the
/CFIDEblock does nothing there. - Running as a privileged account: a ColdFusion service running as SYSTEM, root or a domain account turns application code execution into host or domain compromise.
- Database accounts with full rights: data sources using
saorrootmean a compromised server can read or destroy every database it connects to. - Patching without hunting: on a server that was exposed and unpatched while a flaw was being exploited, the update closes the door but leaves any web shell in place.
Practitioner checklist
- Inventory every ColdFusion server with version, update, JDK and exposure, and retire or isolate unsupported ones.
- Block
/CFIDE,/WEB-INF,/jakartaand unused PMT paths at the web server, and restrict internal components by IP. - Apply the latest ColdFusion update and matching JDK; set the serial filter on JEE installs.
- Run the auto-lockdown tool with the Secure Profile in test, then production.
- Switch to named Administrator accounts and disable concurrent admin sessions.
- Disable RDS, debugging, unused servlets, example data sources and Event Gateway Services.
- Run ColdFusion under a dedicated low-privilege account with a read-only webroot.
- Set a random password seed, least-privilege database accounts, and record an owner for every stored credential.
- Enable OS logging and scheduled task logging, forward logs, and monitor the webroot for new files.
- Hunt for web shells on any server that was exposed and behind on updates.
Standards and references
- Adobe: ColdFusion 2021 Lockdown Guide
- Adobe: ColdFusion Server Auto-Lockdown
- Adobe: Security Bulletin APSB23-40 for ColdFusion
- Adobe: Security Bulletin APSB24-14 for ColdFusion
- Adobe: Security Bulletin APSB23-25 for ColdFusion
- CISA: Known Exploited Vulnerabilities Catalog
- MITRE ATT&CK: Web Shell
- NIST: SP 800-53 Rev. 5
Related NHI Mgmt Group resources: Web Shell Response Playbook · Emergency Out-of-Band Patching Playbook · Secrets Management Guide · Web Application Firewall Guide