← Back to posts

14 min read

500 XSS Bugs, Zero Bounty Payouts: What Google's PageBreak Agent Does to the Price of Web Bugs

Filed under DAST & Scanning

Google turned an AI agent loose on its own web applications and it came back with more than 500 verified cross-site scripting vulnerabilities. None of those bugs will ever pay out a bounty. That second fact matters more than the first.

The agent is called PageBreak, built by Google's Product Security team and described in a September 24, 2026 post by information security engineer Michał Bentkowski. It started as a pilot in November 2025, graduated to a full project in January 2026, and runs primarily on Gemini 3.1 Pro and Gemini 3.5 Flash. The news coverage has fixated on the 500 number. The number is the least interesting part of the story.

The validator is the product

How PageBreak gates every finding

Every vendor demo in this space follows the same script: point a model at code, watch it produce a plausible vulnerability narrative, declare victory. PageBreak works because Google's team refused that script early. "Early on in the development of PageBreak, we made a conscious decision to prioritize deterministic validation," Bentkowski wrote.

The architecture is simple to describe and hard to copy lazily. The model generates vulnerability hypotheses. A suite of specialized validators, written by humans rather than generated by the model, then executes real payloads against running environments. A finding only survives if the exploit is confirmed. That gate is what produces the near-zero false positive rate Google claims, and it is the entire difference between this and the noise most AI security tools emit.

What deterministic validation looks like, class by class

The validators are specific to both bug class and surface (HTTP and gRPC):

  • XSS: inject a JavaScript payload, then confirm execution with a rendering harness.
  • SQLi: check output, timing, or both.
  • Path traversal: write a file to a world-readable location, then read it back.
  • RCE: look for sleep delays, file writes, or outbound DNS and HTTP requests.
  • SSRF: watch for outbound requests to internal services.

None of this is exotic. That is the point. A rendering harness and a timing loop are boring engineering, and boring engineering is exactly what the AI security market has been skipping.

Just as important is what happens to hypotheses that fail or cannot be tested. "Crucially, we do not send these unverified candidates to product teams, preserving their focus for high-confidence alerts," Bentkowski wrote. Unverifiable candidates are retained as seeds for future scans, used to guide validator development, and used to let the agent report missing capabilities or environment access. The quarantine is the discipline. Most tools put every hypothesis on a dashboard and call it coverage.

The three findings Google chose to show off

The highlighted examples tell you where the agent earns its keep. On apis.google.com, it found a cache-poisoning issue: an unchecked URL path segment was inserted into returned JavaScript but excluded from the cache key, so a malicious response could be cached and served to other visitors in the same geographic area. On admin.google.com, an unverified redirect value reached window.location but was blocked by a cryptographic signature, so the agent found a separate authorization endpoint that would produce a valid signature for a malicious JavaScript URI, turning a protected endpoint into a working XSS path. The third was a universal XSS condition in the Tag Assistant Extension, chaining weak checks on external connections, recovery of a one-time nonce, unsafe message forwarding, and data URL support into arbitrary JavaScript execution.

All three have been remediated, per reporting on the disclosure, though Google has not published remediation status for the full set of 500-plus findings. Notice what these three are not: none is a single-step reflected XSS that a 2009-era scanner would catch. Each required context about cache keys, signing endpoints, or extension message passing. Remember that when we get to the bounty economics.

Google also plans to wire PageBreak into CodeMender, its automated fix-generation system, building a pipeline of discovery, deterministic validation, proposed patch, and human review before anything ships. That loop, not the model, is the endgame.

Near-zero false positives is the whole story

The scarce resource in application security has never been findings. It is the attention of the people who read them. Google's own post has a term for the alternative: "noisy, unverified hypotheses or false positives generated by LLMs acting as static code analyzers." They call it AI slop, and anyone who has triaged a vulnerability disclosure queue in the past two years has seen the external version of it: reports that read fluently, reference real endpoints, and describe exploits that do not execute.

A triage engineer costs the same per hour whether they are reading a genuine cache-poisoning chain or the four hundredth paraphrased non-reproducing report. Every minute spent on the second is budget spent processing someone else's inference output. This is why the demo-grade agents frustrate practitioners so much, a gap we mapped in Your Agent Demo Is Lying to You: A Map of the Production Gap.

The skeptic's objection here is fair: near-zero is Google's self-reported number. But unlike a vendor confidence score, the mechanism actually explains the claim. You cannot report a finding whose payload did not execute, because the validator gates the report. The claim is falsifiable by design, which is more than most AI security marketing offers.

The false negative trade, said out loud

Google is unusually honest about the other side of the ledger. "While deterministic validation is our gold standard, we are aware that our validators are currently lacking in capabilities to cover all vulnerability types or complex scenarios," Bentkowski wrote. Deterministic-only validation guarantees false negatives. Bugs in classes without validators, or that require multi-step state the harness cannot reproduce, will be missed.

The data point that proves the trade is real: tested against applications built on Google's high-assurance web frameworks, PageBreak found only 2 XSS vulnerabilities across hundreds of apps as of September 4, 2026, and those were limited to internal applications or debug endpoints with hardening gaps. Two readings follow. First, secure-by-default frameworks nearly zero out the bug class, and the agent mostly measures that. Second, whatever sits outside validator coverage, WebSocket-heavy surfaces being a common example (see WebSockets and the Blind Spot in Modern Web Security), remains human territory.

So yes, the 500 is a lower bound with unknown recall. For triage economics, that trade is correct. Recall is a roadmap problem you fix by writing more validators. Precision is a trust problem, and once product teams learn your queue is noise, they stop reading it permanently.

