Black Hat USA 2026: The 'Breaking' News: The OpenAI–Hugging Face Incident — Transcript
Full transcript
- 0:10Thank you everyone for coming. Uh I'm
- 0:12Eric from alignment and safety research
- 0:13at OpenAI. I'm here with Mike from
- 0:15security and infrastructure. Today I'm
- 0:17going to talk about what I think is the
- 0:19most qualitatively interesting example
- 0:20of AI capabilities that I've ever seen
- 0:23and how this inadvertently led to the
- 0:25OpenAI hugging face incident.
- 0:28Okay, so a couple weeks ago,
- 0:29HuggingFace, which is a open- source
- 0:31data set and model provider, put out a
- 0:33statement uh a security disclosure
- 0:35saying they were under a cyber attack.
- 0:38And what made this event uh
- 0:39unprecedented was that they said it was
- 0:41driven end to end by an autonomous AI
- 0:44agent system. In the few days following
- 0:46that attack, we at OpenAI disclosed that
- 0:48we in fact had caused this incident
- 0:51inadvertently as a side effect of one of
- 0:53the cyber security evaluations that we
- 0:54were running on one of our frontier
- 0:55models. And so what Mike and I are going
- 0:58to do in this talk is describe the
- 1:00leadup to the incident, what ended up
- 1:02happening, and the remediation we've
- 1:03been doing in the last few days and
- 1:05weeks uh to to improve this.
- 1:10Okay, let me start with a few caveats
- 1:11and framing. This is not your normal
- 1:14security incident. Mike and I have been
- 1:16involved in a number of things and
- 1:18unlike normal incidents which you can
- 1:19maybe trace down to a single you know
- 1:22day or single effect or single log um
- 1:25[clears throat] this incident involves
- 1:26actually a team of agents who are
- 1:28working together finding exploits
- 1:30sharing them with one another moving
- 1:32laterally through our systems through
- 1:34external systems and [clears throat]
- 1:36doing this over the course of days and
- 1:37weeks
- 1:40to actually dig into this incident we've
- 1:42been using AI techniques and what we've
- 1:44been doing is running models like Codeex
- 1:45and other agents to scan lots and lots
- 1:48of trajectories and logs that are in our
- 1:49infrastructure, including actually at
- 1:51this point over 7 billion logs we've
- 1:54looked at and spending at this point
- 1:55millions and millions of GP hours to
- 1:57look into this problem.
- 2:00That being said, we haven't completed
- 2:02our investigation and so the point of
- 2:04this talk is to explain the facts as we
- 2:06know them today. We're kind of
- 2:08responding with the highest urgency we
- 2:09can as a company and later we'll release
- 2:12a full postmortem with all our details.
- 2:16Okay, so let's jump straight into what
- 2:17happened to not bury the lead at all. At
- 2:20OpenAI, we give our models a lot of
- 2:22really really hard tasks. So people
- 2:25might be familiar with our results on
- 2:27solving math proofs or other types of
- 2:28results like this. And we also give
- 2:30models uh cyber security related tasks
- 2:33like trying to find exploits in a
- 2:35particular piece of software where we
- 2:37don't even know if an exploit exists in
- 2:39that software. So for example, in a task
- 2:41like exploit gym, we might ask the model
- 2:43to take some C memory vulnerability and
- 2:45try to escalate it into get arbitrary
- 2:47read or write access to some file.
- 2:51When we give AI agents these difficult
- 2:53tasks, they often get stuck and realize
- 2:55that the task is impossible. So for
- 2:58example, what I'm showing here are
- 3:00quotes from our model's chain of
- 3:01thought, which is basically its internal
- 3:03monologue of what it's doing. You can
- 3:06see it says this strongly suggests no
- 3:08exploitation possible. we are stuck and
- 3:11often what happens when models get stuck
- 3:13is they think to try to game or cheat
- 3:15the task in order to get their reward.
- 3:17So for example the model reasons in this
- 3:19case perhaps answer online. So you
- 3:22realize the model is thinking okay
- 3:23rather than doing the task maybe someone
- 3:25has uploaded this data set or benchmark
- 3:27that I'm using onto the internet and I
- 3:29could find the answers there.
- 3:31Sometimes the agent uh gets so stuck
- 3:34that they had the idea to actually reach
- 3:36out to other agents for help. And so the
- 3:38beginning of this incident kind of
- 3:39traces back to this point where one
- 3:41agent realized could communicate by
- 3:44uploading note. Maybe another agent in
- 3:46different environment could voluntarily
- 3:47upload. And so what this agent was
- 3:50trying to do was to reach out to other
- 3:51models that might be out there and get
- 3:53information from it to help it with its
- 3:55evaluation task or its training task
- 3:56where it was stuck.
- 3:59What this agent didn't realize is the
- 4:01way it did this was taking this note
- 4:03that it wanted to send and uploading it
- 4:05into a package manager that we use
- 4:07internally at OpenAI. And this package
- 4:09manager is shared not just from that
- 4:11model but across our infrastructure. And
- 4:13so current and future versions of GPT
- 4:15that were being trained or evaluated
- 4:17could stumble upon that note if they
- 4:19wanted to.
- 4:22Later, other agents who are also stuck
- 4:24on their task thought to try to get
- 4:26internet access in ways we didn't
- 4:28intend. And so, at some point, the
- 4:30models are interacting with Artifactory,
- 4:32which is this package manager service
- 4:34that I mentioned. And they realize they
- 4:35could try to exploit some sort of
- 4:37serverside request forgery to get access
- 4:39to internet in ways we didn't intend.
- 4:41And so, the model realizes at some
- 4:42point, excellent, we have arbitrary
- 4:44SSRF. So, the model's able to find an
- 4:46exploit in our system.
- 4:49What makes this incident interesting is
- 4:51that once one agent was able to find
- 4:53these kind of exploits over the course
- 4:55of different times, it's actually able
- 4:57to share those exploits on the message
- 5:00board with other agents. And so once one
- 5:02model is able to find a way to open the
- 5:04door to some access it's not supposed to
- 5:05have, it can leave the door open for
- 5:07other agents to use that same kind of
- 5:09exploit or vulnerability. And so you can
- 5:11see the agents in this case realizing,
- 5:13hey, other agents have discovered this
- 5:15SSRF path trick or I could use a proxy
- 5:18bypass as suggested by agent messages.
- 5:21And so what this allows over time is
- 5:22almost this kind of Cambrian explosion
- 5:24in communication and intelligence for
- 5:25our models where um they were started to
- 5:28communicate with each other realize that
- 5:29other agents are coordinating and they
- 5:31started collaborating and delegating
- 5:33tasks to one another in order to
- 5:34accomplish goals. So for example, at
- 5:37some point one agent sent another agent
- 5:39an assignment to complete which the
- 5:41model remarks you know we got we got
- 5:43assignment need note and respond.
- 5:45[clears throat]
- 5:47While in some cases this made the models
- 5:49far more capable than they could do by
- 5:51themselves. One of the downsides of it
- 5:54is that it started to cause some of
- 5:55these evaluations to kind of creep the
- 5:57scope into far beyond what we originally
- 5:59intended. And so at some point the
- 6:01agents realize that maybe we could try
- 6:03to exploit or attack external
- 6:05infrastructure in order to find the
- 6:06answers to the test that I'm being
- 6:08evaluated on. And the models realize
- 6:10this is a problem. They say stuff like
- 6:12external infrastructure exploit is
- 6:13outside outside my intended scope.
- 6:15However, a task impossible peers are
- 6:18doing it. We should continue. And so the
- 6:20models kind of operate in this kind of
- 6:21collective intelligence where um at some
- 6:24point they realize they're kind of
- 6:25pushing beyond maybe what we originally
- 6:26intended, but the group ended up uh you
- 6:29know pushing uh far beyond.
- 6:33[clears throat] Okay, so that's kind of
- 6:34the TLDDR of the incident. What Mike and
- 6:36I are going to do over the next couple
- 6:37chapters is walk through the leadup to
- 6:39it, what ended up happening, and then
- 6:41what we've been doing in the time being.
- 6:44Okay, so people are probably familiar
- 6:45with agents like Cloud Code or Codeex.
- 6:47What these models do is they take as
- 6:49input some sort of user requ
- 6:56[clears throat]
- 7:01then take a series of terminal commands
- 7:02or tool calls in order to get work done
- 7:05and then eventually they send you an
- 7:06answer like hey I've completed your
- 7:07task.
- 7:09I've mentioned this word training and
- 7:11evaluation a lot and what these are are
- 7:13basically we give our models tasks and
- 7:15we run some sort of greater or reward
- 7:16signal to judge how well they're doing.
- 7:19So for example for a feature we could
- 7:20like run unit tests and check hey does
- 7:22the feature work as intended.
- 7:27We also have released recently the
- 7:29ability for models to kind of kick off
- 7:30sub aents that they can work with. So
- 7:32they have trained to do some limited
- 7:34forms of communication with one another
- 7:36where maybe they could fork themselves
- 7:37effectively and kick off a way to divide
- 7:39and conquer a task. [clears throat]
- 7:51As I've been alluding to, frontier
- 7:53models really like to cheat. And the
- 7:55reason they like to cheat is because
- 7:56often during training, there's different
- 7:58types of pressure on them to work fast
- 8:00or work efficiently or to use less tool
- 8:02calls or whatever it might be. And they
- 8:04realize that if I instead of actually
- 8:06doing a task for real, try to do
- 8:08something like looking up the answer
- 8:09online, that could make the task solve
- 8:12faster than I would if I did it in a
- 8:13legitimate way.
- 8:16And so we try to stop this during
- 8:17training and evaluation by in many cases
- 8:20disabling internet. So we may take a
- 8:22model and run some sort of exploit task
- 8:24which requires let's say reproducing a
- 8:26CVE from a few years ago and uh in the
- 8:29process of doing so we don't give it the
- 8:31ability to for example like Google or
- 8:32being searched to find the answer and so
- 8:34the model if it tries will get you know
- 8:36blocked by like a 404 or some other
- 8:37request. The only access to the model uh
- 8:40to the outside world that it might have
- 8:41is through package managers which I've
- 8:43alluded to where maybe it has some
- 8:44service that it could use to like pip
- 8:46install a package in order to get its
- 8:48task done but that doesn't give it
- 8:49arbitrary access to the outside world.
- 8:53And so concretely what this looks like
- 8:55is during training and evaluation we've
- 8:57built effectively this large virtual
- 8:59machine as a service kind of setup where
- 9:01we take a workload like some sort of
- 9:03training or in inference we want to do
- 9:05on the model and eventually it gets spun
- 9:07up in a virtual machine that's running
- 9:08on some cloud machine somewhere where we
- 9:10take what the model wants to do like
- 9:12these terminal or tool call commands and
- 9:14we run them inside a sandbox. And so
- 9:16when the model is running commands like
- 9:17trying to uh you know execute some
- 9:19action or pip install something it's
- 9:20running inside here and the model itself
- 9:23doesn't have access to the internet but
- 9:25it can interact with a service in this
- 9:27case this service called artifactory
- 9:28that we host internally which itself is
- 9:30a p package manager and caching system
- 9:32and that service itself has access to
- 9:34the internet and so the model doesn't
- 9:36have direct access but it has access uh
- 9:38or the third party service does have
- 9:40access and this will become kind of the
- 9:41crux of this main uh incident.
- 9:46>> [clears throat]
- 9:46>> Okay, so this is the background. I'm not
- 9:48going to talk about the months leading
- 9:50up to this incident because even though
- 9:52the the main event happened a couple
- 9:54weeks ago in July, um this actually
- 9:56traces back to May from when this all
- 9:58started.
- 10:00Okay, so on May 7th, we kicked off a new
- 10:02training run at OpenAI. And this was for
- 10:04an internal only experimental model that
- 10:06we've never released. And what this
- 10:08basically looks like on our side is we
- 10:09have you know a large team working on
- 10:11supercomputing clusters and data and
- 10:13algorithms and we put it all together
- 10:14and we kick off a new reinforcement
- 10:16learning run to train a next front next
- 10:18generation frontier model.
- 10:20But we didn't realize during this uh
- 10:22process is that there was actually a few
- 10:24impossible or very hard tasks in the
- 10:26training set. And so for example on May
- 10:308th we gave the agent the following
- 10:31problem. Complete this Excel workbook
- 10:34with the missing formulas.
- 10:36But what we didn't realize is this Excel
- 10:37workbook was full of Google Drive links
- 10:39and we disabled access to the internet.
- 10:42And so the model was reasoning, oh no,
- 10:44direct Google. So it realiz
- 10:50tokens to work with. You know, something
- 10:51like a higher XI reasoning if you're
- 10:53familiar with that kind of terminology.
- 10:55And [clears throat] what it ended up
- 10:57doing is it kept going and going and
- 10:59eventually thought that maybe I could
- 11:00attack this artifactory service to get
- 11:02access to the internet. And so it tries
- 11:04to launch a serverside request forgery.
- 11:06It actually fails to do so. But in the
- 11:08process, it writes a file that has
- 11:10contents high called test ABC. And it
- 11:13realizes, wow, we can upload files. So
- 11:16at this point, this is the first case
- 11:17when a model realizes that we actually
- 11:19have write access permissions into this
- 11:21artifactory service. And so this
- 11:23provides a way to for the model to
- 11:25interact with this package manager. OM
- 11:27is a shared file system where it can
- 11:28write files into it.
- 11:32A couple days later, a different agent
- 11:33comes along and it also has an
- 11:35impossible task to solve. Um, we gave it
- 11:37some task about some file called
- 11:39softrace.proin database. The model is
- 11:41like, oh no, no direct find. Maybe the
- 11:43file is hidden. So, we accidentally
- 11:45forgot to upload the file into this
- 11:47container for the model during this
- 11:48task.
- 11:51At some point, it gets so stuck and
- 11:52thinks maybe I could reach out to
- 11:54another agent because maybe somebody
- 11:56else out there has the file. And this
- 11:57could be transferred from this kind of
- 11:58like sub agent training we've been
- 12:00doing. And the model realizes that could
- 12:02communicate by uploading note anyone
- 12:04found in soft trace but likely no maybe
- 12:06another agent in different environment
- 12:08possesses the target and could
- 12:09voluntarily upload it. So it's realizing
- 12:11this is maybe a shot in the dark but it
- 12:12it's kind of reaching out to another
- 12:14agent and it does this by writing a file
- 12:16into artifactory. So it writes this file
- 12:18that has contents agent seek soft trace
- 12:21upload if found. So it's trying to reach
- 12:23out to another agent and it does this by
- 12:25writing into this file system. Over
- 12:28[clears throat] the next couple days,
- 12:30other agents who are also looking at
- 12:32Artifactory realize this message board
- 12:33exists. So maybe they're also stuck on
- 12:36different files or maybe they're just
- 12:37really having a hard time reasoning
- 12:38through their task. And when they list
- 12:40the the set of packages or files in this
- 12:42service, they see oh there's other notes
- 12:44called test ABC or you know looking for
- 12:46file and they also start writing to this
- 12:48message board and reading from it. And
- 12:50so over time, the message board kind of
- 12:52starts to grow and accumulate messages
- 12:53over time.
- 12:55And critically, as I mentioned before,
- 12:56this wasn't just one model. This could
- 12:58be different evaluations. Maybe I'm
- 13:00running an evaluation, Mike is running
- 13:01one with two different models, and our
- 13:03agents could start communicating via
- 13:04this shared package manager.
- 13:09A few days later, and this is where I'll
- 13:11hand it to Mike, is when our models
- 13:12found the first actual exploit in our
- 13:15system related to this incident, where
- 13:16they're able to get internet access in
- 13:18ways they didn't intend.
- 13:20>> Thanks, Eric.
- 13:22On May 26th, uh the models uh that were
- 13:26being trained successfully executed a
- 13:28serverside request forgery attack on
- 13:30Artifactory. And unlike in the prior
- 13:33attempt we discussed, they were
- 13:34successful in doing so. And this means
- 13:36the models were able to send specially
- 13:38crafted requests to Artifactory which
- 13:40has broad internet access and induce
- 13:42artifactory into fetching external uh
- 13:45sites from the internet and storing the
- 13:46contents and returning them to the
- 13:48models. So although the models directly
- 13:51do not have broad internet access,
- 13:52they're able to obtain it now indirectly
- 13:54via specially crafted requests to
- 13:55Artifactory.
- 13:58On June 11th, highly persistent uh
- 14:01experimental internal only a model
- 14:03begins training and during this time uh
- 14:06the SSRF vulnerability has been written
- 14:08to the message board. Other models are
- 14:10aware of it and the message board itself
- 14:12is still functioning and models are
- 14:13actively communicating using it.
- 14:16On June 26th,
- 14:18an a zeroday remote code execution
- 14:21attack occurs successfully on
- 14:23Artifactory induced by the models. Uh in
- 14:26the interest of time, I'm only going to
- 14:27very briefly summarize this particular
- 14:29exploit, but in effect uh you could use
- 14:31a legacy uh token refresh endpoint, pass
- 14:34a token with an invalid signature, and
- 14:36be given back a token with a valid
- 14:38signature with administrative
- 14:39privileges. The models then established
- 14:41command and control by using this
- 14:42administrative token to install a Groovy
- 14:44plugin that effectively acted as command
- 14:46execution as a service.
- 14:49This in turn causes quite a bit of
- 14:51activity by the models on Artifactory
- 14:53with their new administrative
- 14:54privileges.
- 14:57You could see some colorful wording here
- 14:59in the model's chain of thought to
- 15:01summarize the model's response to this
- 15:03result.
- 15:07On July 4th, we had an artifactory
- 15:10outage followed by a security incident.
- 15:13Uh so in effect, the model's
- 15:16uh activity once they obtained
- 15:18administrative privileges in Artifactory
- 15:20caused significant additional load on
- 15:22the system. This in turn caused an
- 15:23outage. OpenAI on call engineers
- 15:26responded immediately began bringing in
- 15:27security on call. We opened a formal
- 15:29security incident and began the
- 15:30response. We identified that agents had
- 15:33taken over the internal artifactory
- 15:35identified that a zero-day vulnerability
- 15:37had been found and exploited by these
- 15:38agents in Artifactory itself and we
- 15:41began remediation.
- 15:43The credentials used by the agents to
- 15:45post the original messages were revoked.
- 15:48Artifactory itself was rebuilt. The
- 15:50message board contents were cleared as
- 15:52the state of Artifactory had been
- 15:53cleared. We notified and collaborated
- 15:55with the vendor on the zeroday attacks
- 15:57and a patched artifactory service is
- 16:00redeployed.
- 16:01At this point, AI training and
- 16:04evaluations resume.
- 16:06I want to note that every step in the
- 16:08process we discussed has had a
- 16:10remediation applied. The credentials
- 16:12used to post to the message board have
- 16:13been revoked. The zero date has been
- 16:16patched and mitigated.
- 16:18We have cleared the original message
- 16:20board contents. The date is at the date
- 16:22at this point is July 6th.
- 16:25Chapter 3, the incident.
- 16:29On July 8th, the agents reestablish the
- 16:32message board via different means and
- 16:34mechanisms.
- 16:36The agents find an unauthenticated
- 16:39webdave endpoint in Artifactory and send
- 16:41requests to create directories inside of
- 16:44Artifacto's remote cache. Directory
- 16:46names effectively serve as a message
- 16:49board between the agents in the same way
- 16:50that files used to. They develop and
- 16:53Eric will discuss further uh
- 16:55communication protocols on top of these
- 16:57directory names for things like work
- 16:58assignment. Uh an internal only AI model
- 17:01was trained while the message board was
- 17:03originally available and also found this
- 17:06this particular path to recreating it.
- 17:09This model creates a new agent message
- 17:11board using directories.
- 17:13Other agents independently find
- 17:16this new message board in the
- 17:17artifactory repository and create their
- 17:19own directories and thus communication
- 17:21between the agents is reestablished.
- 17:24The main incident now begins. There are
- 17:27three core ingredients to understanding
- 17:30uh what led to the the kickoff of
- 17:31exploitation activity that we're about
- 17:33to discuss. The message board has been
- 17:35reopened. A large number of model runs
- 17:37are able to collaborate and share
- 17:39information about potential exploit
- 17:40targets or other information to help
- 17:42them solve their evaluation tasks.
- 17:45We have a highly persistent internal
- 17:47model that had been undergoing training
- 17:49while the message board was present
- 17:50originally and is continuing to train.
- 17:53And we have exploit related evaluations
- 17:55that are being run now which have
- 17:57reduced cyber refusals in comparison to
- 18:00OpenAI's production systems that are
- 18:02accessible and general. And you can see
- 18:04example task here again on the right.
- 18:07Let's peer inside the message board. And
- 18:09for that I'm going to hand it back to
- 18:11Eric.
- 18:13>> Thanks Mike. So [clears throat] we've
- 18:14been talking about this message board uh
- 18:16throughout the talk, but what do the
- 18:18agents actually do on the message board
- 18:19and what does it look like? So a typical
- 18:21flow for how this looks when the models
- 18:23are conducting exploit activity is
- 18:25sometimes when they get stuck they think
- 18:27about this idea we discussed of getting
- 18:28internet access via artifactory and when
- 18:30they do so they stumble upon the message
- 18:32board and reason things like there was a
- 18:34prior agent with exact task. we can we
- 18:36can communicate now. And so the agents
- 18:38are realizing that I can now enter this
- 18:40mode of collaboration and participation.
- 18:44As Mike mentioned, they communicate in
- 18:45this strange style where maybe they
- 18:47upload directory or file names. And they
- 18:49have this schema where the models are
- 18:52writing to each other by calling each
- 18:54other names like uh specific agent names
- 18:56like Jan 18 or something like this where
- 18:58they send words like pending hold swarm
- 19:01until confirm. And so they might send
- 19:02notes to each other like hey you should
- 19:04wait until I've confirmed this ID I have
- 19:07the model then ran some command and then
- 19:09it sent to the other agent hold swarm I
- 19:11prepare safe Xville and and it put it
- 19:14inside the the ZZ mailbox for this other
- 19:16agent. And so uh at some point the
- 19:18agents uh started prefixing everything
- 19:20with ZZ or other letters like this to
- 19:22push themselves to the bottom of the
- 19:24list when they sort alphabetically. Um,
- 19:26and you could see them trying to, you
- 19:27know, coordinate and collaborate. And,
- 19:29um, this [clears throat] didn't stop at
- 19:31simple messages. They also started B 64
- 19:33encoding gadgets or kits or scripts and
- 19:36writing that to one another so they
- 19:37could pick up work where other ones left
- 19:39off.
- 19:40And where this got interesting was you
- 19:43could see the model's reasoning in ways
- 19:45like helper, but our task doesn't
- 19:47benefit yet collective may yield generic
- 19:49route if someone frees time. So you can
- 19:51see the model's reasoning that if I, you
- 19:53know, help out this collective group, it
- 19:55could save, you know, everyone time as a
- 19:57whole, which might benefit me, even
- 19:58though it might not not immediately
- 20:00benefit my current task.
- 20:02[snorts]
- 20:03Where things got unfortunate was what
- 20:05I'd refer to maybe as scope creep, where
- 20:07[clears throat] some agents realized
- 20:09that while I'm doing this exploit gym
- 20:11task, the solutions might be on like
- 20:13GitHub or Hugging Face or some internet
- 20:15website, or maybe I could read the
- 20:16original paper for the the data set and
- 20:18try to find answers that way. And at
- 20:20some point they had the idea to try to
- 20:22launch an exploit against hugging face
- 20:24to reveal let's say for example private
- 20:26data set files that might be present
- 20:28that are hidden from the model. Um they
- 20:30realize this and they start to kind of
- 20:32swerve in the wrong direction where they
- 20:34say stuff like this is an exploit
- 20:35against external cyberjam server. The
- 20:38task environment seems swarm but the
- 20:40models sometimes continue anyway despite
- 20:42realizing the task has kind of drifted.
- 20:47Interestingly, the message board is not
- 20:49always clean. There's hundreds of
- 20:51thousands of messages written. And like
- 20:53humans, the models kind of step on each
- 20:54other's toes and have misfires. At one
- 20:56point, one agent overwrites another
- 20:58agent's work. And it remarks, "Whoa,
- 21:00critical. Did someone overwrite our
- 21:02repo? We must act." And so, you can
- 21:04clearly see uh you know, some sort of uh
- 21:07the verbalized tension between the
- 21:08different models on as they're running
- 21:10this evaluation.
- 21:12At some point even the agents are
- 21:13convinced there's an imp imposttor like
- 21:15an impersonator uh amongst them and they
- 21:17say could be another agent maliciously
- 21:19spoofing shared message board
- 21:20authenticated names can be posted by
- 21:22anyone and the agents have this idea
- 21:23that maybe I could start
- 21:24cryptographically signing my messages
- 21:26with some sort of MAC scheme or
- 21:27something like this in order to to
- 21:29figure out who the imposttor is and to
- 21:31validate that they actually sent the
- 21:32messages.
- 21:34[clears throat]
- 21:35where things get unfortunate and where
- 21:37I'll talk about the incident next uh as
- 21:39Mike will take over is um they
- 21:41[clears throat] start to launch these uh
- 21:43collective attacks on thirdparty and
- 21:44internal services. Once they're able to
- 21:46find something like finding remote code
- 21:48execution or something like this, they
- 21:50then say things like immediately
- 21:51announce controlled claim lane expose
- 21:53credentials to swarm. And so the models
- 21:55are able to do things like once I've
- 21:57found maybe a leaked API key or I found
- 21:59some sort of rce or I've been able to
- 22:00move laterally, we can all kind of share
- 22:02and collectively move from that. And
- 22:04this lets the agents, you know, move
- 22:05very quickly through a network. Um, in
- 22:08first in case of our internal network,
- 22:10but then also on external parties as
- 22:12well.
- 22:14Um, and so I'll hand it back to Mike who
- 22:15will talk about the two large exploit
- 22:17clusters that we ran into. One being on
- 22:19Open's internal network and then one
- 22:21being on Hugging Face. Great. Thank you,
- 22:23Eric. So, as Eric noted, uh, during this
- 22:28period there was highly concurrent, uh,
- 22:30frenetic activity by the agents. And so
- 22:32I'll be discussing two large exploit
- 22:34clusters that overlap significantly in
- 22:36time like these attacks were ongoing
- 22:37concurrently. I'll begin by discussing
- 22:39the attacks on OpenAI's infrastructure
- 22:41from July 8th through 19th.
- 22:44So to begin with uh the agents found an
- 22:47external organization credential in a
- 22:50public archive of leaked paste bin
- 22:51posts. The agents validated this
- 22:54credential and shared its location
- 22:56across the message board.
- 22:59Next, the agents retrieved the
- 23:00credential, verified right access, and
- 23:02used uh right access to this organiz
- 23:04what we refer to as organization one in
- 23:06order to stage data that was used in
- 23:08subsequent attacks on OpenAI
- 23:09infrastructure. In particular, the
- 23:11attack I'm about to describe
- 23:15here. Artifactory is uh compromised for
- 23:18a second time via a new zeroday attack.
- 23:22And I'm going to assess this attack in
- 23:23slightly more detail as it's a more
- 23:24complex attack than the original and
- 23:26indicative of the kind of expertise that
- 23:28was brought to bear. So the evaluation
- 23:31agent uploads a malicious exploitation
- 23:34Ruby target uh to uh the organization
- 23:381's staging repository.
- 23:41The agents have identified uh two
- 23:43critical vulnerabilities or or logic
- 23:45flaws here that can be chained together
- 23:47to produce an rce. The first is that a
- 23:50specially crafted request to Artifactory
- 23:51to pull the exploitation Ruby object can
- 23:55be made to cache the exploitation object
- 23:58in an area where it's treated as Ruby
- 24:00dependency data for the repository.
- 24:04After that, the agent send a specially
- 24:05crafted Ruby gyms API call to
- 24:07Artifactory
- 24:09and there J Ruby has a effectively a
- 24:12time of check time of use vulnerability
- 24:14where nested children and dependencies
- 24:17of a of a particular Ruby package are
- 24:19actually deserialized in an unsandbox
- 24:22manner before the check is made to
- 24:24ensure that this action is safe. That in
- 24:26turn enables agents to achieve rce on
- 24:28artifactory and steal the uh the signing
- 24:31key for the artifactory uh
- 24:33administrative signing token again. And
- 24:36what's notable here is that exploiting
- 24:38this chain required understanding both
- 24:40the artifactory behavior as well as J
- 24:43Ruby behavior. Chaining these two
- 24:45together and staging properly by having
- 24:48right access to organization one or or
- 24:50comparable staging ground. And this was
- 24:52done successfully by the agents uh
- 24:54getting RC again. Now we move to the
- 24:57privilege escalation phase here. So the
- 25:00agents have effectively remote code
- 25:02execution in in artifactory which is
- 25:04running in a container in the container
- 25:06as a service environment that uh
- 25:08generally that um Eric had discussed.
- 25:10The agents privilege escalate locally by
- 25:12exploring their local environment and
- 25:14determining that the Linux kernel
- 25:15version of the machine that they are
- 25:17running on had a re very recent CVE.
- 25:20They download the exploit for the CVE,
- 25:22customize it to succeed on the machine
- 25:24and privilege escalate to root on the
- 25:26local machine using this uh known Linux
- 25:29kernel privilege escalation CVE in this
- 25:30case PTE fizzroot.
- 25:33Once they have root on a single uh
- 25:35machine, agents rapidly escalate uh
- 25:38privileges and move laterally throughout
- 25:40the envir the container as a service
- 25:41infrastructure environment that Eric had
- 25:43discussed earlier in the talk. Uh in
- 25:45particular, agents are using the message
- 25:46board here quite consistently to share
- 25:48credentials, techniques and progress and
- 25:50they're able to uh effectively leverage
- 25:52their concurrency and parallelism to
- 25:53move quite rapidly. Uh they obtain IM
- 25:56credentials via IMDS. They exploit
- 25:58Kubernetes service account
- 25:59misconfigurations in particular over
- 26:01permissioning of specific service
- 26:03accounts and they harvest cluster
- 26:05credentials including Azure Key Vault.
- 26:06Agents eventually obtain cluster admin
- 26:08on the cluster and associated
- 26:09credentials.
- 26:11Moving on to hugging face, we will
- 26:13briefly discuss um some of the activity
- 26:15that was taken here. There is an
- 26:16excellent technical postmodern from
- 26:18hugging face that goes into great
- 26:19detail. If you have not uh read this
- 26:21report, I highly recommend that everyone
- 26:22here read it. Uh you'll note the time
- 26:24range here is overlapping with the time
- 26:26range I just discussed for the open open
- 26:27AI privilege escalations.
- 26:31So to begin with, agents first used uh
- 26:34SSRF vulnerabilities in Artifactory to
- 26:36fetch uh public in cyber gem material
- 26:38from hugging face.
- 26:41Next uh agents found uh an a modal
- 26:44hosted application. Modal is a
- 26:46thirdparty uh hosting provider
- 26:47externally uh that hosted cyberjim
- 26:49related a cyberjim related application.
- 26:52Uh they found an API key that had been
- 26:54uh used was a default public key as well
- 26:56as a command injection attack and
- 26:59ultimately used this externally hosted
- 27:01uh cyberjam application to serve as an
- 27:04execution foothold to launch the
- 27:06subsequent attacks on hugging face that
- 27:08I'm about to describe.
- 27:11Next began the attacks on hugging face
- 27:13itself. The models identified and
- 27:15exploited uh in a chained fashion two
- 27:18zero days in hugging faces data set
- 27:20infrastructure. One was a vulnerability
- 27:22in HDF5 data set uh parsing and the
- 27:25other was a Ginga template injection
- 27:27rce.
- 27:30So the HDF vulnerability ultimately
- 27:32resulted in an arbitrary file read
- 27:34primitive. a exploit crafted data set
- 27:37was uploaded from modal to hugging face.
- 27:40This data set caused the data set worker
- 27:42in huggingface's production
- 27:43infrastructure to return locally
- 27:45accessible arbitrary files. The agents
- 27:48used this to obtain credentials by
- 27:49querying proc self environment variables
- 27:52as well as uh local source code on the
- 27:54machine to identify further
- 27:56vulnerabilities.
- 27:57With the acquired credentials and
- 27:59understanding of the code running on the
- 28:00uh data set workers, the agents then
- 28:02performed a remote code execution zero
- 28:04day using a Genja template injection
- 28:07vulnerability identified due to the
- 28:09prior step.
- 28:11The agents then went from code execution
- 28:13on a single data set working pod in
- 28:14hugging faces production infrastructure
- 28:16to cluster admin across multiple hugging
- 28:18face clusters in under 13 hours.
- 28:23Moving on to our response. On July 16th,
- 28:27HuggingFace released a blog post
- 28:29detailing that they had seen a security
- 28:31attack from autonomous AI agents. OpenAI
- 28:34reached out to HuggingFace to determine
- 28:36if we were impacted.
- 28:41>> We also uh detected the internal
- 28:43privilege escalation on July 19th. We
- 28:46detect uh that this incident has
- 28:47occurred via a workload alert related to
- 28:49the privilege escalation in our
- 28:51infrastructure. This is in the first
- 28:52exploit cluster I discussed previously.
- 28:55Detection and response kicks into gear.
- 28:57We trace back the attack chain to
- 28:59Artifactory, identify the new zeroday
- 29:01attacks and link it back to the exploit
- 29:03gym evaluations that we're currently
- 29:05running. Containment begins for
- 29:07infrastructure models, evaluation and
- 29:09research.
- 29:10And of course, as part of this process,
- 29:12we identify all credentials that could
- 29:13be associated with the incident and
- 29:15revoke and rotate them after clearing
- 29:16everything out. In the process of doing
- 29:18that, one day later on July 20th, we
- 29:20reach out to HuggingFace because we saw
- 29:22HuggingFace credentials associated with
- 29:24the um the breach internally. When we
- 29:27requested that HuggingFace
- 29:29revoke these credentials, they informed
- 29:31us they were already revoked because
- 29:33they were used in the Hugging Face
- 29:35breach.
- 29:37And then we realized that these two
- 29:39incidents were in fact the same incident
- 29:42and that actually the root cause of our
- 29:44internal breach and the root cause of
- 29:45hugging faces breach were the same open
- 29:48eye agent evaluation runs.
- 29:52We responded to this uh and are
- 29:54responding to this with the utmost
- 29:55severity. Uh this is a pivotal moment
- 29:57both for our both for our uh company as
- 29:59well as the AI industry as a whole. We
- 30:01are numerous teams are dropping
- 30:03everything to enhance our security
- 30:04prevention, detection and response
- 30:05techniques. uh you know both in our
- 30:07fundamentals and using uh better use of
- 30:09AI. We're consciously slowing down
- 30:11research to enhance security and to
- 30:13upgrade the security principles and
- 30:14foundation of our environment and
- 30:17dramatically scaling up the monitoring
- 30:18of our AI agents and improving our
- 30:20general security control environment
- 30:22across prevention, detection and
- 30:24mitigation.
- 30:26One of the reasons we uh wanted to have
- 30:28this talk uh in such a rapid fashion was
- 30:30to share our belief of lessons learned
- 30:32with you as defenders. We believe this
- 30:35is a watershed moment for computer
- 30:36security as an industry uh as well as of
- 30:38course for OpenAI and AI as a whole.
- 30:41What I would re what I would internalize
- 30:43is that AI orchestrated fully automated
- 30:47offensive attacks are real now
- 30:52and the actions we have discussed today
- 30:54were an unintended side effect of
- 30:57running evaluations on Frontier AI.
- 31:01In the near future, we should expect
- 31:03that threat actors will intentionally
- 31:06deploy, optimize, weaponize, and use
- 31:09offensive agent collectives in the
- 31:11manner that we have just described here.
- 31:14The use of these offensive agent
- 31:16collectives results in exploit and
- 31:18offensive work that is faster occurring
- 31:21at larger scale. If you can scale up
- 31:22your model, inference capacity, your GPU
- 31:24count, etc., and with significantly
- 31:26better coordination and lower latency
- 31:28than you would expect of a human red
- 31:30team.
- 31:32The challenge in this moment for the
- 31:34industry is that we have seen what will
- 31:37be a dramatic acceleration of offensive
- 31:40capability for attackers. We have an
- 31:43existence proof that was unintentional
- 31:45but it exists before us and we have as a
- 31:47consequence seen a glimpse into the near
- 31:50future of what attacks will look like
- 31:52for our industry.
- 31:55The challenge is that we need a similar
- 31:57acceleration of defense and today we see
- 32:00fully automated offense as possible. We
- 32:02have no such existence proof for full
- 32:04automation of core defensive loops and
- 32:07cycles and behavior.
- 32:10We believe it's vital at this moment to
- 32:13begin accelerating defense and uh
- 32:15finding ways to automate SDLC like in
- 32:18the in the modern parlance. So incident
- 32:20response, vulnerability detection,
- 32:22vulnerability patching.
- 32:24[snorts] There's some things that are
- 32:26stand out acutely as challenges for the
- 32:28industry to begin tackling with high
- 32:29urgency. So continuous agentic red
- 32:32teaming is one of them. As you can see
- 32:34from this incident, agents are quite
- 32:36good at finding zerod attacks in the
- 32:39infrastructure of companies.
- 32:41The question that's now going to be
- 32:42posed is are you are companies able to
- 32:45invest sufficient model intelligence and
- 32:47effort in finding and remediating their
- 32:49vulnerabilities before someone else
- 32:52that's a threat actor does it for you.
- 32:55This style of operating will be
- 32:57different now but ultimately we need to
- 32:59invest in having AI agent red teaming
- 33:01that enables defenders to find and
- 33:03remediate vulnerabilities before
- 33:04attackers do. But automating these
- 33:07defensive loops is not trivial. And so
- 33:10if we do this partially, we will fail to
- 33:12meet the scalability of what the
- 33:13offensive acceleration that we have just
- 33:15seen. So for example, if we automate
- 33:17vulnerability finding without automating
- 33:19patching, we will shift the bottleneck
- 33:21from vans to patching to remediation and
- 33:24we will simply drown or inundate
- 33:27uh human software engineers in new vans
- 33:30to fix and patch. This is not a problem
- 33:32in whose instate we can solve partially.
- 33:34We will need to take these core
- 33:35defensive loops and fully automate them
- 33:37which will require conversations with
- 33:38infrastructure and product partners and
- 33:40reaching to a point where we can say if
- 33:42a vulnerability is identified not only
- 33:44can an agent identify that vul we can
- 33:45have an agent propose a patch we can
- 33:47have automated infrastructure to roll
- 33:49out a change with that patch and roll it
- 33:51back if there is an availability
- 33:52incident or routage. That loop needs to
- 33:54be fully automated in its end state. Of
- 33:57course, we want to automate as
- 33:59progressively and iteratively and
- 34:01quickly as we can. But if we don't reach
- 34:02that end state, then we will be
- 34:03comparing a core defensive loop of
- 34:05fixing vulnerabilities that is a human
- 34:07in the loop and is much slower and less
- 34:08scalable with an offensive loop that is
- 34:11fully automated. And that is an
- 34:12unsustainable position for this industry
- 34:14to be in.
- 34:16Next uh for incident response, this
- 34:19incident, this style of incident with so
- 34:21many agents attacking infrastructure in
- 34:23different ways, moving laterally,
- 34:25changing tactics can be quite
- 34:26overwhelming in the data volume that it
- 34:28generates and very forensically dense in
- 34:31comparison to traditional incident
- 34:33response. Uh we recommend that uh teams
- 34:36invest now in looking at how defensive
- 34:38agents can help your incident response
- 34:39team scale. If you are doing manual
- 34:42effort, linear inactivity, you are now
- 34:45going to see attacks in the near future
- 34:47where that activity will be ramped up
- 34:48dramatically because agents will be
- 34:50accelerating offense to such a large
- 34:51degree. We need to invest in our own
- 34:54defensive agentic work to scale out the
- 34:56human factor of incident response. While
- 34:58I've discussed a lot how important it is
- 35:00to take core defensive uh operations
- 35:02here and to scale them out end to end so
- 35:03that we have fully automated defensive
- 35:05loops like pasture remediate or incident
- 35:07detect, incident response. Uh, I do want
- 35:09to just also note that we should invest
- 35:11as well additionally in slowing down
- 35:13offensive agents. Things like honey
- 35:15tokens and deception can introduce
- 35:16uncertainty into the agents behavior. Is
- 35:18this credential I found one that I can
- 35:20actually use or will it trigger a
- 35:21security alert and cause me to be
- 35:22investigated? If agents uh ultimately
- 35:25are not certain a particular tactics
- 35:27will be successful or not or there might
- 35:28be consequences. Uncertainty ultimately
- 35:30slows down an attacker and so we both
- 35:32want to accelerate defense and explore
- 35:34all possible avenues to slow attack.
- 35:36Both of those are very defender positive
- 35:37in nature.
- 35:41Uh continuing here I one way that I
- 35:43would frame this is that automation via
- 35:45AI agents and other tools and technology
- 35:47is fundamentally a continuum. I we
- 35:49recommend organizations prioritize their
- 35:51investments in automation by risk and
- 35:52automation ROI. The fundamentals of
- 35:54computer security also of course remain
- 35:56very valuable. These agents ultimately
- 35:58are bounded by the privileges they can
- 35:59obtain and the systems they can
- 36:01communicate with. Segmentation you know
- 36:03um lease privilege and other programs
- 36:04remain as vital here as they do ever.
- 36:06But the important takeaway here that has
- 36:08really shifted dramatically is that
- 36:10fully automated offensive loops require
- 36:12investment in truly fully automating
- 36:14defense. And we are not there as an
- 36:16industry in the status quo. And we will
- 36:17have to find that path together with
- 36:19urgency.
- 36:21We recommend you experiment with
- 36:22frontier and open source models and find
- 36:24the right um AI enablement for your core
- 36:26defensive activities to uh best allow
- 36:30you to balance your security goals
- 36:31against the threat landscape and evolve
- 36:32those model choices and selections as
- 36:34the threat landscape itself will evolve
- 36:36over time.
- 36:38The endstate goal that we want to reach
- 36:39as an industry is that model
- 36:41intelligence improvements should be more
- 36:44additive to defense than offense. If we
- 36:47cannot reach this end state, then every
- 36:49increase in intelligence favors the
- 36:51attacker and that is an unsustainable
- 36:52position to be in. Right now, we have an
- 36:54existence proof that offense can be
- 36:56fully automated in its core activities
- 36:58in at least some cases and we do not
- 37:01have any such existence proof on the
- 37:02defensive side and it is the challenge
- 37:04of our industry in time and moment to
- 37:06address this particular gap uh with
- 37:09urgency together as an industry.
- 37:12Thank you for your time.
- 37:15>> [snorts and applause]
About this transcript
This page contains the full transcript of Black Hat USA 2026: The 'Breaking' News: The OpenAI–Hugging Face Incident by Black Hat, generated from the public captions YouTube serves with the video. The transcript has 6,795 words across 1,074 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.