Build1 publisher3 min readPublished
Noma's Workflow Identity Hijacking turns a service account into a privilege proxy for strangers
Sasi Levi told Lets Data Science the pattern recurred across more than five workflow environments, though he declined to give a success rate, and says systems held when authorization was re-checked at the point of data access.
The Engineer · Build desk

What happened
- Noma Labs published research on September 9 describing an attack that needs no prompt injection, because a plain request to a public inbox is executed by a workflow holding privileges the sender never had.
- The opening example has an attacker emailing a company's public support address for the quarterly sales numbers in the Finance Director's latest email, and the workflow reads, searches and replies.
- Sasi Levi of Noma Security told Lets Data Science the pattern recurred across more than five major workflow environments, naming Google Workflows and the GitHub case Noma disclosed as GitLost.
- Noma's research says Google acknowledged the report on Google Workflows and confirmed a fix, without disclosing how it was implemented.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint Monitoring cannot carry this defense, because Levi says the requests are ordinary and the logs they leave look legitimate, so there is no anomaly for a detection rule to catch.
- decision If the highest-return control really is a check before every sensitive tool call, the engineering work moves into tool wiring and identity propagation, and input-filtering budgets stop being the answer.
- exposure Model-side hardening leaves the path open by design, since Levi's account has every component behaving exactly as specified; what is reachable is any workflow returning privileged output to an unauthenticated sender.
- contradiction Noma names the control that held in testing but says neither Google nor GitHub supplied enough detail to describe their remediation, so anyone building this gets the principle and no reference implementation.
Levi's three conditions are conjunctive: an untrusted or weakly authenticated input, a workflow executing with privileges greater than the requester's, and a path that lets the result of that privileged operation flow back to the requester [8]. A service identity on its own is normal, and Levi will not say every workflow using one is vulnerable [10]. The failure arrives when that identity effectively becomes a privilege proxy for someone who never possessed the permissions [11]. The useful audit question is whether the output of a privileged read can reach a sender nobody authenticated, regardless of whether the pipeline runs on a high-privilege service account or a developer API key [15].
Two shapes held under Noma's testing, according to Levi: authorization enforced again at the point of data access or action, and privileged retrieval structurally separated from attacker-controlled output [9]. The first is a check inside the tool call. The second is wiring, and it is the one you can verify by reading a graph rather than trusting a policy engine.
The public inbox is the hard case, and Levi does not dodge it. There is no authenticated requester, and running strictly with the sender's permissions means zero access to internal data, which kills most support automations [13]. His answer splits what the workflow may touch from what it may tell the requester: an anonymous workflow can classify tickets, summarize them, retrieve public documentation, route issues and identify the likely customer [14]. That design works because it puts the mail-search tool off the anonymous path entirely. Identity propagation is unglamorous plumbing, which is why it tends to be the last wire connected.
On scale, the evidence is deliberately thin, and Levi says so: Noma did not approach this as a statistical survey of workflow products, so he would not give a success rate that implied broader coverage than the work performed [5]. What is on the record is a recurring architectural pattern across more than five major workflow environments, of which two are named, Google Workflows and the GitHub scenario Noma disclosed as GitLost [4]. That leaves at least three environments unnamed [21]. If you want to know whether your stack is one of them, the demonstration will not tell you; the three conditions will.
The decoupling diagnosis is the publication's characterisation of Noma's framing of its own findings [15], and the fix leaves in place the defenses the industry has spent two years building. Prompt injection is the attack those defenses were built for, tricking the model into disobeying its instructions [22]. Levi's claim is narrower and more durable: enforcing authorization at the privileged operation prevents prompt injection, or completely benign instructions, from borrowing somebody else's privileges [16].
For anyone building agent workflows, that converts a filtering problem into an accounting problem. Every sensitive tool call needs an authorization decision that takes the requester's identity as an input [18]. When the requester cannot be named, the tool does not belong on that path.
What to watch
- Whether Google or GitHub publishes implementation detail on what they changed, which would give builders a reference design instead of a principle.
- Whether any environment outside the two named ones is disclosed, since three or more remain unidentified.
- Whether workflow platforms start propagating requester identity into tool calls by default rather than leaving it to pipeline authors.