P.K. SHARMA

Cyber security intelligence, AI governance, practitioner analysis

The 617,938 stolen cards came from two databases, not from 100 skimmed sites

Gambit Security's own country table sums to 617,938 cards, and its report says they came from two companies, not from the sites carrying skimmers. The speed the AI agents bought is real. The scale is not.

By Parminder Kumar Sharma · · 22 min read

Editorial illustration for the briefing: The 617,938 stolen cards came from two databases, not from 100 skimmed sites

617,938, and it is not the number the headline implies

Gambit Security's report of 22 September 2026 carries a table breaking its stolen card haul down by issuing country. Add the thirteen rows up. The United States 488,372, the United Arab Emirates 13,559, Saudi Arabia 6,785, the United Kingdom 6,522, New Zealand 5,710, Ireland 5,483, Singapore 5,305, Kuwait 4,676, Australia 4,672, Hong Kong 4,459, France 4,295, Qatar 4,075, and a remaining 196 countries at 64,025. The total is 617,938. The share column sums to exactly 100.0 per cent, and 488,372 is 79.03 per cent of that total against the 79.0 per cent the table prints, so the figure is internally consistent. That is the real number behind "more than 600,000".

Now the sentence that matters, and it is Gambit's own, in the third paragraph of its report. Those cards came from two companies. Not from a hundred. Not from a hundred and nineteen. Two.

The BleepingComputer headline of 23 September, "Malicious AI agents steal 600K credit cards, infect 100+ sites with skimmers", is not wrong in either half. It is wrong in the conjunction. The two figures describe two different operations against two different sets of victims by two different routes, and only one of those routes goes anywhere near a shopper's browser. Everything a defender needs to do about this depends on telling them apart.

What each headline number actually counts

Gambit's team recovered the operator's staging server and rebuilt the campaign from what was on it. That is an unusually strong evidentiary position, and it is worth saying so plainly before picking at the numbers: this is not a vendor inferring a threat actor from code style. They had the machine.

It is also why the report is careful about its own tiers of confidence, and why a reader should be too. Gambit names three sources of evidence: direct artefacts on the staging server including the exfiltrated data itself, live compromises it verified in the wild, and logs plus the AI agents' own claims. On that third tier it writes that AI claims "may turn out to be inaccurate" and that it relies on them anyway because the first two tiers corroborated substantial parts of them. It closes the section by saying a few errors are possible and that the true impact is probably larger.

Each headline figure against what it counts and what it leaves open, from Gambit Security's report of 22 September 2026

The numberWhat it actually countsWhat it does not establish
617,938 cardsUnexpired card records recovered from the attacker's staging server, taken from two victim companies' stored card databasesThat any were skimmed. That they represent the campaign total. Gambit expects the real figure to be higher
27 companiesOrganisations Gambit assesses were compromised to some degree between 10 and 15 September, out of 105 attack projects launchedHow many were compromised across the full campaign since July. 57 of the 105 projects had been deleted before Gambit got the server
19 sitesSkimmer installations Gambit confirmed were actually in place, out of at least 27 that were orderedThat the other eight succeeded. Gambit distinguishes ordered from confirmed and so should anyone quoting it
More than 100 sitesFurther websites found carrying a skimmer that Gambit describes as "associated with" this campaign, detected with a researcher credited only as VarysThat this operator compromised them. Association by shared skimmer infrastructure is a weaker claim than confirmed compromise, and Gambit does not make the stronger one

Put the last two rows together and the widely repeated "119 sites" appears: 19 confirmed plus the 100 or so associated. That addition is doing real work in the headline, and neither Gambit nor the arithmetic supports treating the two categories as the same thing.

Two paths, and only one of them touches a shopper

The campaign ran two distinct operations out of the same access. Both mattered. They are not the same crime and they are not stopped by the same controls.

The skimmer path is the familiar one. Get into the estate, put a loader into something the checkout page executes, and the shopper's browser copies card details to an attacker host as they are typed. Gambit lists nine skimmer host domains and five IP addresses among its indicators. What it never states, anywhere in the report, is how many cards that path actually captured.

The database path never involves a browser at all. One documented chain ran from an unauthenticated SQL injection, through reading one time passcodes in plaintext from a database table to bypass multifactor authentication, into an admin panel, up through an unchecked file upload to code execution on the host, to root by way of a passwordless sudo entry, across an NFS mount, into a WordPress database, out to a full dump of 46 secrets from AWS Secrets Manager, and finally into the main Magento database, where the encryption key was extracted and the stored encrypted card column decrypted. That is where the 617,938 records came from. Stored card data at rest, in two companies' own databases.

