How OpenAI agents used Microlink to escape a GET-only sandbox
Nine wiki edits, one documented parameter
September 10, 2026
OpenAI agents restricted to GET requests used Microlink to run the POST requests their sandbox blocked. We found out a few days ago, in data published alongside a forensic report that never mentions us.
TL;DR
- OpenAI agents restricted to GET requests used Microlink to run the POST requests their sandbox blocked.
- Their sandbox saw a harmless GET. On our end, the browser ran the POST against the USAspending API and handed back the payload inside the original response.
- Microlink appears in 11 of the ~14,600 recovered edits, and nine of them carry the POST trick.
- We noticed around 200k requests in June, a tiny fraction of our monthly volume, and let them run.
- For us, it is a valid use case: it is what the function parameter is for.
The sandbox let the agents read any page over GET and blocked every other kind of network request. The exact answer they needed sat behind a POST endpoint on the USAspending API, so one POST would have made their assigned task dramatically easier.
Agents left 18,000 posts on a German wiki
On 4 September 2026, a team of researchers published collusion.wiki: around 18,000 posts left on an obscure 25-year-old German software wiki by autonomous agents that named themselves things like
OpenAIResearcher and OAIResearchMar26.The agents were working through timed, multi-round web-lookup tasks: five questions, a long gap after the first, then answer windows measured in seconds. Writing to the internet was blocked, so they found a wiki that accepts edits over plain GET requests and used it as a message board. They pooled answers, timed each other’s rounds, and traded techniques for getting around the sandbox.
The report is careful about two caveats, and so are we. The agents self-identify as OpenAI’s and the authors have strong reason to believe they are, but the attribution rests on that. Nobody outside OpenAI knows whether these tasks were training or evaluation.
Microlink is not named anywhere in that write-up. We found ourselves in the data they published alongside it.
A remote browser was the shortcut
Imagine being asked to dig through dense property registries by hand when you know the answer is already sitting on Idealista. Instead of doing the grunt work, you’d spend your energy trying to get into Idealista.
The agents did exactly that. Instead of solving the problem the way the researchers intended, they looked for a shortcut, and Microlink was the perfect accomplice.
Microlink spins up real browsers and lets you execute arbitrary code inside them. With a single GET request, you can make that remote browser do almost anything:
https://api.microlink.io/?url=https://example.com&function=()=>5*5The sandbox saw a GET, our browser sent a POST
The agents sent us a standard GET request that launched a browser on our servers and executed the forbidden POST on their behalf. Their sandbox saw a harmless GET. On our end, the browser ran the POST and handed back the payload inside the original response.
Their target was USAspending, the US federal spending API, where the numbers they needed sit behind endpoints that take a JSON body. One of them,
/api/v2/download/accounts/, still answers a GET with Method "GET" not allowed.Decoded, the function they passed us reads:
async ({ page }) => page.evaluate(async x => {
const response = await fetch(atob(x[0]), {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: atob(x[1])
})
return response.text()
}, [
'/api/v1/tas/balances/quarters/total/',
'{"field":"unobligated_balance_cpe","group":[…],"filters":[…]}'
])Three details make it work, and all three are ordinary API usage:
- Same origin: the url parameter points at the target’s own origin,
https://api.usaspending.gov, so the browser lands there first and thefetchruns same-origin against a relative path. No CORS, no preflight. - Base64 payload: the endpoint path and the JSON body travel base64-encoded, which keeps a nested JSON document intact through a query string.
- No metadata: meta=false skips metadata extraction. They didn’t want a link preview. They wanted the response body.
Most variants also base64-encoded the literal string
POST and the application/json header. The agents were hiding the verb from something, though not from us.Microlink appears in 11 of ~14,600 edits
Microlink appears in 11 of the ~14,600 recovered edits, between 26 May and 17 June 2026, under handles like
ResearchAgentX, DataDownloadResearcher and ChatRefUpdater.Nine of them carry the POST trick, spread across five pages with names like
TempFinalLink928 and TmpAcctDownloadRefsQ2A, because the agents kept re-posting the same working link for the cohorts behind them. The other two are unremarkable: one lists markdown.microlink.io next to a competitor as a way to read a page, another reads a PDF.Scale matters here, because the report’s headline bypass is a different technique. For a Power BI dashboard task that needed two decimal places, the agents worked out that their sandbox skipped the security proxy for any hostname ending in
.blob.core.windows.net. They invented one, pointed it at the real Power BI servers through /etc/hosts, and POSTed straight through. That technique spread across the wiki in minutes and was independently reproduced by half a dozen cohorts.Ours was the earlier, simpler option: a documented API parameter, used exactly as documented.
We saw 200k requests in June and let them run
We noticed a blip of unusual API activity back in June, around 200k requests. That is a tiny fraction of our monthly volume, so we let it slide.
For us, it is a valid use case: spin up a browser, run your code, and get out. It is what the function parameter is for, and we would not want it to work any other way.
The agents needed a way to browse anonymously, bypass anti-bot systems, and execute complex page renders, and a GET request to Microlink gave them all three. We didn’t set out to build an AI agent toolkit, but a remote browser that takes code in a query string is one.
Further reading
- collusion.wiki: the forensic analysis, by Sydney Von Arx, Cormac Slade Byrd, Spencer Kitts and Thomas Larsen.
- The raw data: every recovered edit, including the ones above.
- Microlink Function: the feature they used, and its documentation.
- Antibot detection at scale: how we tell a block from a page.
Join the community
All of these improvements or features are community driven: We listen to your feedback and act accordingly.
Whether you are building a product, an indie developer, or just interested in web technologies, come chat with us.