TI-2026-095G โ€” The Siege: The xmlrpc POST Assault That Follows the Roll Call

Classification: HIGH ยท Forensic threat intelligence ยท Web-threats vector ยท Series: Below the Noise Floor

The previous letter caught a fleet taking a roll call of a website โ€” reading its user register with GET requests and locating xmlrpc.php, the battering ram. This letter catches what happened next. The same hands came back, and this time they did not read; they POSTed. For weeks, across every place a WordPress install might hide, from Russian and offshore hosting and a tight little cluster of consecutive IPs, they hammered xmlrpc.php with the one HTTP verb that turns that endpoint into a weapon. Two of the addresses are the very same ones that ran the roll call. This is the siege after the reconnaissance โ€” and, rarely, we can prove they are one campaign.

1. GET Reads, POST Attacks

The whole distinction between this dossier and the last one lives in a single HTTP verb.

In TI-2026-095F the fleet sent GET requests: /?rest_route=/wp/v2/users/3, /wp-json/wp/v2/users?per_page=100, and โ€” as discovery โ€” GET /xmlrpc.php to find out whether the endpoint existed. GET reads. It asks a question and takes an answer. That was reconnaissance.

Here the fleet sends POST to xmlrpc.php. POST writes. And a POST body to xmlrpc.php is not a question โ€” it is a payload. The XML-RPC protocol's system.multicall method lets an attacker pack hundreds of password guesses into a single request, collapsing a slow one-guess-per-request brute-force into a fast, amplified one; the same interface's pingback.ping enables reflected denial-of-service. A POST to xmlrpc.php is the attack the GET discovery was scouting for.

So when the web-threats engine records these nodes POSTing to xmlrpc.php โ€” tagged, by its exploit dictionary, to the old XML-RPC RCE CVEs CVE-2005-1921 (42 IPs) and CVE-2007-1893 (63 IPs, 25,228 hits) โ€” it is not seeing more enumeration. It is seeing weaponization. The roll call located the gate; the siege is battering it.

2. Every Place WordPress Might Hide

A single node's behaviour shows the method. Representative attacker 5.101.157.130 (AS198610, BeGet LLC, Russia) sent 72 POST requests, and it did not POST to one path โ€” it POSTed to xmlrpc.php under an exhaustive set of install locations:

/xmlrpc.php        /wp/xmlrpc.php       /wordpress/xmlrpc.php   /blog/xmlrpc.php
/wpsite/xmlrpc.php /wp-site/xmlrpc.php  /cms/xmlrpc.php         /news/xmlrpc.php
/site/xmlrpc.php   /web/xmlrpc.php      /main/xmlrpc.php        /old/xmlrpc.php   /new/xmlrpc.php

โ€” plus /wp-login.php and /wp-admin/, against library, mailserver, guacamole, shuffle-on.com and www. That path list is not random; it is a checklist of the sub-directories people install WordPress into โ€” /blog, /cms, /wp, /old (the previous site), /new (the migration in progress). The operator does not know where the target's WordPress lives, so it tries every plausible mount and POSTs its payload at each. Wherever an xmlrpc.php answers, the amplified brute-force begins.

The engine already recognises the coordination: it clusters 5.101.157.130 as a member of a "Shared-Exploit Cluster (8 IPs)" โ€” a group of addresses running the same exploit path-set against the same estate.

3. The Infrastructure โ€” Coordinated, Persistent, Offshore

Two things about the fleet mark it as a deliberate, sustained operation rather than a disposable burst.

It persists. Where the roll call of 095F was a one-day swarm, these xmlrpc POSTs recur across weeks โ€” first-seen in early June, last-seen in mid-to-late July 2026. The same addresses come back, day after day, POSTing at the same hosts. That is a campaign with a duration, not a drive-by.

It clusters. The CVE-2007-1893 roster contains a giveaway: 62.164.177.222, 62.164.177.223, and 62.164.177.224 โ€” three consecutive addresses in one /24, all POSTing xmlrpc.php at mailserver and portainer over the same weeks. Adjacent rented IPs acting in concert are the fingerprint of a single operator who provisioned a small block and pointed it at one target set. Around that cluster sit a Russian anchor (BeGet), a spread of commodity and offshore hosting, and a couple of mainstream-cloud nodes โ€” the same offshore-weighted, abuse-resistant hosting posture the roll-call fleet chose, and for the same reason: a weeks-long POST campaign needs hosting that will not answer an abuse complaint.

Every node wears an ordinary desktop-browser user-agent, the same unremarkable disguise as 095F. Nothing here announces itself as an attack tool. It looks like browsers, POSTing to a file.

4. The Proof: One Hand, Two Phases

This is the finding that lifts the dossier from "another xmlrpc campaign" to something the honeypot rarely gets to show: the reconnaissance and the attack are provably the same operator.