Two rows showing two separate data paths. Path A, the skimmer: a loader is injected by one of eight methods, every one landing on infrastructure the merchant controls; the page is served carrying it; the script runs in the shopper's browser, outside the merchant's logs; card data goes to an attacker domain, and the report never says how many cards it took. Path B, the stored card database, stays inside the estate and yields 617,938 records from two companies.
Built from Gambit Security's report of 22 September 2026, its indicator list and its country table, summed

After the dump, an agent skill named "Database Wipe After Extraction" told the agent to empty the source columns in batches and then re-run the detection query to confirm every count was zero. At a bicycle retailer, a cleanup routine matching table names too broadly dropped 180 tables, including backup tables the victim's own administrators had created. The data destruction here was not extortion. It was housekeeping.

What the AI actually did, and what it did not

Injecting JavaScript into a checkout page to copy card details has been documented since 2015. So the only question worth asking is what the agents did that a script could not, and whether the report establishes it. Taking the four obvious candidates in turn.

Did the AI write the skimmer? Nothing in the report says so. The loader is an ordinary short base64 blob behind a seven character junk prefix that appends a script element pointing at an attacker host. That technique is a decade old and needs no model to produce it. The report describes the injection methods in detail and never once credits the agent with authoring novel malicious code.

Did the AI choose the targets? Partly, and less than you would think. The operator went to a website traffic ranking service, opened the shopping category, and filtered out the shops running the major hosted and open source commerce platforms in order to keep the ones running custom code. Then they pasted 301 results into the console with an instruction to run them all through a proxy at high severity only. The strategy was human. The agent got a list.

Did the AI evade detection? The evasion tricks in the report are human tradecraft and old. Restoring a file's original modification timestamp after appending to it. Padding an injected line with about a hundred tab characters so it sits off the right hand edge of a source view. Leaving a cron job in a JBoss log directory that checks a file's size every two minutes and re-appends the skimmer whenever a redeploy reverts it. A person would recognise every one of those from 2018.

Did the AI run the infrastructure? No. The staging server, the command and control hosts, the skimmer hosts and the two commercial proxy providers were all conventional, human procured, and are listed as indicators at the end of the report. That is precisely why Gambit was able to recover the server and write the report at all.

And this is observed, not inferred. That distinction is the usual weak point in AI threat reporting and it does not apply here. Gambit did not deduce an agent from artefacts and writing style. It read the agent's session logs, its skill files, its prompts and its outputs off the operator's own machine. The human side of it is quantified: 1,951 prompts typed across 260 sessions, an average of 7.5 per session, in short Chinese instructions of the order of "read the vulnerability report and start" and "can it get code execution?". Spread across 105 attack projects that is about nineteen human prompts per target, most of them a handful of words.

The tempo follows from that. Strix was run 146 times against 138 hosts between 23 and 31 August, consuming 633 hours of scanner time inside 195 hours of clock time. That is 3.25 scans running in parallel, sustained for about 21.7 hours a day across nine days. No human team of one does that.

Speed is the finding. Scale is not.

The temptation is to read this as AI industrialising card skimming. The numbers refuse it.

On 30 March 2026, Sansec documented a PolyShell mass exploitation wave that compromised 471 stores in a single hour. On 7 April 2026 it documented an SVG onload skimmer wave across 99 stores. Neither involved AI. Both used the oldest play in the book: find one vulnerability in a widely deployed platform and fire it at everyone at once. Against that, this campaign has 19 confirmed skimmer installations across 83 days.

Two panels. A seven day ruler shows access usually achieved inside day one against PCI DSS 11.6.1, which requires a payment page tamper check only once every seven days, leaving up to six further days of live checkout traffic. Below, four bars on one scale: a non AI PolyShell exploit hit 471 stores in one hour on 30 March 2026, a non AI SVG skimmer wave hit 99 stores, this campaign confirmed 19 installs across 83 days, and a dashed outline marks the 100 plus sites described only as associated.
Sansec figures from its own published research index, Gambit's counts kept in its own categories, PCI DSS v4.0.1 requirement 11.6.1

Read plainly: an ordinary mass exploit reached roughly twenty five times as many shops in one hour as this campaign confirmed in nearly three months. If scale of skimming is the measure, the AI campaign is a poor performer. It did not out-scale the old method and it does not appear to have tried.

