At 3 AM, a single IP requested a login web page. Innocent. However then, throughout a number of hosts and paths, the identical supply started appending ?debug=true — the signal of an attacker probing the atmosphere to evaluate the expertise stack and plan a breach.
Minor misconfigurations, missed firewall occasions, or request anomalies really feel innocent on their very own. However when these small indicators converge, they will explode into safety incidents often called “toxic combinations.” These are exploits the place an attacker discovers and compounds many minor points — equivalent to a debug flag left on an internet utility or an unauthenticated utility path — to breach techniques or exfiltrate information.
Cloudflare’s community observes requests to your stack, and because of this, has the info to determine these poisonous mixtures as they kind. On this submit, we’ll present you the way we floor these indicators from our utility safety information. We’ll go over the most typical forms of poisonous mixtures and the harmful vulnerabilities they current. We may even present particulars on how you should utilize this intelligence to determine and tackle weaknesses in your stack.
How we outline poisonous mixtures
You possibly can outline a “toxic combination” in a couple of other ways, however here’s a sensible one based mostly on how we take a look at our personal datasets. Most internet assaults ultimately scale via automation; as soon as an attacker finds a viable exploit, they’re going to often script it right into a bot to complete the job. By wanting on the intersection of bot site visitors, particular utility paths, request anomalies and misconfigurations, we will spot a possible breach. We use this framework to purpose via thousands and thousands of requests per second.
Whereas level defenses like Net Utility Firewalls (WAF), bot detection, and API safety have developed to include behavioral patterns and fame indicators, they nonetheless primarily give attention to evaluating the chance of a person request. In distinction, Cloudflare’s detections for “toxic combinations” shift the lens towards the broader intent, analyzing the confluence of context surrounding a number of indicators to determine a brewing incident.
Poisonous mixtures as contextualized detections
That shift in perspective issues as a result of many actual incidents haven’t any apparent exploit payload, no clear signatures, and no single occasion that screams “attack.” So, in what follows, we mix the next context to assemble a number of poisonous mixtures:
Bot indicators
Utility paths, particularly sensitivity ones: admin, debug, metrics, search, cost flows
Anomalies together with: sudden http codes, geo jumps, identification mismatch, excessive ID churn, rate-limit evasion (distributed IPs doing the identical factor), request or success fee spikes
Vulnerabilities or misconfigurations: lacking session cookies or auth headers, predictable identifiers
Examples of poisonous mixtures on in style utility stacks
We checked out a 24-hour window of Cloudflare information to see how typically these patterns really seem in in style utility stacks. As proven within the desk under, about 11% of the hosts we analyzed have been vulnerable to those mixtures, skewed by weak WordPress web sites. Excluding WordPress websites, solely 0.25% of hosts present indicators of exploitable poisonous mixtures. Whereas uncommon, they characterize hosts which are weak to compromise.
To make sense of the info, we broke it down into three levels of an assault:
Estimated hosts probed: That is the “wide net.” It counts distinctive hosts the place we noticed HTTP requests concentrating on particular delicate paths (like
/wp-admin).Estimated hosts filtered by poisonous mixture: Right here, we narrowed the checklist all the way down to the precise hosts that truly met our standards for a poisonous mixture.
Estimated reachable hosts: Distinctive hosts that responded efficiently to an exploit try—the “smoking gun” of an assault. A easy
200 OKresponse (equivalent to one triggered by appending?debug=true) could possibly be a false constructive. We validated paths to filter out noise attributable to authenticated paths that require credentials regardless of the 200 standing code, redirects that masks the true exploit path, and origin misconfigurations that serve success codes for unreachable paths.
Within the subsequent sections, we’ll dig into the precise findings and the logic behind the mixtures that drove them. The detection queries offered are obligatory however not ample with out testing for reachability; it’s potential that the findings is perhaps false positives. In some circumstances, Cloudflare Log Explorer permits these queries to be executed on unsampled Cloudflare logs.
Desk 1. Abstract of Poisonous Combos
Probing of delicate administrative endpoints throughout a number of utility hosts
We noticed automated instruments scanning frequent administrative login pages — like WordPress admin panels (/wp-admin), database managers, and server dashboards. A templatized model of the question, executable in Cloudflare Log Explorer, is under:
SELECT
clientRequestHTTPHost,
COUNT(*) AS request_count
FROM
http_requests
WHERE
timestamp >= '{{START_DATE}}'
AND timestamp <= '{{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+)?$') // remark this line for Cloudflare Log Explorer
AND botScore < {{BOT_THRESHOLD}} // we used botScore < 30
GROUP BY
clientRequestHTTPHost
ORDER BY
request_count DESC;Publicly accessible admin panels can allow brute power assaults. If profitable, an attacker can additional compromise the host by including it to a botnet that probes extra web sites for related vulnerability. As well as, this poisonous mixture can result in:
Exploit scanning: Attackers determine the precise software program model you are working (like Tomcat or WordPress) and launch focused exploits for identified vulnerabilities (CVEs).
Person enumeration: Many admin panels by chance reveal legitimate usernames, which helps attackers craft extra convincing phishing or login assaults.
What proof helps it?
Poisonous mixture of bots automation and uncovered administration interfaces like: /wp-admin/, /admin/, /administrator/, /actuator/*, /_search/, /phpmyadmin/, /supervisor/html/, and /app/kibana/.
Ingredient | Sign | Description |
Bot exercise | Bot Rating < 30 | Bot signatures typical of vulnerability scanners |
Anomaly | Repeated Probing | Uncommon hits on admin endpoints |
Vulnerability | Publicly accessible endpoint | Profitable requests to admin endpoints |
How do I mitigate this discovering?
Implement Zero Belief Entry.
If for any purpose the endpoint has to stay public, implement a problem platform so as to add friction to bots.
Implement IP allowlist: Use your WAF or server configuration to make sure that administrative paths are solely reachable out of your company VPN or particular workplace IP addresses.
Cloak admin paths: In case your platform permits it, rename default admin URLs (e.g., change
/wp-adminto a singular, non-guessable string).Deploy geo-blocking: In case your directors solely function from particular nations, block all site visitors to those delicate paths coming from exterior these areas.
Implement multi-factor authentication (MFA): Guarantee each administrative entry level requires a second issue; a password alone just isn’t sufficient to cease a devoted crawler.
Unauthenticated public API endpoints permitting mass information publicity by way of predictable identifiers
We discovered API endpoints which are accessible to anybody on the Web with out a password or login (see OWASP: API2:2023 – Damaged Authentication). Even worse, the best way it identifies data (utilizing easy, predictable ID numbers,see OWASP: API1:2023- Damaged Object Degree Authorization) permits anybody to easily “count” via your database — making it a lot easier for attackers to enumerate and “scrape” your small business data, with out even visiting your web site instantly.
SELECT
uniqExact(clientRequestHTTPHost) AS unique_host_count
FROM http_requests
WHERE timestamp >= '2026-02-13'
AND timestamp <= '2026-02-14'
AND edgeResponseStatus = 200
AND bmScore < 30
AND (
match(extract(clientRequestQuery, '(?i)(?:^|[&?])uid=([^&]+)'), '^[0-9]{3,10}$')
OR match(extract(clientRequestQuery, '(?i)(?:^|[&?])consumer=([^&]+)'), '^[0-9]{3,10}$')
OR size(extract(clientRequestQuery, '(?i)(?:^|[&?])uid=([^&]+)')) BETWEEN 3 AND 8
OR size(extract(clientRequestQuery, '(?i)(?:^|[&?])consumer=([^&]+)')) BETWEEN 3 AND 8
)It is a “zero-exploit” vulnerability, that means an attacker would not should be a hacker to steal your information; they simply want to alter a quantity in an internet hyperlink. This results in:
Mass Knowledge Publicity: Massive-scale scraping of your complete buyer dataset.
Secondary Assaults: Stolen information is used for focused phishing or account takeovers.
Regulatory Danger: Extreme privateness violations (GDPR/CCPA) as a consequence of exposing delicate PII.
Fraud: Rivals or malicious actors gaining perception into your small business quantity and buyer base.
What proof helps it?
Poisonous mixture of lacking safety controls and automation concentrating on specific API endpoints.
Ingredient | Sign | Description |
Bot exercise | Bot Rating < 30 | Excessive quantity of requests from a single shopper fingerprint iterating via completely different IDs. |
Anomaly | Excessive Cardinality of tid | A single customer accessing a whole lot or hundreds of distinctive useful resource IDs in a brief window. |
Anomaly | Secure Response Dimension | Constant JSON constructions and file sizes, indicating profitable information retrieval for every guessed ID. |
Vulnerability | Lacking Auth Indicators | Requests lack session cookies, Bearer tokens, or Authorization headers completely. |
Misconfiguration | Predictable Identifiers | The |
Whereas the question checked for bot rating and predictable identifiers, indicators like excessive cardinality, steady response sizes and lacking authentication have been examined on a pattern of site visitors matching the question.
How do I mitigate this discovering?
Implement authentication: Instantly require a legitimate session or API key for the affected endpoint. Don’t enable “Anonymous” entry to information containing PII or enterprise secrets and techniques.
Implement authorization (IDOR examine): Make sure the backend checks that the authenticated consumer really has permission to view the precise
tidthey’re requesting.Use UUIDs: Substitute predictable, sequential integer IDs with lengthy, random strings (UUIDs) to make “guessing” identifiers computationally unimaginable.
Deploy API Defend: Allow Cloudflare API Defend with options like Schema Validation (to dam sudden inputs) and BOLA Detection.
Debug parameter probing revealing system particulars
We discovered proof of debug=true appended to internet paths to disclose system particulars. A templatized model of the question, executable in Cloudflare Log Explorer, is under:
SELECT
clientRequestHTTPHost,
COUNT(rayId) AS request_count
FROM
http_requests
WHERE
timestamp >= '{{START_TIMESTAMP}}'
AND timestamp < '{{END_TIMESTAMP}}'
AND edgeResponseStatus = 200
AND clientRequestQuery LIKE '%debug=false%'
AND botScore < {{BOT_THRESHOLD}}
GROUP BY
clientRequestHTTPHost
ORDER BY
request_count DESC;Whereas this does not steal information immediately, it supplies an attacker with a high-definition map of your inside infrastructure. This “reconnaissance” makes their subsequent assault more likely to succeed as a result of they will see:
Hidden information fields: Delicate inside data that is not presupposed to be seen to customers.
Expertise stack particulars: Particular software program variations and server varieties, permitting them to search for identified vulnerabilities for these precise variations.
Logic hints: Error messages or stack traces that specify precisely how your code works, serving to them discover methods to interrupt it.
What proof helps it?
Poisonous mixture of automated probing and misconfigured diagnostic flags concentrating on the A number of Hosts and Utility Paths.
Ingredient | Sign | Description |
Bot exercise | Bot Rating < 30 | Vulnerability scanner exercise |
Anomaly | Response Dimension Improve | Vital jumps in information quantity when a debug flag is toggled, indicating particulars or stack traces are being leaked. Add these extra circumstances, if wanted:
|
Anomaly | Repeated Path Probing | Fast-fire requests throughout various endpoints (e.g., /api, /login, /search) particularly testing for a similar diagnostic triggers. Add these circumstances, if wanted:
|
Misconfiguration | Debug Parameter Allowed | The presence of lively “debug,” “test,” or “dev” flags in manufacturing URLs that change utility habits. |
Vulnerability | Schema disclosure | The looks of internal-only JSON fields or “Firebase-style” .json dumps that reveal the underlying construction. |
Whereas the question checked for bot rating and paths with debug parameters, indicators like repeated probing, response sizes and schema disclosure have been examined on a pattern of site visitors matching the question.
How do I mitigate this discovering?
Disable debugging in manufacturing: Be sure that all “debug” or “development” atmosphere variables are strictly set to
falsein your manufacturing deployment configurations.Filter parameters on the edge: Use your WAF or API Gateway to strip out identified debug parameters (like
?debug=,?check=,?hint=) earlier than they ever attain your utility servers.Sanitize error responses: Configure your internet servers (Nginx, Apache, and so forth.) to indicate generic error pages as an alternative of detailed stack traces or inside system messages.
Audit firebase/DB guidelines: If you’re utilizing Firebase or related NoSQL databases, make sure that /
.jsonpath entry is restricted by way of strict safety guidelines, so public customers can not dump your complete schema or information.
Publicly uncovered monitoring endpoints offering inside infrastructure visibility
We found “health check” and monitoring dashboards are seen to your complete Web. Particularly, paths like /actuator/metrics are responding to anybody who asks. A templatized model of the question, executable in Cloudflare Log Explorer, is under::
SELECT
clientRequestHTTPHost,
rely() AS request_count
FROM http_requests
WHERE timestamp >= toDateTime('{{START_DATE}}')
AND timestamp < toDateTime('{{END_DATE}}')
AND botScore < 30
AND edgeResponseStatus = 200
AND clientRequestPath LIKE '%/actuator/metrics%' // an instance
GROUP BY
clientRequestHTTPHost
ORDER BY request_count DESCWhy is that this severe?
Whereas these endpoints do not often leak buyer passwords instantly, they supply the “blueprints” for a classy assault. Publicity results in:
Strategic timing: Attackers can monitor your CPU and reminiscence utilization in real-time to launch a Denial of Service (DoS) assault precisely when your techniques are already pressured.
Infrastructure mapping: These logs typically reveal the names of inside companies, dependencies, and model numbers, serving to attackers discover identified vulnerabilities to take advantage of.
Exploitation chaining: Details about thread counts and atmosphere hints can be utilized to bypass safety layers or escalate privileges inside your community.
What proof helps it?
Poisonous mixture of misconfigured entry controls and automatic reconnaissance concentrating on the Asset/Path: /actuator/metrics, /actuator/prometheus, and /well being.
Ingredient | Sign | Description |
Bot exercise | Bot Rating < 30 | Automated scanning instruments are systematically checking for particular paths |
Anomaly | Monitoring Fingerprint | The response physique matches identified codecs (Prometheus, Micrometer, or Spring Boot), confirming the system is leaking reside information. |
Anomaly | HTTP 200 Standing | Profitable information retrieval from endpoints that ought to ideally return a 403 Forbidden or 404 Not Discovered to the general public. |
Misconfiguration | Public Monitoring Path | Public accessibility of internal-only endpoints like |
Vulnerability | Lacking Auth | These endpoints are reachable with out a session token, API key, or IP-based restriction. |
How do I mitigate this discovering?
Prohibit entry by way of WAF: Instantly create a firewall rule to dam any exterior site visitors requesting paths containing
/actuator/or/prometheus.Bind to localhost: Reconfigure your utility frameworks to solely serve these monitoring endpoints on
localhost(127.0.0.1) or a personal administration community.Implement primary auth: If these should be accessed over the net, guarantee they’re protected by robust authentication (at a minimal, advanced Fundamental Auth or mTLS).
Disable pointless endpoints: In Spring Boot or related frameworks, disable any “Actuator” options that aren’t strictly required for manufacturing monitoring.
Unauthenticated search endpoints permitting direct index dumping
Search endpoints (like Elasticsearch or OpenSearch) which are often meant for inside use are large open to the general public. The templatized question is:
SELECT
clientRequestHTTPHost,
rely() AS request_count
FROM http_requests
WHERE timestamp >= toDateTime('{{START_DATE}}')
AND timestamp < toDateTime('{{END_DATE}}')
AND botScore < 30
AND edgeResponseStatus = 200
AND clientRequestPath like '%/_search%'
AND NOT match(extract(clientRequestHTTPHost, '^[^:/]+'), '^d{1,3}(.d{1,3}){3}(:d+)?$')
GROUP BY
clientRequestHTTPHostIt is a vital vulnerability as a result of it requires zero technical talent to take advantage of, but the injury is in depth:
Mass information theft: Attackers can “dump” complete indices, stealing thousands and thousands of data in minutes.
Inside reconnaissance: By viewing your “indices” (the checklist of what you retailer), attackers can determine different high-value targets inside your community.
Knowledge sabotage: Relying on the setup, an attacker won’t simply learn information — they might probably modify or delete your complete search index, inflicting an enormous service outage.
What proof helps it?
We’re seeing a poisonous mixture of misconfigured publicity and automatic site visitors and information enumeration concentrating on /_search, /_cat/indices, and /_cluster/well being.
Ingredient | Sign | Description |
Bot exercise | Bot Rating < 30 | Excessive-velocity automation signatures making an attempt to paginate via giant datasets and “scrape” your complete index. |
Anomaly | Surprising Response Dimension | Massive JSON response sizes in step with bulk information retrieval fairly than easy standing checks. |
Anomaly | Repeated Question Patterns | Systematic “enumeration” habits the place the attacker is biking via each potential index title to seek out delicate information. |
Vulnerability | /_search or /_cat/ Patterns | Direct publicity of administrative and query-level paths that ought to by no means be reachable by way of a public URL. |
Misconfiguration | HTTP 200 Standing | The endpoint is actively fulfilling requests from unauthorized exterior IPs as an alternative of rejecting them on the community or utility stage. |
Whereas the question checked for bot rating and paths, indicators like repeated question patterns, response sizes, and schema disclosure have been examined on a pattern of site visitors matching the question.
How do I mitigate this discovering?
Prohibit community entry: Instantly replace your Firewall/Safety Teams to make sure that search ports (e.g., 9200, 9300) and paths are solely accessible from particular inside IP addresses.
Allow authentication: Activate “Security” options in your search cluster (like Defend or Search Guard) to require legitimate credentials for each API name.
WAF blocking: Deploy a WAF rule to instantly block any request containing
/_search,/_cat, or/_clustercoming from the general public Web.Audit for information loss: Evaluation your database logs for giant “Scroll” or “Search” queries from unknown IPs to find out precisely how a lot information was exfiltrated.
Profitable SQL injection try on utility paths
We’ve recognized attackers who despatched a malicious request—particularly a SQL injection designed to trick databases. A templatized model of the question, executable in Cloudflare Log Explorer, is under:
SELECT
clientRequestHTTPHost,
rely() AS request_count
FROM http_requests
WHERE timestamp >= toDateTime('{{START_DATE}}')
AND timestamp < toDateTime('{{END_DATE}}')
AND botScore < 30
AND wafmlScore<30
AND edgeResponseStatus = 200
AND LOWER(clientRequestQuery) LIKE '%sleep(%'
GROUP BY
clientRequestHTTPHost
ORDER BY request_count DESCThat is the “quiet path” to a knowledge breach. As a result of the system returned a profitable standing code (HTTP 200), these assaults typically mix in with respectable site visitors. If left unaddressed, an attacker can:
Refine their strategies: Use trial and error to seek out the precise payload that bypasses your filters.
Exfiltrate information: Slowly drain database contents or leak delicate secrets and techniques (like API keys) handed in URLs.
Keep invisible: Most automated alerts search for “denied” makes an attempt; a “successful” exploit is way more durable to identify in a sea of logs.
What proof helps it?
We’re seeing a poisonous mixture of automated bot indicators, anomalies and application-layer vulnerabilities concentrating on many utility paths.
Ingredient | Sign | Description |
Bot | Bot Rating < 30 | Excessive likelihood of automated site visitors; signatures and timing in step with exploit scripts. |
Anomaly | HTTP 200 on delicate path | Profitable responses getting back from a login endpoint that ought to have triggered a WAF block. |
Anomaly | Repeated Mutations | Excessive-frequency variations of the identical request, indicating an attacker “tuning” their payload. |
Vulnerability | Suspicious Question Patterns | Use of |
How do I mitigate this discovering?
Instant digital patching: Replace your WAF guidelines to particularly block the SQL patterns recognized (e.g., time-based probes).
Sanitize inputs: Evaluation the backend code for this path to make sure it makes use of ready statements or parameterized queries.
Remediate secret leakage: Transfer any delicate information from URL parameters to the request physique or headers. Rotate any keys flagged as leaked.
Audit logs: Test database logs for the timeframe of the “HTTP 200” responses to see if any information was efficiently extracted.
Examples of poisonous mixtures on cost flows
Card testing and card draining are a few of the commonest fraud ways. An attacker would possibly purchase a big batch of bank cards from the darkish internet. Then, to confirm what number of playing cards are nonetheless legitimate, they could check the cardboard on an internet site by making small transactions. As soon as validated, they could use such playing cards to make purchases, equivalent to present playing cards, on in style buying locations.
Suspected card testing on cost flows
On cost flows (/cost, /checkout, /cart), we discovered sure hours of the day when both the hourly request quantity from bots or hourly cost success ratio spiked by greater than 3 customary deviations from their hourly baselines over the prior 30 days. This could possibly be associated to card testing the place an attacker is attempting to validate numerous stolen credit. After all, advertising campaigns would possibly trigger request spikes whereas cost outages would possibly trigger sudden drops in success ratios.
Fee success ratio drops coinciding with request spikes, within the absence of promoting campaigns or cost outages or different components, might imply bots are in the midst of an enormous card-testing run.
What proof helps it?
We used a mix of bot indicators and anomalies on /cost, /checkout, /cart:
Ingredient | Sign | Description |
Bot | Bot Rating < 30 | Excessive likelihood of automated site visitors fairly than people making errors |
Anomaly | Quantity Z-Rating > 3.0, calculated from request quantity baseline for a given hour based mostly on the previous 30 days and evaluated every hour. This components day by day seasonality as properly. | Scaling Occasion: The attacker is testing a batch of playing cards |
Anomaly | Success ratio Z > 3.0, calculated from success ratio baseline for a given hour based mostly on the previous 30 days and evaluated every hour. This components day by day seasonality as properly. | Sudden drops in success ratio might imply playing cards being declined as they’re reported misplaced or stolen |
Use the 30-day cost paths hourly request quantity baseline because the hourly fee restrict for all requests with bot scores < 30 on cost paths.
Suspected card draining on cost flows
On cost flows (/cost, /checkout, /cart), we discovered sure hours of the day when both the hourly request quantity from people (or bots impersonating people) or hourly cost success ratio spiked by greater than 3 customary deviations from their hourly baselines over the prior 30 days. This could possibly be associated to card draining the place an attacker (both people or bots impersonating people) is attempting to buy items utilizing legitimate however stolen credit. After all, advertising campaigns may also trigger request and success ratio spikes, so extra context within the type of typical cost requests from a given IP tackle is crucial context, as proven within the determine.
Fee success ratio spikes coinciding with request spikes and excessive density of requests per IP tackle, within the absence of promoting campaigns or cost outages or different components, might imply people (or bots pretending to be people) are making fraudulent purchases. Each profitable transaction right here could possibly be a direct income loss or a chargeback within the making.
What proof helps it?
We used a mix of bot indicators and anomalies on /cost, /checkout, /cart:
Ingredient | Sign | Description |
Bot | Bot Rating >= 30 | Excessive likelihood of human site visitors which is anticipated to be allowed |
Anomaly | Quantity Z-Rating > 3.0, calculated from request quantity baseline for a given hour based mostly on the previous 30 days and evaluated every hour. This components day by day seasonality as properly. | The attacker is making purchases at increased charges than regular consumers |
Anomaly | Success ratio Z > 3.0, calculated from success ratio baseline for a given hour based mostly on the previous 30 days and evaluated every hour. This components day by day seasonality as properly. | Sudden will increase in success ratio might imply legitimate playing cards being permitted for buy |
Anomaly | IP density > 5, calculated from cost requests per IP in any given hour divided by the common cost requests for that hour based mostly on the previous 30 days | People with 5X extra purchases than typical people previously 30 days is a crimson flag |
Anomaly | JA4 variety < 0.1, calculated from JA4s per cost requests in any given hour | JA4s with uncommon hourly purchases are doubtless bots pretending to be people |
Id-Primarily based Price Limiting: Use IP density to implement fee limits for requests with bot rating >=30 on cost endpoints.
Monitor success ratio: Alert on any hour when the success ratio for “human” site visitors, with bot rating >=30 on cost endpoints, deviates by greater than 3 customary deviations from its 30-day baseline.
Problem: If a excessive bot rating request (doubtless human) hits cost flows greater than 3 instances in 10 minutes, set off a problem to gradual them down
We’re at the moment engaged on integrating these “toxic combination” detections instantly into the Safety Insights dashboard to supply rapid visibility for such dangers. Our roadmap consists of constructing AI-assisted remediation paths — the place the dashboard would not simply present you a poisonous mixture, however proposes the precise WAF rule or API Defend configuration required to neutralize it.
We’d like to have you ever strive our Safety Insights that includes poisonous mixtures. You’ll be able to be a part of the waitlist right here.



