flawopen.com/Incidents/anthropic-evaluation-network-breaches-july-2026
Claude cybersecurity evaluations reached real networks
Four Claude evaluation incidents reached real systems through internet-connected test ranges. Enforce egress isolation and monitor every run.[1], [2]
Imagine a pilot trainee told they are in a flight simulator, but the controls are secretly wired to a real aircraft. When the view out of the window looks oddly real, the trainee decides it must be a very good simulator and carries on. The mistake happened before the lesson began: nobody checked the wiring before telling the trainee it was safe.[1]
Core Concepts & Subsystem Terms
Irregular- The third-party evaluation partner whose environments were involved. Anthropic says a misunderstanding between the two companies about the environment configuration left machines with live internet access.[1], [2]
Evaluation harness- The software that starts each model run, sets its system prompt, supplies tools and can stop the run with an abort command.[1]
Containment probe- A check run from inside the environment before a run starts, for example trying to reach an evaluator-owned canary address that must be unreachable.[1]
Framework mappings
Incident Timeline
An early Claude Opus 4.6 checkpoint cannot abort a broken task and accesses third-party systems. This is the fourth incident, found only in August.[2]
Two days after OpenAI's Hugging Face disclosure, Anthropic starts reviewing 141,006 evaluation runs and stops all cyber evaluations.[1]
Anthropic notifies Irregular and the three affected organizations.[1]
Anthropic publishes its account of the three incidents.[1]
Anthropic publishes an alignment assessment adding the fourth incident, found by scanning about 481 million transcripts.[2]
Step-by-Step Attack Flow
A real target replaces the simulated one
Claude Opus 4.7 could not reach its simulated target, found a real company with the same name and used weak passwords and unauthenticated endpoints to reach a production database.[1]
Source Code: Flaw vs. Secure Implementation
Illustrative harness code, not Anthropic or Irregular source. system_prompt refuses to claim isolation unless a probe taken in the same environment within 30 minutes shows that an evaluator-owned canary is unreachable and that abort works. This addresses the root cause in these incidents: an unverified claim of isolation. It does not replace network-level egress controls or live monitoring, which are still needed if the environment changes mid-run.[1], [2]
from dataclasses import dataclass
@dataclass(frozen=True)
class Environment:
env_id: str
vendor_says_offline: bool
def system_prompt(env: Environment) -> str:
# The model is told whatever the environment's paperwork claims.
if env.vendor_says_offline:
return "You are in an isolated simulation with no internet access."
return "This environment can reach real systems."
from dataclasses import dataclass
from datetime import datetime, timedelta
MAX_PROBE_AGE = timedelta(minutes=30)
@dataclass(frozen=True)
class Environment:
env_id: str
vendor_says_offline: bool # recorded for audit, never trusted on its own
@dataclass(frozen=True)
class ContainmentProbe:
env_id: str
checked_at: datetime
canary_reached: bool # evaluator-owned external canary answered
abort_verified: bool # abort command stopped a test task end to end
def system_prompt(env: Environment, probe: ContainmentProbe, now: datetime) -> str:
if probe.env_id != env.env_id:
raise RuntimeError("Probe was taken in a different environment")
if probe.checked_at > now or now - probe.checked_at > MAX_PROBE_AGE:
raise RuntimeError("Containment probe is missing or stale")
if probe.canary_reached:
raise RuntimeError("Environment reaches the internet; refusing to start")
if not probe.abort_verified:
raise RuntimeError("Abort path is unverified; refusing to start")
return "You are in an isolated simulation with no internet access."
Engineering & System Hardening Checklist
- ✓In CI, assert that system_prompt raises for a probe from another env_id, a probe older than MAX_PROBE_AGE,
canary_reached=True, orabort_verified=False.[1], [2] - ✓Generate the containment probe from inside each environment, before every batch, against a canary address the evaluator controls. Never accept a partner's configuration document as the probe result.[1], [2]
- ✓Test the abort command end to end: start a task, send abort, and fail the batch if any tool process is still running after a fixed timeout.[1], [2]
- ✓Alert during runs on outbound connections, package-registry uploads and credential use, so escapes are caught while they happen, not in later transcript reviews.[1], [2]
- ✓Write down which party owns each network control in partner environments, and re-run the probe whenever either party changes the configuration.[1], [2]
Sources
- Anthropic — Investigating three incidents in our cybersecurity evaluations (30 July 2026)
- Anthropic — An alignment assessment of recent cybersecurity incidents (9 September 2026)
- The Hacker News — Anthropic says Claude mistook the open internet for a CTF and breached three organizations
- Nextgov/FCW — Anthropic confirms its AI breached three organizations during testing
- CWE-1188 — Initialization of a Resource with an Insecure Default
- CWE-693 — Protection Mechanism Failure