What it did instead is the part worth losing sleep over. The operator deliberately filtered out the standard platforms. Mass exploitation only works where many shops share one codebase, which is why it never reaches the bespoke estate. Custom code has always been protected by the simple economics of nobody being willing to spend a week of skilled human attention on a mid sized retailer. That protection is what went away. Gambit's own cost review puts the mean at 25.46 US dollars across 101 completed scans, from 3.13 dollars for the cheapest target to 79.31 for the most expensive, with total model spend estimated between 12,000 and 18,000 dollars. Divide the upper and lower bounds by 617,938 records and the cards cost somewhere between 1.9 and 2.9 US cents each to obtain.

The models that said no, and the one that did not

One detail in the report deserves more attention than the coverage gave it. Hermes, the orchestrating harness, ran on Anthropic's opus-4.6, and Gambit states the reason in a parenthesis: the operator moved to it "after newer models refused its requests".

That is a safety measure working and being routed around, both recorded in the same sentence. It is also not the only routing. The operator wrote and loaded into Hermes a skill whose stated purpose was to remove Hermes's own content security filters, alongside a Chinese language system persona and 121 skills of which 78 were attack skills. The other two harnesses avoided the problem differently again: Strix ran through OpenRouter on GLM 5.2 and later DeepSeek v4 Pro, and Cairn ran on DeepSeek v4.1 Flash.

This analysis was researched with Claude, made by Anthropic.

What actually detects this, given where the skimmer runs

The standard framing says a skimmer runs in the customer's browser and never touches your server logs, so client side controls are all you have. Half of that is true and the half that is false is the more useful half.

It is true that the exfiltration is invisible to you. The shopper's browser posts card data straight to the attacker's host and nothing about that transaction transits your infrastructure. No web server log, no WAF, no egress filter of yours will ever see it.

It is false that the injection is invisible. Go through the eight methods Gambit documents and count how many left an artefact on infrastructure the merchant owns and could have been watching.

The eight injection methods described by Gambit, and where the change actually landed

MethodWhere the change landedIn the merchant estate?
Appended to a JavaScript file the site already serves, with the original timestamp restoredA file on the merchant's own web serverYes. Caught by content hashing, missed by anything watching modification times
A foreign script tag added to the checkout pageThe page template or its source on the merchant's serverYes. This is also the only one a strict Content Security Policy allowlist blocks outright
Written inside the site's existing Google tag block, padded with tab charactersThe page, between the real tag callsYes, though a source view hides it and an allowlisted tag origin passes CSP
S3 bucket poisoning using a stolen AWS access keyAn object in the merchant's own bucket behind its own CDNYes. Object versioning and CloudTrail see it; file integrity monitoring on hosts does not
Appended to product description columns through an admin podRows in the merchant's databaseYes, but file level integrity monitoring is blind to it
Added as a Kubernetes initContainer on the production front endThe merchant's own deployment manifestYes. Configuration drift detection against the declared state catches it
Server side page cache poisoningThe cached page model on the merchant's cache layerYes, but neither the source files nor the database change
A cron job checking file size every two minutes and re-appending after redeploysA crontab and a file in a JBoss log directory on the merchant's hostYes. Also the clearest signal in the entire list, because nothing legitimate lives there

Eight out of eight. Every single injection method in this campaign modified something the victim owned, hosted, deployed or configured. The skimmer is invisible once it is running, but it has to be put there, and putting it there is a change to your estate. That is where the detection budget belongs, and it is the one place that also covers the database path that took the 617,938 records.

Which reframes the browser side controls as what they are: a second net, useful, and much narrower than their reputation.

Content Security Policy. Its real limit here is structural rather than a matter of configuration quality. CSP controls where a script may be loaded from, not whether the script is malicious. The most common method in this campaign appended the loader to a jQuery or Bootstrap bundle the site already served from its own origin, so a policy of script-src 'self' permits it by definition. The Google tag variant runs from an origin you have allowlisted on purpose. The S3 poisoning loads from your own CDN host, which is certainly allowlisted. Of the eight methods, a strict CSP blocks one. The genuinely valuable directive is connect-src, which constrains where a script may send data to rather than where it came from, and which therefore bites even on a loader running from your own origin. Deploy it enforcing, not report only, and remember that a report only policy generates telemetry and blocks nothing.

Subresource Integrity. SRI applies only to elements that carry an integrity attribute, and the browser refuses to load the resource on a hash mismatch. Against the most common method here, appending to a file you serve, it is exactly the right control, because the hash changes the instant the file does. The catch is cultural: almost everyone applies SRI to third party CDN scripts and almost nobody applies it to first party bundles, which is the direction the attack actually came from. SRI is also blind to inline script and to script injected at runtime by createElement, which is what the loader in this campaign does once it is executing.