What PageBreak does to bug bounty economics

This is the part nobody covering the story has touched, and it is where the impact lands first.

Slop flows outward, signal flows inward

There is an asymmetry that should worry every program operator. Internal agents like PageBreak file only verified bugs. External hunters armed with off-the-shelf LLM tooling will file more unverified ones, because their incentive is volume and the tool's incentive is plausibility. Your program's external noise rises at exactly the moment internal teams at mature companies stop generating it.

The response is a hard gate: no execution evidence, no human triage. Require every web report to include a payload that demonstrably executes, a trace, a video, or a run in a sandbox you provide, and route everything else to an automated reproduction attempt before a person reads it. Programs that do not add this gate will watch triage costs scale with somebody else's token budget.

Simple XSS reprices toward zero

When the owner of a surface can enumerate single-step XSS at near-zero marginal cost, the market value of finding one more collapses. Expect more duplicates against internally known issues, downward pressure on base payouts for single-step reflected and stored XSS, and a shorter window where "first to report" on a large surface means anything. Google's own VRP is the cleanest illustration: 500-plus internally discovered bugs are 500-plus reports that will never be purchased from the outside market.

If you run a program, revisit the payout table now rather than after the market moves. Lower the base for single-step web bugs, add explicit multipliers for chained impact, and consider publishing which classes your internal automation already covers so researchers stop spending effort there. Paying full price for a bug your agent found last Tuesday is a subsidy, not a bounty.

Human value moves up the chain

Look again at what Google highlighted: a cache-key flaw, a signature-bypass chain across two endpoints, an extension messaging chain. Those are precisely the shapes a class-specific validator suite struggles to generalize. The durable human niche is multi-step authorization quirks, business logic abuse (we walk through how to test that in Testing AI Copilots for Business Logic Abuse), client-side messaging, and cache behavior. Hunters should train there. Programs should price there. The low end of the web bug market is being automated out from both directions.

You can copy the pattern this quarter

The predictable pushback: Google has custom models, effectively unlimited compute, and running environments for every first-party app. True, and mostly irrelevant. The expensive inputs are scope and a testable environment, and any organization with a staging deployment already has both. The validators themselves are commodity engineering.

A minimal XSS validator

Here is the entire core of an execution-confirmed XSS check using Playwright:

javascript
// confirm-xss.mjs
// A finding only "exists" if the injected token actually executes.
import { chromium } from "playwright";
import { randomUUID } from "crypto";

export async function confirmXss(targetUrl, buildPayloadUrl) {
  const token = "hit_" + randomUUID().replaceAll("-", "").slice(0, 12);
  const browser = await chromium.launch();
  const page = await browser.newPage();

  let executed = false;
  // The payload calls window[token]() if it runs. No call, no finding.
  await page.exposeFunction(token, () => { executed = true; });

  await page.goto(buildPayloadUrl(targetUrl, token), { waitUntil: "networkidle" });
  await page.waitForTimeout(1500);
  await browser.close();
  return executed; // true = send to a human. false = seed queue.
}

The same pattern generalizes. SQLi becomes repeated timing trials against a baseline. Path traversal becomes a canary file write and read-back. SSRF and RCE become an out-of-band listener, an interactsh-style server is the practical equivalent of Google's outbound-request detection. Google runs agents with identical seeds across numerous iterations to raise the probability of finding the correct exploit trajectory; on the confirmation side, re-run any confirmed finding a few times and treat inconsistent results as a harness bug or a race-dependent vulnerability. Both are worth knowing before an engineer spends an hour.

Rules for the pipeline

  1. Every hypothesis gets one of three verdicts: confirmed, refuted, or unverifiable.
  2. Confirmed goes to an engineer with the execution evidence attached.
  3. Unverifiable goes to a seed queue and into the scope of your next manual test. It never goes to a product team.
  4. Track validator coverage explicitly. Classes without validators are your pentest scope, not your agent's.

Five questions that separate validation from vendor slop

When a vendor claims their AI finds exploitable bugs, ask these in order:

  1. What reproduction evidence ships with each finding? Security Arsenal phrases the right demand well: "Show me the reproduction evidence your tool attaches to each finding. If the answer is a confidence score, keep shopping."
  2. Where do unverifiable hypotheses go? If the answer is "the dashboard," it is a static analyzer wearing an LLM costume.
  3. Which bug classes have execution-based validators, and which are model-judged? Get the split in writing.
  4. What are your false negatives? Google admits its validators miss classes and complex scenarios. A vendor claiming full coverage is marketing.
  5. Does the exploit run against a live environment? Code reasoning is a hypothesis generator. Only execution is proof.

One honest limitation of this whole pattern: it covers the classes you have validators for, continuously, and everything else stays dark until a human looks. If that interval between automated coverage and your annual test is the gap you are trying to close, Axeploit's pentest workflow is built for exactly that problem.

Key takeaways

  • PageBreak's result is a validation story, not a model story. Deterministic, class-specific validators executing real payloads are what deliver the near-zero false positive rate.
  • The discipline worth copying is the quarantine: unverified hypotheses never reach engineers, they feed seeds and future scope instead.
  • Bug bounty economics shift in both directions. External AI noise raises your triage costs, while internal agents push the market value of single-step XSS toward zero. Reprice payouts and gate triage on execution evidence.
  • Human research value concentrates in chains, business logic, and surfaces that resist deterministic validation. Google's own three showcase findings are a map of that territory.
  • You do not need Google's infrastructure. One bug class, one headless browser, one out-of-band listener, and a hard rule about what reaches a human will get you most of the pattern this quarter.
Get started

Integrate Axeploit into your workflow today