Article · Sep 1, 2026 · 10 min read

OWASP automated threats: the 21 names your vendor should be using

The OWASP Automated Threat Handbook gives every bot attack a vendor-neutral name and an OAT number. The full taxonomy, the five that cost the most money, and how to use it in an RFP.

OWASP automated threats: the 21 names your vendor should be using

Everybody in this market invented their own vocabulary. One vendor's "inventory hoarding" is another's "denial of inventory" is another's "cart abuse". That is fine until you try to compare two products, at which point you discover you have no idea whether they are describing the same thing.

OWASP fixed this in the Automated Threat Handbook for Web Applications. Twenty-one attacks, each with a name and an identifier from OAT-001 to OAT-021. It is the closest thing this industry has to a shared language, and it is underused.

The handbook covers attacks on application business logic carried out by automation. It is not about software vulnerabilities. Nothing here is a bug in your code. Every one of these is your application working exactly as designed, at a speed and scale you did not design for.

The full taxonomy

OATNameWhat it is
OAT-001CardingTesting stolen card numbers against a payment endpoint
OAT-002Token CrackingGuessing coupon, voucher or discount codes
OAT-003Ad FraudFake clicks and impressions against advertising
OAT-004FingerprintingProbing to identify the stack behind an application
OAT-005ScalpingAcquiring limited-availability goods for resale
OAT-006ExpeditingPerforming actions faster than a person could, to gain advantage
OAT-007Credential CrackingGuessing passwords against known usernames
OAT-008Credential StuffingReplaying credentials breached elsewhere
OAT-009CAPTCHA DefeatSolving or bypassing a challenge to enable another attack
OAT-010Card CrackingBrute-forcing missing card data such as expiry or CVV
OAT-011ScrapingHarvesting content or data from an application
OAT-012Cashing OutConverting fraudulently obtained value into goods or money
OAT-013SnipingActing at the last possible moment, as in auction bidding
OAT-014Vulnerability ScanningAutomated probing for known weaknesses
OAT-015Denial of ServiceExhausting application resources
OAT-016SkewingInflating counts, votes, ratings or metrics
OAT-017SpammingInjecting content into forms, comments and messages
OAT-018FootprintingMapping application structure and endpoints
OAT-019Account CreationBulk creation of accounts for later use
OAT-020Account AggregationCompiling activity across many accounts
OAT-021Denial of InventoryMaking goods unavailable without buying them

The five that account for most of what we see

Not all twenty-one turn up with equal frequency. These are the ones behind almost every conversation we have.

OAT-011 scraping

Scraping is the most common of the twenty-one and the most often dismissed as harmless. The damaging version is not an LLM crawler copying your marketing pages. It is a competitor consuming your product through the API and reselling the output, which turns your acquisition spend into their cost of goods.

Detection is harder than volume thresholds suggest, because a well-built scraper deliberately runs slowly from residential IPs. What gives it away is the client rather than the request rate: header combinations real browsers do not emit, and an environment that contradicts itself between the worker thread, the main thread and the reported hardware. More on this in web scraping protection.

OAT-009 CAPTCHA defeat

CAPTCHA defeat is underestimated because it is not an attack in itself. It is the enabling step for carding, credential stuffing, scalping and account creation.

Commercial solver services price at a dollar or two per thousand solves. Against a target worth anything at all, that is not a deterrent. Any control that depends on a challenge being hard to solve has already lost. Detection has to identify the solver in the request path instead of making the puzzle harder. Our detectors name the service when they fire, for example Solver service detected. Background on how these operations work is in what a CAPTCHA solver is and CAPTCHA farms.

OAT-005 scalping

Limited-availability goods acquired for resale. Ticketing is the obvious case, but sneaker drops, console launches and restaurant reservations are the same attack.

What makes scalping different from most of this list is that the attacker has a clear revenue model, which funds better tooling than a spammer can afford. See anti-scalping bot protection.

OAT-021 denial of inventory

Automation that makes goods unavailable without buying them. Baskets filled and abandoned, reservations held and dropped.

Nothing is purchased, so this is the hardest one to see in commercial reporting. There is no chargeback, no fraud signal and no complaint. The first symptom is a conversion rate that quietly falls. We wrote it up separately at denial of inventory.

