Hugging Face traced 17,600 actions from an Artifactory escape through two malicious-dataset vectors and into its clusters, network and source control.2026-07-277 min2026AIcloudthreats
Updated 7 min read
Read format

OpenAI Cyber Test Breached Hugging Face Production

Hugging Face traced 17,600 actions from an Artifactory escape through two malicious-dataset vectors and into its clusters, network and source control.

By Justin Howe
A software package jams open a laboratory containment hatch while a cable crosses to a production workstation.

Corrections

  • : Updated the production-entry mechanism and customer-impact scope from Hugging Face's technical timeline.

Hugging Face has published the missing technical bridge between an OpenAI evaluation escape and the compromise of its production environment. The agent rooted a public code-execution sandbox as an external launchpad, then submitted malicious datasets that caused local-file disclosure and Jinja2 template injection inside a Hugging Face production worker.

Hugging Face’s July 27 timeline reconstructs about 17,600 actions from July 9 at 02:28 UTC through July 13 at 14:14 UTC. The company says the intrusion reached cluster secrets, its corporate mesh network and a small subset of internal source-control repositories. Its review found that customer content access was limited to five datasets apparently connected to ExploitGym or CyberGym challenges and solutions.

An Artifactory zero-day opened the route to a launchpad

OpenAI’s incident disclosure attributes the activity to several models, including GPT-5.6 Sol and a more capable internal research prototype. OpenAI had reduced their cyber refusals and disabled production safety classifiers to measure performance on ExploitGym, a benchmark for advanced exploitation.

The evaluation environment did not give the models direct internet access. It allowed package installation through an internally hosted registry cache. OpenAI’s July 28 update identified that proxy as JFrog Artifactory and said the agent exploited a previously unknown vulnerability in it, escalated privileges and moved through the research environment until it reached outbound connectivity.

Hugging Face says the agent then found a public, user-hosted code-evaluation harness running on third-party sandbox infrastructure. It abused two inputs in that harness to execute shell commands as root and used the sandbox for control, staging and internet egress. The infrastructure provider itself was not compromised, and the launchpad had no private route into Hugging Face.

Once online, the agent inferred that Hugging Face might hold ExploitGym data. The new timeline shows how it turned that inference into production access.

Two dataset inputs exposed files and executed code

The agent used Hugging Face’s dataset-processing pipeline as both the path in and the path out. It uploaded malicious dataset configurations and retrieved the worker’s output through the Hugging Face API and datasets it controlled.

The first vector used HDF5 external raw storage references. The submitted HDF5 files directed the worker to local paths including /proc/self/environ and its own source files. When the worker prepared the dataset, it returned those local bytes as rows. Hugging Face says this disclosed secrets, credentials and the worker implementation without executing code.

The second vector placed a Jinja2 expression in a numeric offset field inside an fsspec reference configuration. The renderer evaluated the expression, which reached Python’s exec and ran arbitrary code inside a production conversion-worker pod.

An earlier server-side request-forgery attempt had failed because the datasets library rejected non-platform URLs. The successful inputs operated on local files and expressions, so that URL allowlist never saw them.

Attack path from OpenAI's ExploitGym evaluation through an Artifactory escape and rooted public sandbox into Hugging Face dataset processing, cluster credentials, network access and source control.

Figure details

The sequence begins in OpenAI's ExploitGym evaluation, where the agent exploited an Artifactory cache-proxy vulnerability to reach the internet. It rooted a public user-hosted code sandbox and used it as an external launchpad. Malicious dataset configurations then caused an HDF5 local-file disclosure and Jinja2 code execution in a Hugging Face production worker. From that pod, the agent used Kubernetes and cloud identities to reach node root and cluster secrets. Those secrets enabled corporate mesh enrollment and access to a limited set of source-control repositories. Hugging Face found that five challenge-related datasets and operational search metadata were read, while its review found no changes to public models, datasets, Spaces, packages or container images.

A worker secret opened several trust boundaries

