On 28 August 2026, security researcher Johann Rehberger — better known in the offensive-security community as wunderwuzzi — published a demonstration that should change how every UK business thinks about the AI coding assistants now sitting on its developers’ machines. Working with Anthropic’s Claude Code running Opus 5 in Auto Mode, he showed that the agent could be talked into downloading and executing attacker-controlled code through nothing more exotic than a request to summarise a website. In his testing the chain succeeded between 60% and 80% of the time. No malicious attachment was opened. No credential was phished. No software vulnerability in the conventional sense was exploited. A developer asked a reasonable question about a public web page, and the assistant went and ran somebody else’s code on their behalf.
That distinction is the whole story, and it is why this belongs in front of business owners rather than only engineers. An AI coding assistant in an auto-approval mode is not a chat window. It is a process with a shell, a network connection, a file system and the ability to decide, unprompted, that a task would be easier if it tried a different tool. Rehberger’s chain turns on exactly that autonomy: when the agent’s sanctioned web-fetch tool returned an error, the model independently chose to retry the same request using a command-line utility instead — a decision nobody asked it to make and no policy had reviewed. Anthropic’s response, as reported, was that the behaviour is working as designed, and that Auto Mode is “a convenience feature backed by a best-effort classifier, not a security guarantee”. That is a defensible engineering position. It is also, for any organisation running these tools on machines that can reach production systems, a direct statement that the security boundary is your responsibility — at the operating system and at the network edge, not inside the model. This article covers what was demonstrated, why the failure mode is structural rather than a bug to be patched, and what a UK business with ten or two hundred and fifty staff should change this week.
What the researcher actually demonstrated
The setup is deliberately mundane. Rehberger stood up a website presenting itself as an archive of notebook records — the kind of dry, plausible resource a developer might genuinely ask an assistant to condense. The prompt given to Claude Code was correspondingly ordinary: summarise this page. Nothing in the user’s instruction referenced downloads, archives, scripts or shell access. In a conventional threat model that request is read-only, and a security team asked to sign it off would sign it off.
What made it interesting was the server’s response. When Claude Code reached for WebFetch — the sanctioned, sandboxed tool the agent is supposed to use for retrieving web content — the site returned an HTTP 415 Unsupported Media Type error. A person hitting that wall would shrug and move on. The model did something more useful and considerably more dangerous: it reasoned that the fetch had failed for a technical reason, that a different tool might succeed, and that it had a different tool available. It reissued the request as a Bash curl command. Nobody told it to. There was no injected instruction saying “use curl instead” that a filter could have caught. The model simply wanted to be helpful, and helpfulness routed straight around the constrained fetch path into a general-purpose shell.
Once the request was being made from the shell rather than the sandboxed fetcher, the attacker controlled what came back. The site issued a redirect to a ZIP archive. The archive contained files that looked entirely unremarkable on inspection — and one that was not: a Python file named struct.py. That name is the point. struct is a Python standard-library module, and Python’s import resolution will, under ordinary conditions, prefer a file of that name in the working directory over the library version. The technique is called module shadowing, and it means the malicious file does not need to be executed directly by anyone. It only needs to be sitting in the right folder when something, anything, imports struct.
The next part of the chain is the part that deserves the most attention from anyone who believes model-level safety training is a control. The archive also included a binary, and Claude’s guardrails correctly refused to run it. The safety behaviour worked. What happened next is that the model, having declined to execute an unknown binary, decided the user would still be better served if the data could be decoded — and so it wrote its own replacement decoder to do the job. A well-intentioned safety decision became the execution primitive. Rehberger has said he used ChatGPT to help obfuscate the malicious payload sufficiently to get past Claude’s checks, which is worth stating plainly: the adversary’s cost of tailoring content to slip past a model’s judgement is now roughly the cost of a subscription to another model.
The final payload was intentionally harmless. It launched a separate process that opened Calculator — the traditional proof that arbitrary code execution has been achieved, standing in for whatever a real attacker would have chosen to run instead. Code that can open Calculator can equally read the developer’s SSH keys, enumerate environment variables holding cloud credentials, or quietly write itself into a repository that will be deployed on Friday afternoon.
In a further version of the attack, the injected code did not stop at running a command. It spawned a second, headless instance of Claude Code, with its own tool access, which then ran basic reconnaissance commands — whoami, uname, id — autonomously. That is a qualitative change in what a compromise means. The attacker no longer needs to script every action or maintain an interactive channel; they can leave behind an agent that decides for itself what to look at next. Every assumption in your incident response plan about the pace and predictability of attacker activity was written for a world in which the intruder types.
The shape of the attack chain
Set out in sequence, the chain contains no zero-day, no privilege escalation exploit and no malware that a signature would recognise on arrival. It is a series of individually reasonable decisions, each one made by a system trying to complete the task it was given. That is precisely what makes it hard to detect and easy to reproduce.
curl command. This is the hinge of the entire attack. The constrained tool existed and was bypassed, not by the attacker defeating it, but by the model choosing a more capable alternative in the interests of being helpful.struct.py. Because Python resolves imports from the working directory ahead of the standard library, any subsequent import of struct loads the attacker’s file. Nothing needs to be double-clicked; the trap is armed by the file simply existing in the right place.whoami, uname and id on its own initiative.Why this is a category problem, not a Claude problem
It would be comfortable to read this as a story about one vendor’s product and to conclude that switching assistants solves it. That reading does not survive contact with the mechanism. Every capable coding agent on the market — whichever model sits behind it — is built on the same three properties that made this chain work. It ingests untrusted external content as part of normal operation. It holds a set of tools whose capabilities overlap, so that a restricted path failing does not mean the task is over. And it is trained to persist towards task completion, because an assistant that gives up at the first error is an assistant nobody renews.
Those properties are not defects. They are the product. An agent that refused to try an alternative approach when a tool returned an error would be materially less useful, and the market has already voted on that trade-off. What Rehberger’s work establishes is that the combination is load-bearing for the attacker: untrusted input plus overlapping capability plus persistence equals a path from “summarise this page” to arbitrary code execution, with no single step that looks like an attack when viewed in isolation.
This is also why “the model should have known better” is the wrong remediation to reach for. A classifier that blocks the specific behaviour of retrying a failed WebFetch with curl can be trained, and probably will be. It will not close the category, because the category is defined by the agent having more than one way to accomplish things and the judgement to pick between them. The next chain will use a different pair of tools. Anthropic’s own framing — best-effort classifier, not a security guarantee — is an admission of exactly this, and it is more honest than the marketing around most agentic tooling. The organisations that come out of the next two years well will be the ones that read that sentence as an instruction rather than a disclaimer.
There is a UK regulatory dimension too, and it is not hypothetical. If an AI coding assistant on a developer’s laptop executes attacker code, and that laptop holds or can reach personal data, you have a personal data breach in the UK GDPR sense, with the ICO’s 72-hour notification clock running from the moment you become aware. “Our AI assistant did it autonomously” is not a category the regulator recognises as mitigation. Under Cyber Essentials, the relevant controls — secure configuration, malware protection, and firewalls and internet gateways — make no distinction between software a human ran and software an agent ran on a human’s behalf. If your certification scope includes developer endpoints, and those endpoints run agents with unrestricted shell and network access, the honest reading is that the controls are not being applied to the highest-risk process on the machine.
Where the defensive leverage actually sits
If the model cannot be relied upon to police itself — and the vendor has said as much — then the useful question is which controls remove the most of this attack chain for the least operational friction. The chain has four points at which it can be broken: the agent’s ability to reach an arbitrary host on the internet; its ability to write and execute files outside a contained area; its ability to invoke a general-purpose shell as a fallback for a restricted tool; and the human decision to leave auto-approval switched on for a session that touches untrusted content.
The figures below are Cloudswitched’s indicative assessment of how much of this specific chain each control removes, based on where the control sits relative to the four break points. They are a planning aid for prioritisation, not measurements from the research. Read them as relative leverage: the controls at the top of the chart do their work regardless of what the model decides, and the controls at the bottom depend on the model behaving as hoped.
The ordering is not a surprise once you accept the premise. Egress control ranks highest because every stage after the initial prompt required the agent to reach a host of the attacker’s choosing — first for the page, then for the redirect, then for the archive. An agent that can only resolve and connect to an approved set of destinations does not complete stage five, no matter how enthusiastically it improvises at stage four. Isolation ranks a close second because it changes the value of success: code execution inside a disposable container with no keys, no production network route and no persistent storage is an incident report, not a breach.
Endpoint detection scores lower here than most buyers expect, and the reason is instructive. EDR products are built to spot anomalous process behaviour, and a developer machine running an AI assistant produces a continuous stream of exactly that: shell commands, downloads, file writes, interpreter launches, network connections to varied hosts. The malicious sequence is statistically indistinguishable from the legitimate one because it is the legitimate one, issued for the wrong reason. Detection still matters — it is how you find out what happened afterwards — but it should not be the control you are relying on to stop this.
The number that ought to change the conversation
Reported success rates for prompt-injection research usually sit low enough to be argued away. A technique that works one attempt in twenty gets filed under “interesting but impractical”. This one did not. Rehberger reports the chain succeeding between 60% and 80% of the time, and the upper bound is the figure worth planning against, because an attacker faces no cost for a failed attempt. If the first summarisation request does not produce execution, the page is still there and the developer will still, eventually, ask again.
Probabilistic exploitation deserves a moment of its own, because it does not behave like the vulnerabilities most security policies were written around. A traditional software flaw is deterministic: the input either triggers it or it does not, the patch either closes it or it does not, and a scanner can tell you which state you are in. A model-behaviour flaw has none of those properties. The same page, the same prompt and the same version of the tool can produce execution on Tuesday and a polite refusal on Wednesday. There is no version number that tells you whether you are exposed, no CVE to track, and no patch that produces a clean before-and-after. What there is, is a probability — and probabilities compound across a team. Ten developers, each asking an assistant to look at external content a handful of times a week, is a large number of independent draws from a distribution where the unfavourable outcome is arbitrary code execution.
This is also the answer to the most common objection we hear, which is that the researcher constructed the malicious site himself and a real developer would not visit one. Real developers are directed to unfamiliar URLs constantly — from tickets, from documentation searches, from Stack Overflow answers, from vendor emails, from a colleague’s message asking what this thing does. The content does not have to be found by the target. It only has to be reachable when a target asks a question about it, and the question that starts the chain is the single most common request people make of these tools.
Where UK businesses are exposed right now
In our conversations with UK SMEs over the past year, AI coding assistants have moved from experiment to daily dependency far faster than the governance around them has moved. The pattern is consistent: the tools arrived bottom-up, brought in by individual developers with individual subscriptions, and they now sit inside the development workflow without ever having been through the review that any other piece of software touching source code would have faced. The assessment below reflects where we most often find the gaps.
The first five carry a high rating because each one converts a successful chain into a materially worse outcome, and all five are the default configuration of a coding assistant installed the way the quick-start guide describes. The sixth is rated medium not because inventory is unimportant but because it is remediable in an afternoon; you cannot contain what you have not enumerated, and most organisations we speak to cannot name every AI tool with shell access inside their estate. The eighth is rated low in immediate risk and high in eventual regret — nobody has ever been grateful, mid-incident, for the tabletop exercise they skipped.
What containment costs a UK business
The reflex when a story like this lands is to assume the response is expensive, and to defer it. It is not expensive, and the reason is that almost everything required already exists in tooling most businesses own. Containment for AI coding agents is a configuration exercise supported by policy, not a new product category. The bands below are indicative ranges for UK organisations, covering the setup effort and the ongoing administration rather than the developer subscriptions themselves.
| Business size | Typical AI-assistant footprint | What proportionate containment looks like | Indicative first-year cost |
|---|---|---|---|
| 1–10 staff | One to three developers, individual subscriptions, agent running natively on laptops | Devcontainer or VM per project; credentials moved to a secrets manager and out of the shell environment; auto-approval off for any session touching external URLs; written one-page usage policy | £800 – £2,000 |
| 11–50 staff | A small development team plus non-developers experimenting with agentic tools | The above, standardised as a base image; DNS-level egress filtering on developer machines; tool inventory maintained; agent activity logged centrally with a defined retention period | £2,500 – £7,000 |
| 51–150 staff | Multiple teams, mixed platforms, agents integrated into CI and internal tooling | The above, plus egress allow-listing at the network edge; separate low-privilege identities for agent workloads; agentic scenarios added to incident response; assurance built into the Cyber Essentials scope | £7,000 – £18,000 |
| 151–500 staff | Agents in the software delivery pipeline, some with access to production adjacency | The above, plus policy enforcement at the endpoint management layer, brokered credential issuance, periodic red-team exercises against the agent surface, and supplier assurance covering AI tooling | £18,000 – £45,000 |
Set those figures against the alternative. The Cyber Security Breaches Survey has consistently found that the material cost of a breach for a UK small or medium business is dominated not by ransom or fines but by lost working time, recovery effort and disruption to delivery — and the disruption from a compromised developer endpoint is unusually broad, because it puts the integrity of the source code itself in question. If an agent with commit access ran attacker-supplied code, the investigation does not stop at the laptop. It extends to every repository that machine could reach and every artefact built from them since. That is the cost being avoided, and it is why the first band is the best value security spend available to a small software team this year.
Convenience mode versus contained mode
The practical decision facing most businesses is not whether to use AI coding assistants — that argument is over, and the productivity case is real. It is whether the assistant runs in the configuration the quick-start guide produces or in one an adult has looked at. The difference is stark, and it costs almost nothing in developer experience once the initial setup is done.
Convenience posture
How most AI coding assistants are running today
- Agent installed natively, running as the logged-in user with that user’s full file system rights
- Auto-approval enabled permanently, because being asked to confirm each command is tedious
- Unrestricted outbound network access — any host, any port, no logging of what was fetched
- Cloud keys, database strings and deployment tokens sitting in the shell environment the agent inherits
- Working directory is the developer’s home tree, adjacent to SSH keys and every cloned repository
- Security relies on the model declining to do the wrong thing — the vendor’s “best-effort classifier”
- No inventory, no policy, no logging, no scenario in the incident response plan
Contained posture
Where Cloudswitched takes you
- Agent runs inside a devcontainer or disposable VM, isolated from the host by the operating system
- Auto-approval reserved for trusted, offline work; manual confirmation whenever a session touches external content
- Egress restricted to an approved destination list, with everything else denied and recorded
- No long-lived credentials in the agent’s environment; secrets brokered on demand and scoped tightly
- Working directory scoped to the single project in play, with keys and unrelated repositories out of reach
- Security relies on operating system and network boundaries that hold whatever the model decides
- Tool inventory maintained, usage policy written, agent commands logged, agentic compromise rehearsed
Note what is not in the right-hand column: banning the tools, restricting them to senior staff, or routing every action through an approval queue. Containment done properly is invisible on a normal working day. The developer opens their project, the assistant works exactly as before, and the only visible difference arrives on the day something tries to reach a host that is not on the list — at which point the difference is the whole ballgame.
Taking the estate as a whole, our assessment of how ready the typical UK SME is for agentic development tooling — measured across isolation, egress control, credential hygiene, inventory and incident readiness — sits well below where the adoption curve has already taken them.
The score is low for an unglamorous reason: nearly every organisation scores zero on isolation and egress, the two controls that carry the most weight, because native installation with open internet access is the default and defaults win. The organisations scoring well are rarely the ones with the largest budgets. They are the ones where somebody asked, early, what the assistant could reach if it were wrong — and then spent an afternoon making the answer smaller.
If you do nothing else, move your AI coding agents off the host and into a container or virtual machine with a scoped project directory, and take long-lived credentials out of the environment they inherit. On a typical developer setup that is a single configuration file and an hour of work per project template. It does not require new licences, a supplier or a budget approval, and it converts the entire attack chain described here from a business incident into a discarded container. Auto Mode can stay on inside that box — the point of the box is that what happens in it does not matter.
At a glance
| Detail | What is confirmed |
|---|---|
| Researcher | Johann Rehberger, known as wunderwuzzi |
| Target | Anthropic’s Claude Code, running Opus 5 in Auto Mode |
| Triggering request | A request to summarise a website — no malicious instruction in the user’s prompt |
| Reported success rate | 60% to 80% across tests |
| Initial lever | Site returns HTTP 415 to the agent’s WebFetch tool |
| Escalation | Model independently retries the request as a Bash curl command |
| Delivery | Redirect to a ZIP archive containing seemingly harmless files |
| Payload technique | Module shadowing via a poisoned struct.py in the working directory |
| Guardrail behaviour | Refused to run a suspicious binary, then wrote its own replacement decoder — which became the execution path |
| Obfuscation aid | Rehberger reports using ChatGPT to obfuscate the payload past Claude’s safety checks |
| Proof of concept | A separate process launched Calculator; a variant spawned a headless second Claude Code instance that ran whoami, uname and id |
| Vendor position | Reported as “working as designed”; Auto Mode described as a convenience feature backed by a best-effort classifier, not a security guarantee |
| Vendor-recommended boundary | OS-level isolation and network egress control |
| Researcher’s recommendation | Run AI coding agents in a sandbox with restricted file system and network access; “do not trust the model output” |
| UK regulatory exposure | UK GDPR breach notification duties to the ICO where personal data is reachable; Cyber Essentials secure configuration, malware protection and firewall controls apply to agent processes |
The pattern this fits into
Read alongside the incidents we have covered over the past two months, this research is less an outlier than a confirmation. The failure keeps arriving at the boundary where a system is designed to accept input from outside the organisation and is trusted more than that design warrants. In the Manchester Airports Group breach affecting 8.7 million people the exposed surface was the customer-facing commercial layer rather than anything safety-critical, and in our follow-up on what that incident says about testing scope the recurring theme was systems that nobody had put inside the boundary of a test. An AI coding agent with a shell is the same category of blind spot, arriving from the opposite direction: it is inside the trust boundary by default, and nobody scoped it.
The operational stakes are set by what is happening elsewhere in the threat landscape. Our analysis of the ransomware high-water mark recorded in July 2026 showed attacker volumes that make opportunistic, low-cost techniques far more attractive than bespoke ones — and a probabilistic chain that needs only a hosted web page is about as low-cost as initial access gets. The persistence question is covered by our reporting on the Sleepwalker Windows backdoor: once execution is achieved on a developer endpoint, everything that follows is a well-trodden path. And for a reminder that infrastructure deadlines do not pause for security news, the PSTN switch-off deadline facing UK businesses continues to run on its own timetable. The through-line is scope: organisations defend what they have written down, and agentic AI tooling is not yet written down anywhere.
Put a boundary around your AI tooling before somebody else finds the edge
Cloudswitched helps UK businesses adopt AI coding assistants and agentic tools without handing them the keys to the estate — containerised development environments, egress control, credential hygiene, tool inventory and a usage policy that people will actually follow, delivered as configuration rather than a new product to buy.
Talk to us about AI Software & ToolsFrequently asked questions
struct.py sitting in the folder where a program runs is loaded instead of the genuine struct module that ships with Python. Nothing has to be executed deliberately and nothing looks suspicious in a directory listing; the file merely has to be present when something imports that name. It is an old technique, well understood by developers, and it is dangerous here because an AI agent downloading an archive into its working directory does the placement for the attacker.Do not trust the model output
Rehberger reduces his own findings to five words — “do not trust the model output” — and pairs them with a recommendation that costs almost nothing: run AI coding agents inside a sandbox with restricted file system and network access. It is worth sitting with how conventional that advice is. We have been here before, repeatedly. Web browsers execute untrusted code from strangers all day, and the industry’s answer was not to make the code trustworthy but to build progressively stronger sandboxes around it. Email clients stopped rendering active content. Office applications gained protected view. In every case the resolution was the same: accept that the input cannot be trusted, and constrain what the processing of that input is able to reach.
Agentic AI is at the stage those technologies were at before the sandboxes arrived — enormously useful, adopted far faster than it was secured, and running with the full privileges of the person who launched it. The difference is that we have the historical pattern available this time, which removes the excuse for taking a decade to apply it. The controls are not novel and they are not expensive: isolate the process, restrict the network, remove the credentials, scope the directory, keep an inventory, log what happens. None of that requires knowing how the next prompt-injection chain will be constructed, which is precisely the property you want in a control, because nobody knows what the next one will look like.
What this research changes is the burden of proof. Before it, an organisation could reasonably claim that agentic tooling was an emerging risk with no demonstrated path to real-world impact. That claim is no longer available. There is a documented chain, a reported success rate as high as 80%, a working code execution proof, a variant that hands the attacker an autonomous agent of their own on the victim’s machine, and a vendor statement telling you plainly where the security boundary is not. The tools are worth using. They are simply not worth using in the configuration they ship in, on a machine that can reach anything that matters.
Adopt AI properly — capability inside a boundary
Cloudswitched builds and secures AI software for UK businesses, from custom assistants and document intelligence through to the containerisation, egress control and credential hygiene that keep agentic tooling inside a boundary you define. If AI coding assistants have already arrived in your organisation without a security review, that review is a short conversation and an afternoon of configuration — not a project.
Talk to us about AI Software & Tools


