BranchHop ClickFix kit
BranchHop is a WordPress injection that loads a ClickFix bootstrap from a rotating pool of controllers. We have matched it on 1,876 sites since 31 August.
BranchHop in numbers
Since 31 August, the first BranchHop match in our records, counted on 12 November 2026. How we count.
| Sites with BranchHop code | 1,876 |
|---|---|
| Sites with a match in the last 30 days | 1,460 |
| New sites in October | 918 |
| Still serving it when recaptured at least 25 days later | 635 of 758 sites (84%) |
| Sites running WordPress (captured since 25 September) | 95% |
Two fake WordPress scripts
BranchHop gets into a site through WordPress's own script loader, so its tags look like ones a plugin would print. One version registers a script with the handle custom-inject. WordPress prints it as custom-inject-js, pointing at another domain's root path made of six letters and digits, with ?ver=1.0. We found these tags between 31 August and 5 October. The controller domains and paths change; the handle, the version and the shape of the path stay the same. On a few sites the injector misfires and prints its own PHP source on the page.
The other version adds a deferred script with the handle wp-core-js, loading an external path with a ?ts= timestamp. WordPress core has no script by that name. On almost every page that carries it, the same injection also writes a tag with the id ic-tracker-js, the tag Sekoia describes in its "IClickFix" reporting.
Both tags load the BranchHop bootstrap from their external addresses.
A pool of controllers
Most BranchHop sites use a third form: an inline script that decodes a list of URLs into window.us, takes the first one, adds a timestamp and loads it. If that request fails, it moves to the next address in the list. Taking down one controller only moves the site to the next. A build seen on 2 November 2026 drops the encoding: a script just before </head> holds the URLs in plain text, each a short path token on a controller domain, and adds a timestamp to the one it loads. We found it on 18 sites hosted on the same server.
On some sites the tags were pasted into a page builder's HTML block with their PHP still in them: ?ts=<?= time(); ?>. The PHP never runs, so every visit requests the same literal text as the timestamp, and the script still loads. We matched this on 8 sites from 8 October to 6 November 2026.
A build we captured on 11 November 2026 sits at the end of a WordPress theme's own select2.min.js. It fetches a path on the controller that serves the wp-core-js tag, reads the reply as text and loads that text as the next script's address. If that script has not loaded within 25 seconds, it removes the tag.
What comes back masks the page and loads two more stages: a fingerprint request ending in ?fp=1 and a stage carrying data about the host. The stage files have short names such as bghh.js, ggg.js and mix51.js.
What we see
| Month | New sites |
|---|---|
| September | 645 |
| October | 918 |
| November so far | 311 |
Of the 758 sites recaptured at least 25 days after their first match, 635 were still serving BranchHop (84%). 95% of BranchHop sites captured since 25 September run WordPress.
BranchHop shares sites with other kits, including LenAI, BW panel and DriveSurge.
Checking a site
View the page source and look for:
- a script with the id
custom-inject-jsloading another domain with?ver=1.0 - a script with the id
wp-core-js-js, or a tag with the idic-tracker-js, that you did not add - an inline script that builds a list called
window.us - script tags ending in
?ts=<?= time(); ?>, often in an Elementor or other page builder HTML block - code after the end of a theme or plugin script that fetches another domain and loads the reply as a script address
Caching plugins rewrite script tags, so also search for the same names in data-src, data-rocket-src and similar attributes.
Hosts its commands download from
BranchHop lure commands we captured download from 9 hosts.
| Host | Sites | Last seen | Latest command |
|---|---|---|---|
vericheckusgo[.]com | 6 | CommandURL First seen 6 November 2026, 1 URL on this host. | |
nonprofitrole[.]com | 4 | CommandURL First seen 29 September 2026, 4 URLs on this host. | |
seccheckusr[.]com | 4 | CommandURL First seen 27 October 2026, 1 URL on this host. | |
preconnecto[.]com | 3 | CommandURL First seen 6 October 2026, 1 URL on this host. | |
freeviewstats[.]com | 2 | CommandURL First seen 7 October 2026, 1 URL on this host. | |
degpoints[.]com | 1 | CommandURL First seen 10 October 2026, 1 URL on this host. | |
goocloudcapf[.]com | 1 | CommandURL First seen 7 October 2026, 1 URL on this host. | |
linen10[.]com | 1 | CommandURL First seen 29 September 2026, 1 URL on this host. | |
vinderforent[.]zone | 1 | CommandURL First seen 11 November 2026, 1 URL on this host. |
The ClickFix command tracker lists every host.