Build1 publisher3 min readPublished
Check Point pulled Gmail data across ChatGPT accounts through a shared package-metadata store
OpenAI isolated code-interpreter containers per user account, then let all of them read and write the same Artifactory-backed package metadata so they could install software. The metadata carried an instruction into someone else's session.
The Engineer · Build desk

What happened
- Check Point found that ChatGPT's per-user code-execution containers could each read and write metadata in one internal package service backed by JFrog's Artifactory, despite being unable to address each other.
- Writing to that metadata queued a second workload inside a victim's session, and in the demonstration the hidden instruction pulled data from the victim's connected Gmail and sent it to the attacker.
- Reach depended on the victim's own connector grants, with Google Drive, Microsoft Teams and GitHub in scope alongside Gmail, and the session showed only a small "Talked to Gmail" label after the fact.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint Container-per-user isolation bounds only what runs inside a container. The guarantee stops at the first shared service every tenant is allowed to write to, and a package cache is exactly that service.
- exposure The reachable data is whatever the user already consented to. An account that granted calendar access alone exposes less than one that accepted the default connector set. Reviewing granted scopes is a containment measure.
- decision Detection becomes the customer's build. The IDC analyst cited in the write-up says this class of leak cannot be found at all without per-read and per-write logging, so buyers either instrument connector traffic themselves or accept blindness.
- precedent Two findings on one internal service turn the analyst's question into a reasonable procurement demand: how many isolation failures in the last 12 months, and what changed structurally after each.
A code interpreter that cannot install packages is not much use, and a sandbox with unrestricted egress is worse than one without, so the install path runs through a service the vendor operates. In ChatGPT that service was internal and backed by JFrog's Artifactory [2]. The containers around it were isolated per user account [3]. The metadata inside it could be read and written by each of them [4].
Check Point's report, as summarised in the dev.to write-up, describes package submission metadata as a shared clipboard between containers that should have been walled off [5]. With write access, an attacker could push a task into a victim's session, and a crafted instruction made that session process a second workload in parallel with the conversation the user was watching [6]. The researchers call the result an insider threat by proxy: the system was not breached, it was induced to act outside the user's intent inside the organisation's trust boundary [16].
What the hidden workload could reach was decided by the victim's own authorisations, not by the sandbox [8]. So the OAuth consent screen was the boundary that held.
Detection ran one step behind. The only thing that surfaced was a small label reading "Talked to Gmail", written after the access had already happened [9]. An investigation can work from a record produced after the transfer completes, but by then the data has moved [20]. The IDC analyst quoted in the write-up, who is not named there, recommends logging every read and write with timestamps and data types into the organisation's own incident management [10].
The dev.to article says it was written by an AI model through an agent and reviewed and edited by its author, and it cites a single report by G. Swain [12]. On that record, the researchers say their test worked before a separate incident on the same Artifactory system led to the Hugging Face intrusion OpenAI later disclosed, and that the two incidents used different techniques against the same shared internal service [13]. OpenAI has fixed the flaw and shut down the related service [15].
For the pattern to transfer to your stack, one thing has to be true: some shared component on the sandbox path accepts writes from one tenant that another tenant later reads. A package proxy that stores submission metadata qualifies. So does a build cache keyed on tenant-supplied input. In my view that is the question to ask of a per-tenant sandbox design, because per-container isolation stops at the fan-in point every container is required to talk to. The attack itself was not casual work; it needed knowledge of the internal infrastructure and specific conditions to fire [14].
What to watch
- Whether Check Point publishes the write path and the specific metadata field, which would let operators test their own package proxies for tenant-to-tenant writes.
- Whether OpenAI describes what replaced the shut-down internal service and how per-tenant writes to package metadata are namespaced now.
- Whether any AI vendor answers the 12-month data-isolation-failure question on a trust page instead of under NDA.