Heads up in case you see the same thing in your logs. One morning my Lucee site (on Linux) had about a hundred new missinginclude errors, all overnight, all from one IP, each for a random template name:
/assets/nxzqlls4r.cfm?cmd=ZWNobyBDT0xELVNIRUxMLTNqdnVyNGF1Z2Q%3D
Error Type missinginclude
User Agent ... Chrome/126.0 ...
The cmd value is base64 for echo COLD-SHELL-3jvur4augd. The bot isn’t trying to break in; it’s knocking where web shells are usually left and checking whether one answers with its marker. A missinginclude on every request means nothing ran, which is what you want to see.
Quick checks I ran to make sure the server was clean:
# any template that can run programs? (most apps have none)
grep -rlE --include=*.cfm --include=*.cfc "cfexecute|getRuntime\(\)|ProcessBuilder" /path/to/your/site
# recently changed templates outside your own folders
find /path/to/your/site \( -name "*.cfm" -o -name "*.cfc" \) -mtime -14
Then I blocked the address in the firewall (iptables + netfilter-persistent save), since a ban inside the application never sees these requests: the template doesn’t exist.
I wrote up the details, including the Windows/PowerShell versions of the checks, here: A Bot Was Looking for a Back Door on My ColdFusion Server
A question for the people running Lucee behind Apache or Nginx: do you stop requests for .cfm files that don’t exist at the web server, before they reach Lucee? If so, how? I’d be curious what’s worked for you.