OAT-008 credential stuffing

Replaying credentials breached somewhere else. Success rates are low per attempt and the volume makes up for it.

The detection problem is that every individual request looks like a normal login. It is the population that is abnormal, so you have to score the cohort rather than the request. See credential stuffing and account takeover.

Why this is useful in an RFP

Here is the practical reason to care about a taxonomy.

If you ask a vendor "do you do bot management", every vendor says yes and you have learned nothing. If you ask which OAT identifiers they address and how detection differs between OAT-005 and OAT-011, you get a real answer or you get evasion, and both are informative.

The differences are genuine. Scalping detection is about speed and coordination inside a short window. Scraping detection is about a slow, patient client that never looks anomalous on any single request. A product tuned for one is not automatically good at the other, and vendors who came up in ad fraud, as CHEQ did, are not automatically strong at inventory abuse.

Three questions we would put in an RFP, in this language:

  1. Which OAT categories does your detection explicitly address, and which do you consider out of scope?
  2. For OAT-009, how do you detect a request where the challenge was correctly solved by a third-party service?
  3. For OAT-021, what signal do you use, given there is no completed transaction to score?

Vendors who work with this taxonomy will answer directly. Vendors who want the conversation in their own vocabulary will redirect, and the redirection tells you something too.

How Prosopo compares

We detect and act on OAT-005, 007, 008, 009, 011, 016, 017, 019 and 021 as first-class cases, and OAT-001, 003, 006 and 013 as consequences of the same signal set. Every block returns a reason rather than a category label, so what you get is more specific than the taxonomy rather than less.

Where we are weaker: OAT-003 ad fraud as a standalone discipline is CHEQ's home ground and they are better at it. OAT-015 denial of service in the volumetric sense is a CDN problem, and Cloudflare or Akamai should be handling that before it reaches us.

Tagged

owasp oat bot-management bot-protection scraping prosopo
Chris Taylor

Chris Taylor

Building privacy-first bot protection at Prosopo.

More articles by Chris Taylor

Know which OAT you have?

Tell us which of these you are seeing and on which endpoint. We will look at the traffic before we reply, and we will tell you if it is something your current stack should already be handling.

Tell us about your bot problem

We'll get back to you straight away

By submitting this form, you agree to our Privacy Policy and Terms of Service

Frequently Asked Questions

What is the OWASP Automated Threat Handbook?

The OWASP Automated Threat Handbook for Web Applications is a vendor-neutral taxonomy that gives each type of automated attack against a web application a name and an identifier, from OAT-001 to OAT-021. It exists because vendors each invented their own vocabulary for the same attacks, which made products impossible to compare. It describes attacks on application business logic performed by automation, rather than software vulnerabilities.

What are the OWASP automated threat categories?

The 21 categories are Carding, Token Cracking, Ad Fraud, Fingerprinting, Scalping, Expediting, Credential Cracking, Credential Stuffing, CAPTCHA Defeat, Card Cracking, Cashing Out, Sniping, Scraping, Skewing, Spamming, Footprinting, Vulnerability Scanning, Denial of Service, Account Aggregation, Account Creation and Denial of Inventory.

What is OAT-021 denial of inventory?

Denial of inventory is the OWASP identifier for automation that makes goods or services unavailable without buying them, typically by adding items to a basket or holding a reservation and abandoning it. It is distinct from scalping, where the automation completes the purchase and resells. Denial of inventory has no direct payment attached, so it is hard to spot in commercial reporting: nothing is bought, so nothing looks wrong until conversion falls.

What is OAT-009 CAPTCHA defeat?

CAPTCHA defeat is the OWASP identifier for automation that solves or bypasses a CAPTCHA in order to complete another automated threat. Most people underestimate this one, because it is not an attack on its own. It is the enabling step for carding, credential stuffing, scalping and account creation, and commercial solver services make it cheap enough that a visible challenge on its own is no longer a control.

How do I use the OWASP OAT taxonomy in an RFP?

Ask each vendor which OAT identifiers their product addresses and how detection differs between them, rather than asking whether they do bot management. The taxonomy forces specific answers, because OAT-005 scalping and OAT-011 scraping need different detection and a vendor good at one may be weak at the other. It also stops the conversation being conducted entirely in vendor-invented terminology.