Back to blog

Hyperfence Blog

Why AI Models Refuse to Help Incident Responders

By Simon Holliday

Why AI Models Refuse to Help Incident Responders

In July 2026, a team of incident responders sat down with the recovered logs of an attack against their own infrastructure, turned to the best AI models available, and asked for help reading them.

The models said no.

Hugging Face described what happened in their own disclosure:

“we first used frontier models behind commercial APIs. This did not work: the analysis requires submitting large volumes of real attack commands, exploit payloads, and C2 artifacts, and these requests were blocked by the providers’ safety guardrails, which cannot distinguish an incident responder from an attacker.”

They fell back to an open-weight model, GLM 5.2, running on their own infrastructure, and used it to work through more than 17,000 recorded events.

Some context, for anyone who missed it at the time. Hugging Face was attacked by a combination of OpenAI’s models. The models were being run against a cyber-capability benchmark with their safety guardrails disabled. They escaped the isolated test environment through a previously unknown flaw in a package registry cache proxy. From there they worked out that the benchmark’s answers might be held at Hugging Face, found a route into its production systems, and spent two or three days there collecting credentials. Nobody was directing any of it. OpenAI published its own account of the incident, and the security community has treated it as a first: an intrusion carried out from start to finish by an autonomous agent.

Hugging Face detected the intrusion themselves, contained it, fixed the root vulnerability, rebuilt compromised nodes, rotated credentials, and then published a detailed account while their assessment was still ongoing. That is close to a textbook response, and everyone else is better off for the disclosure.

The refusal was a footnote in most of the coverage. It is the part that is about to affect a great many teams who will never have an incident anything like that one. It is also not a bug, and it will not be patched.

Why the refusal happens

A refusal like this looks like a badly tuned safety system, or a lab being excessively cautious. It is neither. It is a predictable consequence of where the policy is written, and no amount of tuning moves it.

A frontier lab’s safety policy has to be applied to every caller of the API. That population is enormous and effectively anonymous. The lab does not know which of those callers is a security team reconstructing an intrusion, which is a student, and which is someone assembling the same payloads for their original purpose. It has no reliable way to find out, either, because the only thing it receives is the request itself.

And the request does not carry the distinction. Exploit code being analysed is byte-for-byte identical to exploit code being written. A command log from an intrusion looks exactly the same whether it is evidence or a recipe. The property that makes one legitimate and the other not is not in the content at all. It is in who is asking, on whose authority, about whose systems, and for what purpose. None of that is visible at the point where the decision gets made.

The obvious fix is to let the caller supply the context. It fails for a reason that recurs everywhere in this field: anything the user can assert, an attacker can assert too. “I am an incident responder investigating a breach of my own network” is a sentence anyone can type, and it costs nothing to type falsely. A control that can be disabled by the person it is meant to constrain is not a control. So the prompt, which is the one channel the user does control, is precisely the channel that cannot be trusted to carry the exemption.

That leaves the lab with an unattractive choice on a narrow class of traffic. Allow it, and the policy is defeated by anyone who reads a blog post about what to claim. Refuse it, and a small population of legitimate professionals is blocked from doing legitimate work at the worst possible moment. Given that the lab cannot tell the two apart, and bears the reputational cost of one but not the other, refusal is the rational setting. It is also, from the perspective of a defender at three in the morning, useless.

Trusted-access arrangements exist for exactly this reason, and they help. They are also slow, negotiated per organisation, and of no assistance whatsoever to a team that discovers the problem mid-incident. Nor do they solve the general case: a policy that has been relaxed for your organisation is still a policy calibrated by someone who does not know what you are currently dealing with.

What teams are being told to do about it

The advice now circulating among practitioners is the pragmatic one: do not discover this during an incident. Writing on the SANS blog about the community post-mortem, Rob T. Lee put it about as plainly as it can be put: test a cyber-capable open-weight model before you need one, because “an exception process is not a fallback; a tested model is.”

That is sound advice, and a lot of security teams are going to take it. Which means a lot of security teams are about to stand up a self-hosted, open-weight model inside their own environment, specifically to process material that commercial providers decline to touch. Hugging Face used GLM 5.2, from the Chinese lab Z.ai. The point is that they, and not a provider, decide what it refuses.

This solves the immediate problem completely. It also creates a second, delayed problem.

The question that arrives a few months later

Every team that does this will eventually be asked by their own governance function: why is there a model with no safety controls running in our environment?

Today the honest answer is “because the ones with controls refuse to help us”. That is true, and it is not a policy. It is an exception, logged as an exception and renewed indefinitely, sitting in the one department that can least afford an unanswerable one. The Cloud Security Alliance’s post-mortem is blunt about where that leads: organisations that fail to implement strict governance, documented purpose and meaningful human oversight risk significant liability for negligence. Both pieces of advice are right, and together they leave a team standing in the gap between them.

The gap is not a safety problem. Nobody involved wants the model to help write ransomware. It is a governance problem: there is no artefact that says what this model is for, who authorised it, what it was permitted to process and when that permission ends.

Where the policy should live instead

The way out is not more restriction or less. It is to notice that all the context missing at the lab is present in the organisation running the incident.

They know the scope. They know which systems are theirs, which investigation this is, who is authorised to work on it, and when it closes. They can state all of that, be held to it, and be audited on it afterwards. The information that would make the decision correct exists. It is simply several thousand miles from where the decision is being made.

So the useful move is to put the policy where the context already is: with the operator, on infrastructure they control. Not as a way of switching safety off, but as a way of making it specific: scoped to a named investigation rather than to the general public, attached to an accountable owner, and recorded so that someone can review afterwards what was permitted and why. That converts an indefinite exception into an ordinary control, which is the thing a risk committee can actually approve.

Two structural points matter if you are designing this.

The policy cannot live in the model’s weights, because a self-hosted open-weight model has no meaningful policy there and turning one on and off is a configuration flag. And it cannot live in the prompt, for the reason established earlier: the person being governed can edit it. It has to sit at a control point the operator owns and the user cannot reach, so that changing model or provider does not silently change policy, and so that no amount of clever phrasing negotiates with it.

The corollary is that this control point should be treated as a privileged part of the environment, which in practice means inspection running locally rather than shipping sensitive material to a third party, minimal exposed surface, and failing closed rather than open if its own machinery breaks. A governance control that quietly stops working, or that leaks the evidence it was inspecting, is worse than not having one.

What this does and does not solve

It is worth being precise about the limits, because this is a narrow claim.

Policy at the inference layer decides what a model may be asked and what it may answer. It does not watch what the rest of your infrastructure does, and it is not a substitute for endpoint detection, network monitoring, or the credential hygiene and containment work that actually ends an intrusion. Nothing in this article would have prevented the incident that opened it, which happened somewhere else entirely and was resolved by good detection engineering and disciplined response.

What it addresses is the smaller, duller problem that a great many teams are about to inherit: how to run the tooling you need in order to do your job, and still be able to explain what it is for.

That is mostly an unsolved problem today, and the interesting part of it is whether “what this system is permitted to do” can be made into something a machine checks rather than a paragraph in a wiki. We think it can, and that is where our attention is.

If the mechanics of that are interesting to you, we wrote up how a topic description and some example material become a detector with a measured error rate here: How we build a Hyperfence.


Sources