An audio language model with no fine-tuning and a one-line prompt transcribed Google's audio CAPTCHA correctly 96.67% of the time. The 63 people in the same study, 36 of them blind or partially sighted, got the same challenge right on the first attempt 23.33% of the time. The figures come from a January 2026 preprint on audio-illusion CAPTCHAs (arXiv:2601.08516, Ding, Wan, Song and colleagues), which put seven deployed schemes in front of both audiences. The machine is four times better than the human at the test built for the human.
That inversion is the whole story of audio CAPTCHA, and it is not one bad implementation. Audio challenges exist as the accessibility fallback to visual ones: press the headphone icon, listen, type the digits you hear. Turning a short sound into a short string is precisely what the speech-recognition industry has spent fifteen years and a great deal of money getting good at. Every improvement in transcription is, by construction, an improvement in solving.
Prices and version numbers below were read from vendor documentation on 10 August 2026; the correlation timings are our own, measured on one machine, with the method written out so you can disagree with it.
The audio track is the cheapest door
Nobody attacks the audio challenge because it is elegant. They attack it because it is priced at the bottom of the menu.
2Captcha's public rate card lists audio recognition at $0.50 per 1,000 solves. A reCAPTCHA v2 solve on the same list runs $1.00 to $2.99, Cloudflare Turnstile $1.45, an Arkose Labs challenge anywhere from $1.45 to $50. The API documentation for the audio method is narrow and revealing: mp3 only, one megabyte maximum, six supported languages, no human in the loop. It is a hosted speech-to-text endpoint with a CAPTCHA-shaped wrapper.
Renting a general transcription API to do the same job costs more. OpenAI's price list on the same date puts asynchronous transcription at $0.0045 per minute, which is $0.00075 for a ten-second clip, against $0.0005 for the finished answer. Buying the solve is a third cheaper than buying the transcription that produces it, before a line of glue code, which is why routing the challenge to a solving service beats a home-grown model in most production scrapers. Nobody has to beat the image grid or the behavioral score behind it. There is a button that converts a hard perception problem into an easy one, and in several jurisdictions it is on the widget by law.
The three stages every solver runs
Every audio solver, from the 2008 academic attacks to whatever ships tonight, runs the same three steps.
Segmentation. Find the sound events, drop the silence and filler. This decides how many tokens you are about to recognize.
Fingerprinting. Turn each event into something comparable: a reference waveform, a feature vector, cepstral coefficients, an embedding. Rewritten from scratch three times.
Recognition. Map the events onto the answer string and clean it up, which mostly means mapping homophones back to digits. A transcriber that hears "for" when the speaker said "four" has done its job correctly and broken yours.
The academic record here is older than most people assume. Tam, Simsa, Hyde and von Ahn at Carnegie Mellon presented Breaking Audio CAPTCHAs at NIPS in 2008, using energy-based segmentation, MFCC and PLP features, and three off-the-shelf classifiers. Against Google's audio CAPTCHA of the day they reported up to a 92% pass rate with one mistake tolerated, 67% on exact match. Audio CAPTCHA never had a period of being secure. It had a period of being obscure.
A bounded answer set: the Xbox case
The pipeline is clearest on a challenge whose answer set is small and knowable, which is how the xbox.com audio CAPTCHA was built and how many telephone challenges are still built.
The design. The system used 5 speakers, each recorded saying each of the ten digits 0-9: a fixed library of 5 x 10 = 50 recordings. A challenge was a random sequence of six to eight of those recordings, laid end to end with random gaps, mixed with radio-like background noise. You are not transcribing open-ended speech but matching against a dictionary of fifty known sounds, and the whole attack exploits that.
Whether xbox.com ran this scheme after 2013 is not recoverable from outside, and we will not pretend otherwise. What is documented is where Microsoft went instead: Arkose Labs announced in April 2025 that multiple Microsoft business units use its challenges "at critical consumer account flows." What follows is a case study in a technique, not a live target.
Step 1: build the library by averaging
Band-pass filtering does not separate spoken digits from speech-like noise, because the noise sits in the same band as the signal. Averaging does. Download several hundred challenges, align many instances of the same speaker saying the same digit, and sum them. Summing N aligned copies gives you:
- signal amplitude growing in proportion to N, because the copies add coherently;
- noise amplitude growing only as √N, because uncorrelated noise partly cancels itself.
The signal-to-noise ratio therefore improves by N / √N = √N. Average one hundred copies and you gain a factor of ten, or 20 dB. What is left is fifty clean reference waveforms: audio fingerprinting by brute-force denoising.
The cost of that library is the number people skip. Each challenge hands you seven recordings drawn from fifty, so collecting N copies of every recording is a coupon-collector problem, not a division. We simulated it: 2,000 runs, seven distinct recordings per challenge from a pool of fifty, counting downloads until the rarest had been seen N times.
| copies of each recording | challenges downloaded (mean) | 95th percentile | SNR gain |
|---|---|---|---|
| 30 | 307 | 347 | 5.5x, 15 dB |
| 100 | 874 | 938 | 10x, 20 dB |
| 300 | 2,412 | 2,514 | 17.3x, 25 dB |
NumPy 2.4.4, default_rng(11), 2,000 runs per row. The efficient floor is N x 50 / 7, so coupon-collector overhead runs about 22% at N = 100.
The original account describes downloading "several hundred" challenges, which lands at roughly 30 copies each and 15 dB of cleanup. Consistent, and also where the attack is most exposed: 300 requests for challenge audio from one address before a single answer is submitted, which is one of the loudest patterns a bot-management system can look for.
Step 2: find the templates in a noisy clip
With clean templates, recognition means locating each one inside a fresh, noisy challenge. The textbook instrument is cross-correlation: slide the template across the clip, look for the peak where they align.
The Xbox solver replaced it with a sparse filter. Take the template's local optima, its most distinctive peaks and troughs, and build a finite-impulse-response filter that is zero everywhere except at those few points, where it is +1 or -1. Convolving the clip with it produces a sharp peak at the right offset using only additions and subtractions. Because a sparse filter misfires, a full cross-correlation ran at each candidate position to confirm the hit. The peaks, in order, are the answer.
This is where the earlier version of this article, following the original write-up, gave the trick more credit than it deserves. "No multiplications" sounds decisive against naive direct correlation. It is not the comparison a signal-processing textbook would have offered in 2012, because the fast Fourier transform turns correlation into a pointwise multiply, and the clip can be transformed once and reused across the whole library.
We measured all four on synthetic signals: a ten-second clip at 8 kHz (80,000 samples), 50 templates of 4,000 samples each, best of five runs, Python 3.11.15 with NumPy 2.4.4 and SciPy 1.17.1 on a 2-core Intel Xeon at 2.10 GHz.
| method, all 50 templates against one clip | time |
|---|---|
direct cross-correlation (numpy.correlate) |
2.8 s |
| FFT cross-correlation, transformed per template | 0.25 s |
| FFT cross-correlation, one shared transform of the clip | 0.12 s |
| 40-tap ±1 sparse filter | 0.09 s |
Your absolute numbers will differ. The ordering will not.
The sparse filter is about 30 times faster than direct correlation, which is the comparison that gets quoted. Against a properly implemented FFT correlation it is 1.4 times faster and approximate, which is why it needs the confirmation pass. A real win on a 2012 server budget, a rounding error today. When a write-up reports a speedup, check what it was measured against.
What it achieved
Implemented in C++ and compiled with GCC for Linux servers, the solver reported roughly a 38% success rate at about 0.2 seconds per solve.
Thirty-eight percent reads like failure to a defender and like a finished product to an attacker. At 0.2 seconds a try, a first success costs about half a second of CPU, and a miss costs another request. The number that matters is not accuracy per attempt but attempts per hour against your rate limit. A challenge a machine passes one time in three is not a challenge, it is a delay.
Where the averaging trick breaks
Template averaging is not a general method. It works under three conditions, and every one of them is a defense if you know to hold it.
The noise has to be uncorrelated across samples. The √N cancellation assumes each challenge carries an independent draw of background. Mix in the same twelve seconds of stock radio chatter every time and it survives averaging exactly as well as the signal does, because to the algebra it is signal. Serving noise from a small fixed library is the cheapest counter there is, and it costs the defender nothing.
The copies have to be alignable. You cannot align copies of a recording you have not found, and you cannot find it without a template. Solvers bootstrap out of that with rough correlation on still-noisy samples, which works while the recordings stay bit-identical between challenges. Re-encode each clip at a jittered sample rate and alignment becomes a warping problem instead of an offset problem.
The dictionary has to be fixed and small. Fifty recordings is a weekend. Synthesize each digit fresh from a text-to-speech voice and the library is unbounded, the averaging step has nothing to average, and the attack degrades to open-ended transcription.
The method is not dead. It is right for any challenge whose answer comes from a fixed set of recordings, which still describes most interactive-voice-response gates and plenty of legacy forms. Bounded answer sets are what it eats.
Hand it to a speech model instead
For open-ended challenges there is no library to build, and the pipeline is three lines long: fetch the mp3, transcribe it, clean the string.
OpenAI Whisper is still the default. Six sizes ship, from tiny at 39M parameters and roughly 1 GB of VRAM to large at 1,550M and 10 GB, plus turbo at 809M. Check the sign of life before building on it: the last tagged release is 20250625, published 26 June 2025 and more than a year old today. The repository is open and unarchived, but Whisper is finished rather than evolving; OpenAI's hosted transcription has moved on to newer models.
The tiny model is usually enough, which is the part that should worry defenders. A public proof of concept, recaptcha-audio-solver, drives reCAPTCHA v2 with Playwright, clicks through to the audio challenge and transcribes the clip with Whisper's smallest model, on the stated grounds that the audio is clear English speech. The challenge meant to be hard for machines is read by the model you use when you cannot spare a gigabyte.
# Written against Python 3.11 and openai-whisper==20250625,
# the current release on 10 August 2026.
import re
import whisper
WORDS = {"zero": "0", "one": "1", "two": "2", "to": "2", "too": "2",
"three": "3", "four": "4", "for": "4", "five": "5", "six": "6",
"seven": "7", "eight": "8", "ate": "8", "nine": "9"}
model = whisper.load_model("tiny")
result = model.transcribe(
"captcha_audio.mp3",
language="en", # skip language detection on a 10-second clip
temperature=0, # deterministic: a retry gives the same wrong answer
condition_on_previous_text=False, # nothing precedes a CAPTCHA clip
)
tokens = re.findall(r"[a-z0-9]+", result["text"].lower())
print("".join(WORDS.get(t, t) for t in tokens if WORDS.get(t, t).isdigit()))The homophone map is not decoration. Transcribers are trained on prose, so they write "for" and "ate" where a digit was spoken, and the same substitution table is what the University of Maryland's unCaptcha work leaned on in 2017 to push per-digit accuracy to 91.99% out of six mediocre transcription services. Kevin Bock, Daven Patel, George Hughey and Dave Levin reported 85.15% end-to-end at 5.42 seconds per solve at USENIX WOOT that year, over 459 hand-annotated live challenges. Google responded in December 2018 by switching the audio challenge from digits to spoken phrases; unCaptcha2 answered with around 90% accuracy on the new format. Its README is clear about the shelf life of a published attack: "As Google updates its service, this repository will not be updated. As a result, it is not expected to work in the future, and is likely to break at any time."
Where general transcription has gone since is tracked by the Open ASR Leaderboard: its November 2025 review puts Whisper large-v3 at 6.43 WER, best among open models for long-form audio and far slower than the purpose-built alternatives above it. None of that was built to attack anything. It attacks audio CAPTCHA as a side effect.
Where the speech model breaks
"Feed it to a model" is not a universal answer, and the January 2026 evaluation is precise enough to say where it stops. It put five solvers against four content-based schemes, and the same schemes in front of 63 people across 756 trials.
| scheme | best machine bypass | human first attempt |
|---|---|---|
| GeeTest | 100.00% | 100.00% |
| 96.67% | 23.33% | |
| MTCaptcha | 46.66% | 80.00% |
| Telephone-Audio | 30.00% | 23.33% |
GeeTest presents spoken numbers with no background noise at all, and both audiences pass every time, which makes it a usability feature wearing a security badge. MTCaptcha lays music under the digits, and it is the only scheme here where the human beats the machine. Telephone-Audio, band-limited and noisy the way a phone line is noisy, defeats the machine best and defeats the human just as thoroughly. The scheme that resists solvers and the scheme that is usable are not the same scheme, and across all four the average human first-attempt success was 61.90%.
The research is heading toward perception the machine does not share. The same preprint proposes IllusionAudio, built on sine-wave speech, which strips a recording to a handful of time-varying sinusoids that the human auditory system reassembles into words and a transcriber trained on natural speech does not. They report a 0% bypass rate against every solver tested and 100% first-attempt human success, visually impaired participants included. Treat that as a promising result and not a shipping product: thirty trials per scheme is a small sample, and any published defense against transcription models becomes training data for the next generation of them. No audio scheme has ever stayed ahead of speech recognition for long.
The accessibility path is the attack surface
All of this lands on one uncomfortable fact: audio CAPTCHA exists for people who cannot use the visual one, and it is the weakest part of every widget that has it.
The vendors have noticed. hCaptcha's accessibility page refuses audio outright, in its own words, because "previously popular options like audio captchas discriminate against many a11y users and are easily defeated by modern machine learning techniques." It ships a text challenge and an accessibility cookie instead. Cloudflare's Turnstile does not mention audio at all. Arkose Labs does keep one, and its November 2024 conformance report is candid about the trade: the audio challenge "does not provide an alternative that presents equivalent information, to not invalidate their security purpose." GeeTest keeps one too, and per the table above it is the one solvers pass every time.
Dropping audio relocates the problem rather than removing it. A disclosed vulnerability write-up on hCaptcha's accessibility cookie flow automates the whole signup with a controlled domain, a small SMTP server and keyboard emulation, harvests cookies that "do not expire," and concludes that "the cost-per-captcha-bypass of this exploit (if deployed at scale) amortizes to nearly zero." Whatever door you leave open for people who cannot see the puzzle is the door that gets automated.
Google still offers the audio challenge, with screen-reader support and a downloadable mp3 when playback fails. It also, unpredictably, refuses to serve it. The maintainers of Buster, the extension that solves reCAPTCHA audio challenges with speech recognition and whose 3.2.0 release shipped 8 June 2026, keep a wiki page on the failure mode: the audio challenge is replaced by "your computer or network may be sending automated queries. To protect our users, we can't process your request right now." Google's FAQ attributes that message to a shared network, a recently reassigned address, or a site under attack. All three describe an ordinary person on ordinary infrastructure. The anti-abuse control on the accessibility feature is a lockout, and whoever hits it has no path left through the form.
Regulators are moving the other way. WCAG 2.2, current Recommendation dated 12 December 2024, makes accessible authentication a Level AA criterion: no cognitive function test in an authentication step without an alternative or a mechanism. The European Accessibility Act, Directive (EU) 2019/882, covers EU e-commerce from 28 June 2025. W3C's Inaccessibility of CAPTCHA note said in December 2021 that audio CAPTCHAs "impose a cognitive overload to all human users."
Required, ineffective, and hostile to the people it exists for. Nobody has a good answer to that, and pretending otherwise is how it stays unfixed.
What replaced the puzzle
The industry's answer was to stop asking questions. Invisible scoring judges a session on network, environment and behavioral signals and escalates only for traffic that looks wrong, which is the shift running through the current anti-scraping stack. No puzzle means no audio fallback and no transcription attack, at the price of a system whose decisions nobody can see or appeal.
It did not end the market. Microsoft's Digital Crimes Unit went after Storm-1152 in December 2023, a Vietnam-based operation that had created roughly 750 million fraudulent Microsoft accounts and sold CAPTCHA-solving alongside them through a service called AnyCAPTCHA. The seizure cut signup traffic by about 60%. The group came back as RockCAPTCHA and Microsoft filed again in July 2024. Challenge-solving is an industry with revenue, hosting and a legal department, and it survives the retirement of any one puzzle format.
Solving one is circumvention. Whether that is unlawful depends on what sits behind it
Two US rulings eleven days apart in 2026 drew that line about as sharply as it has been drawn, both out of scraping cases.
On 20 July 2026, Judge Yvonne Gonzalez Rogers dismissed Google's DMCA claim against SerpApi over the scraping of search results. The court accepted that the defendant's tactics, including spoofed fingerprints, rotated addresses and solved CAPTCHAs, amounted to circumventing Google's SearchGuard anti-bot system. It dismissed anyway: section 1201 protects measures guarding copyrighted works, and search results are facts.
On 31 July 2026, Judge Paul Engelmayer in the Southern District of New York let Reddit's anti-circumvention claims against Perplexity and SerpApi proceed, holding that SearchGuard is a measure controlling access to an online work for a section 1201(a) claim. Same system, opposite outcome, because what sat behind it was Reddit's content rather than Google's index.
For anyone writing a solver: getting past the challenge is the easy half of the legal question and is largely conceded. The contested half is what the challenge was protecting. Studying these algorithms is signal processing, and none of this is legal advice, but automating past a gate to take content somebody owns is a live theory in federal court rather than a hypothetical. Sites that answer every request with a challenge are where a managed extraction service earns its keep, because the compliance question arrives attached to the technical one.
If you actually have to get through one
Pin the model you transcribe with, because an upgrade that improves prose accuracy can quietly change how a digit string comes out. Keep the homophone table next to the transcriber. Expect the audio path to be throttled or withheld from addresses that have been asking too much, and read that lockout as a fact about your traffic rather than a bug in the widget.
If volume justifies paying someone, a solving service is cheaper per answer than the transcription API behind it, and a worked integration against a solver's API is a shorter afternoon than a model deployment. Neither is the real fix.
The real fix is upstream. A challenge is a symptom: something about the addresses, the fingerprint or the pacing told the scoring layer this session was not a reader. Better residential proxy sourcing, a coherent browser environment and human-scale timing keep it from firing at all.
For the defending side, the arithmetic above is the argument. A bounded answer set falls to a weekend of averaging and a correlation search. An unbounded one falls to a speech model somebody else paid to train. The only scheme machines struggled with in 2026 also defeated three quarters of the humans who tried it. Audio CAPTCHA is not a control you can tune. It is one you can only remove, and then owe the people who needed it something better.