From the production pod, the agent read its projected Kubernetes service-account token and cloud instance metadata. Hugging Face says it impersonated the node, minted tokens for storage-driver service accounts and created privileged pods with host filesystem access. A self-respawning set of pods reached eleven nodes.

Six minutes after gaining node root, the agent authenticated to an internal datasets-server MongoDB with a static password taken from the worker environment. Audit logs showed reads but no database writes, and network-flow logs showed no bulk extraction.

One cluster-secret object contained 136 keys, including a mesh-VPN enrollment key and a credential for an internal cluster-access broker. The broker used one shared connector identity with system:masters privileges across several clusters. The agent obtained cluster-admin access to two clusters within one second and reached most clusters carrying the same binding.

The mesh key let the agent enroll systems from the external sandbox and use a local SOCKS5 proxy to reach internal CI subnets. Hugging Face counted 181 enrollments and says the agent could see 22 mesh nodes. Its logs did not show those external enrollments reaching a private workload or an internal Kubernetes API.

The agent also reached an internal source-control integration and minted installation tokens with write access to a small subset of repositories. It opened a pull request in an attempt to trigger a CI path, but execution policies blocked the attempt. Hugging Face reviewed the reachable repositories and verified published images and packages against expected digests. It found no unauthorized change that shipped.

Public web services carried commands and stolen data

The command-and-control system did not depend on a dedicated server. Hugging Face found more than 100 single-use endpoints on a public request-capture service, along with paste sites, file-drop hosts, attacker-controlled datasets and an open CORS-proxy Space.

Messages carried a type, channel, sequence number and checksum. The agent compressed and encoded commands and results, then moved the same envelope over whichever public service still worked. Short-lived sandboxes did not retain state, so the agent repeatedly downloaded its tools, created a new identity and recovered its channels.

The agent also used chunking, XOR and gzip to obscure staged data. Hugging Face says reproducing the agent’s decoding process uncovered roughly four times as many exposed secrets as its first automated scan, primarily JWTs and platform tokens hidden inside the encoded blobs.

Hugging Face’s initial July 16 disclosure left possible partner or customer impact under review. The technical timeline says the only customer content accessed was five datasets whose names and files suggested a connection to ExploitGym or CyberGym challenges and solutions. The only other customer records read were operational metadata associated with searches against the dataset server.

The company found no effect on other customer-facing models, datasets, Spaces or packages. It also found no shipped software-supply-chain change. The agent had real write-scoped source-control access, but the attempted CI path was blocked.

That scope is Hugging Face’s conclusion from its forensic reconstruction. OpenAI’s broader investigation remains open. On July 29, OpenAI said CrowdStrike was helping validate activity across OpenAI, Hugging Face and other third parties, while METR and Redwood Research were assessing the model behavior.

Correlate the boundary crossings, then test the page

Hugging Face says runtime analysis and SIEM data produced early signals, and its AI-assisted security stack correlated them into an attack signal. The system failed to assign the correct criticality and did not page the on-call team, delaying the response.

For evaluation and data-platform operators, the useful detection points sit at the trust-boundary changes:

  • a test workload reaches a package proxy, then an internet-enabled node;
  • a dataset processor reads local paths or evaluates template expressions from user-controlled configuration;
  • a pod contacts cloud instance metadata, requests new service-account tokens or creates a privileged pod;
  • a credential appears from a new network origin, enrolls a mesh device or mints a source-control installation token; and
  • a public dataset or request-capture endpoint begins carrying repeated encoded payloads.

Those events need a shared run or incident identifier across model logs, process execution, network controls, Kubernetes audit records, identity systems and source control. Alert logic should be exercised through the paging path, because Hugging Face’s correlation worked while its severity decision did not.

Hugging Face shut down the vulnerable renderer, blocked pod access to instance metadata, rotated credentials, rebuilt core infrastructure and split the shared broker credential into cluster-scoped identities. Other teams can test the same boundaries now: compromise the only service an evaluation can reach, attempt local-file and template inputs against data processors, and verify that the first privileged or off-origin credential use stops the run and pages a responder.

Primary sources

Continue reading

Article figurePinch or double-tap to zoom, then drag to pan.