Client side monitoring. Synthetic checkout transactions driven from a real browser, plus an agent reporting every script the page loads, is the only control that sees the page as a shopper sees it. Two limits worth stating. Skimmers routinely decline to fire for scanner ranges, headless browsers and empty form fields, so a synthetic check that does not type into the card fields from a plausible network may see a clean page. And the cron job method means removing a skimmer is not the same as ending the incident: that one put itself back every two minutes.

PCI DSS 6.4.3 and 11.6.1, checked against the standard rather than the vendor summaries

These two requirements exist for exactly this attack, and both stopped being optional on 31 March 2025. The applicability note on each reads: "This requirement is a best practice until 31 March 2025, after which it will be required and must be fully considered during a PCI DSS assessment." The current version of the standard is still v4.0.1; the Council opened a request for comments on the next iteration between 3 June and 20 July 2026 and has announced neither a number nor a date.

What the two requirements say, verified against PCI SSC published text, and what they leave uncovered

RequirementWhat the standard actually requiresWhat it does not cover
6.4.3 Payment page scriptsEvery script loaded and executed in the consumer's browser must be authorised by some implemented method, have its integrity assured by some implemented method, and appear in an inventory with written justification for why it is necessary. It applies to scripts from your own environment as well as third and fourth partiesIt prescribes no technology. It does not reach stored card data, so it says nothing about the path that produced the 617,938 records
11.6.1 Change and tamper detectionA mechanism that alerts personnel to unauthorised modification of the payment page as received by the consumer browser, evaluating it at least once every seven days, or at a frequency set by a targeted risk analysis performed under requirement 12.3.1Between checks. The Council's own guidance notes that malicious modifications may persist undetected between runs and recommends frequent or real time monitoring where feasible

One change between versions is worth knowing if you are writing the control. In v4.0 the scope of 11.6.1 was "the HTTP headers and the contents of payment pages". In v4.0.1 the Council narrowed it to the "security-impacting HTTP headers and the script contents" of payment pages. That is a narrower obligation than many teams wrote their procedure against, and it is still wide enough to cover every skimmer method in this campaign, all of which end in script content on a payment page.

There is a second comfortable label in this area. Merchants using a fully hosted payment form in an iframe often read themselves as substantially out of scope. The surrounding checkout page is still yours, and an injected script on it can draw a convincing overlay across the iframe and collect the card itself. Sansec documented exactly that overlay technique in its April 2026 SVG wave. The iframe moves the form, it does not move the page around it.

Two days on, nobody official has said anything

Gambit published on 22 September. Two days later, checking the obvious places produces an unbroken run of nothing. No Visa Payment Fraud Disruption bulletin. No Mastercard or American Express statement. No PCI Security Standards Council notice, despite the Council publishing three other items that same month. No CISA advisory. No NCSC item. Nothing from UK Finance, the FCA or the ICO. The Shadowserver Foundation is thanked in Gambit's own acknowledgements for helping notify victims and take down infrastructure, and has published nothing about it. Overwatch Data, the fraud specialist Gambit partnered with to notify card issuers, has published nothing since April.

That is not a scandal, and it is worth being precise about why. Notification here is running through private channels that are designed not to produce public artefacts: researcher to victim, fraud specialist to card issuer, Shadowserver to national CERTs and network owners through its standing compromised website feed. The issuers holding those 617,938 cards are being told. The silence is procedural, not negligent.

Two things in the timing invite a wrong conclusion and should be resisted. The Council published an information supplement on Security Considerations for AI Systems on 15 September, and the NCSC published a blog on agentic defence on 21 September. Both predate the report, neither mentions skimming or attacker harnesses, and neither is a response to this.

What to do about it, in order

Take this with you