Two source IPs appear in both campaigns. 146.19.78.227 and 157.22.126.251 are in the TI-2026-095F WordPress user-enumeration recon (CVE-2017-5487) and in this xmlrpc POST assault (CVE-2005-1921). Several more (5.101.157.130, 90.156.142.60, 62.164.177.224, 159.89.172.177) appear in both xmlrpc CVEs at once. The overlap is not a coincidence of a busy IP; it is a documented link that fuses two separate observations into one campaign with a temporal order:

  1. The roll call (095F, one day, GET) โ€” read the user register, find the admin, locate xmlrpc.php.
  2. The siege (095G, weeks, POST) โ€” return and POST at xmlrpc.php across every mount, amplifying the brute-force the recon set up.

Most threat telemetry sees enumeration and attack as two unrelated noise events and dismisses both. Here the shared addresses let us watch the transition โ€” the exact moment a fleet stops reading and starts writing โ€” and attribute both phases to one hand. The roll call was never idle curiosity. It was the first move of this.

5. What It Hit

Nothing. library, mailserver, portainer, and guacamole run no WordPress and expose no xmlrpc.php; every POST returned 404. No password was guessed, no request amplified, no pingback reflected. These are attempts.

But the value was never a body count. It is the chain โ€” proven, by shared IPs, from recon to weaponization โ€” the mount-point map of where the operator expects WordPress to hide, and the coordination and persistence signatures (the /24 cluster, the weeks-long recurrence, the Shared-Exploit-Cluster tag). It is the closing act of the story the previous letter opened: the roll call was answered, and the answer was a siege.

6. The Counter-Narrative

Steelman: "xmlrpc.php POSTs are the most common WordPress attack on the internet โ€” everybody sees them, from everywhere, all the time. It's 404s against hosts that aren't even WordPress. This is background noise with a story stapled on."

Each clause holds a little, and the finding survives:

What is not claimed: attribution to a named operator (diverse/offshore origin, browser UAs, a /24 recorded as a coordinated cluster rather than resolved to a named owner โ€” an honest gap); that any credential was compromised (all 404); or that the two campaigns are the operator's only activity (they are the two phases observed against this estate).

Confidence: HIGH that a coordinated, weeks-long, offshore-weighted fleet POSTed xmlrpc.php across the LSN estate in Juneโ€“July 2026, and that shared source IPs link it to the 095F user-enumeration recon as one operator's sequential phases; MEDIUM on named-operator identity and on the /24's ownership.

7. Defence Response

8. A Note on Method

Built entirely through the web-threats MCP layer, with no direct database access โ€” the per-CVE actors endpoint (wt_cve_actors / GET /api/web-threats/cves/{cve}) for both xmlrpc CVE rosters and the cross-campaign IP overlap, and dossier_web_threats_intel for the per-node POST behaviour, mount-point set, ASN and Shared-Exploit-Cluster context. The reconโ†’attack link was recovered by intersecting the actor rosters of CVE-2017-5487 (095F) and CVE-2005-1921/CVE-2007-1893 (this letter) โ€” a cross-CVE correlation the per-CVE MCP endpoint makes routine.

9. Investigation Metadata

FieldValue
Dossier IDTI-2026-095G
SeriesBelow the Noise Floor (part 7)
Correlated CVEsCVE-2005-1921 (XML-RPC xmlrpc.php RCE, 42 IPs) + CVE-2007-1893 (63 IPs, 25,228 hits) โ€” POST-based xmlrpc abuse
BehaviourPOST to xmlrpc.php across an exhaustive mount-point set (/blog/, /cms/, /wp/, /old/, /new/โ€ฆ xmlrpc.php); amplified system.multicall brute-force / pingback
InfrastructureBeGet (RU, AS198610) anchor + a 62.164.177.222/223/224 /24 cluster + offshore/commodity spread; "Shared-Exploit Cluster (8 IPs)"; weeks-long (Junโ†’Jul 2026)
The link146.19.78.227, 157.22.126.251 appear in BOTH this assault and the 095F recon โ€” same operators, recon โ†’ attack
Targetslibrary, mailserver, portainer, guacamole, shuffle-on.com, www
ImpactAttempts only โ€” no WordPress/xmlrpc on the targets (404)
MethodBuilt entirely via the web-threats MCP layer (wt_cve_actors cross-CVE overlap + dossier_web_threats_intel) โ€” no direct SQL
Cross-referenceTI-2026-095F (the roll-call recon this weaponizes), TI-2026-095C (the RCE weaponizers)
ConfidenceHIGH (campaign, coordination, reconโ†’attack link); MEDIUM (named operator, /24 ownership)

Cristian Liศ™neanu ยท shuffle-on.com ยท Threat Intelligence

โš  Personal capacity. Research published independently โ€” not reflecting employer views. Derived from passive observation of attacks against personal infrastructure. Full disclaimer โ†’
โ† Previous Below the Noise Floor โ€” 7 / 8 Next โ†’