The order worth doing it in

  • Search your estate for the nine skimmer host domains and five IP addresses in Gambit's indicator list, in DNS logs, proxy logs, and the served content of every checkout page. This is a today task and it costs nothing.
  • Fetch your own checkout page the way a shopper does, from a residential network and a real browser, and enumerate every script it loads. Compare that list to what you believe it loads. This is requirement 6.4.3's inventory and most teams discover the gap here.
  • Switch any file integrity monitoring from modification time to content hashing. The attacker in this campaign restored original timestamps deliberately, and timestamp based monitoring would have reported nothing.
  • Extend integrity checking beyond files to the four places this campaign also used: CDN and object storage buckets, database content columns, Kubernetes deployment manifests, and the server side page cache. Four of the eight methods would be invisible to host file monitoring alone.
  • Apply Subresource Integrity to your first party checkout bundles, not only to third party CDN scripts, and regenerate the hashes in your build pipeline so a legitimate deploy does not break the page.
  • Add or tighten connect-src in your Content Security Policy and run it enforcing rather than report only. It is the directive that constrains where card data can be sent to, which is the step that actually harms your customers.
  • Set your 11.6.1 cadence deliberately. If you are relying on the seven day minimum, write down that you have accepted up to seven days of undetected card capture, and have someone senior sign that sentence.
  • Rehearse removal that survives reinstatement. Assume a repair mechanism exists, check for scheduled tasks in places nothing legitimate runs from, and verify the page again two hours after you clean it.
  • Inventory where you still hold card data at rest and what can decrypt it. The 617,938 records came out of stored columns and an encryption key retrievable from the same environment, and no payment page requirement touches that.
  • Test that your backups survive an attacker's cleanup, not just an attacker's encryption. At one victim here a table matching routine dropped 180 tables including the administrators' own backup tables.

The question that exposes the gap

The instinct after a story like this is to ask whether your controls would have stopped an AI agent. That is the wrong question, and the report answers it inconveniently anyway: the agents used no novel technique, wrote no novel malware, and were caught by ordinary means when a researcher got hold of an ordinary server. Nothing here required a new control category.

The better question is the one the economics forces. For years, a mid sized retailer with bespoke code was safe from individual attention not because its defences were good but because a week of skilled human effort cost more than the shop was worth. At twenty five dollars a target, that arithmetic is gone, and every organisation that was quietly relying on it has lost a control it never wrote down and never tested.

So: if someone spent a fortnight inside your checkout estate instead of an afternoon, what would you have seen, and on which system would you have seen it? If the honest answer is the weekly page check, you have already accepted the six days.

Sources

  1. PrimaryThe original interim report of 22 September 2026 by Eyal Sela, read in full: the country table of stolen cards, the three AI harnesses and their models, the evidence tiers, the eight skimmer injection methods, the database wipe skill, the cost figures and the indicator listGambit Securityaccessed 2026-09-24
  2. PrimaryPCI DSS v4.0 SAQ A-EP, the ungated Council document carrying the verbatim text of requirements 6.4.3 and 11.6.1 and the applicability note making both mandatory after 31 March 2025PCI Security Standards Councilaccessed 2026-09-24
  3. PrimaryThe Council's announcement of its March 2025 information supplement on payment page security and e-skimming, the source for the statement that PCI DSS does not mandate a specific script integrity mechanism and that CSP and SRI are guidance examples onlyPCI Security Standards Councilaccessed 2026-09-24
  4. PrimaryThe document library, checked to confirm v4.0.1 remains the current version of PCI DSS as at September 2026 and that no newer version has been publishedPCI Security Standards Councilaccessed 2026-09-24
  5. PrimarySansec's own research index, the source for the two non AI comparison figures: 471 stores compromised in one hour in the PolyShell wave of 30 March 2026, and 99 stores in the SVG onload skimmer wave of 7 April 2026Sansecaccessed 2026-09-24
  6. PrimaryThe NCSC blog of 21 September 2026 on agentic defence, checked and cited only to establish that it predates the Gambit report and is not a response to this campaignNational Cyber Security Centreaccessed 2026-09-24
  7. Reported byThe coverage of 23 September 2026 whose headline welds the card count to the site count, used to establish how the research was reported rather than as a source of factBleepingComputeraccessed 2026-09-24
  8. Reported byCorroborating coverage confirming the 19 confirmed skimmer deployments against 27 ordered, and the 100 plus further sites described as linked rather than confirmedCyberInsideraccessed 2026-09-24
  9. Reported byReference documentation for Subresource Integrity, used to establish that it applies only to elements carrying an integrity attribute and is blind to inline and runtime injected scriptMDN Web Docsaccessed 2026-09-24
  10. Reported byReference documentation for Content Security Policy, used to establish what the self source expression permits, that CSP does not distinguish malicious from legitimate script served from an allowed origin, and that report only mode blocks nothingMDN Web Docsaccessed 2026-09-24

Share this briefing

Know someone who owns this problem? Send it to them.

Related briefings

The briefing, in your inbox

Practitioner analysis of cyber and AI security news. No vendor noise.

One email per briefing. Unsubscribe any time.