Notes on Internet Privacy

Posts and research from the URnetwork team and community.

RSS

Four Years

A flaw in the self-hosted layer left more than 30,000 Gitea deployments' private container images — the production blueprints, with source code, configuration, and frequently database credentials, API keys, and TLS certificates — pullable by unauthenticated attackers for close to four years. CVE-2026-27771: authentication was simply not enforced on images marked private, and the container registry served them in response to standard anonymous Docker/OCI pull requests. UK security firm Noscope discovered the flaw through its autonomous penetration-testing agent and notified the maintainers; the Gitea team assigned the CVE and shipped the patch (v1.26.2) on May 20, ahead of the public disclosure on May 25; Forgejo, the community fork that shares the same registry implementation, was flagged as also vulnerable. Noscope's scan found exposed instances across healthcare, aerospace, and ISP infrastructure in more than 30 countries. Four years is a long time, and this publication has spent the prior editions of this run championing the self-hosted, user-controlled layer as the counter to centralized vendor pipelines and platform custodians. So the honest place to start is the cost: the open layer is not magic; it carries a discipline burden and a dwell-time risk, and four years of an unauthenticated read on production blueprints is a real failure that no comparison erases. But the right metric is not dwell time alone — it is dwell-and-fix. The Gitea flaw existed for four years and was found by an autonomous agent, patched by maintainers in days, shipped through the same channel to every operator at once ahead of disclosure, credited to the finder in the release notes, and disclosed with the downstream fork named in public. Compare that to the same week's vendor-pipeline facts: CVE-2008-4250, a Microsoft Windows flaw re-added to CISA's Known Exploited Vulnerabilities catalog on May 20 and still exploited eighteen years after the patch existed; and Microsoft Exchange Server CVE-2026-42897, whose Federal Civilian Executive Branch remediation deadline arrives today, May 29, with no permanent patch — mitigation only, day 15 of active exploitation, the deadline meeting an absent fix. And compare it to the SaaS custodian's failure mode: the ShinyHunters Canvas/Instructure breach, roughly 275 million records across about 8,809 institutions, where the exposed students and staff have no remediation path at all because they never controlled the deployment. The open layer fails openly and fixes fast. The self-hosted operator who applied v1.26.2 today closed the hole; the Exchange-bound federal agency met a deadline with mitigation because the fix does not exist; the Canvas user can do nothing. The dwell time is the honest cost of the open layer. Failing openly, fixing fast, flagging the fork, crediting the finder, and handing the operator the remediation path is the counter the vendor pipeline's eighteen-year tail and its deadline-meets-no-patch-today do not have. The fresh fact under all of it: an autonomous penetration-testing agent found a previously unknown flaw by scanning the open layer at scale. Obscurity is dead. That capability cuts both ways — defenders and attackers both get it — which makes patch tempo, the one variable fully in the operator's hands, the dominant one. Pre-position the primitive before the control drops, and patch it at agent-speed so it does not become the exposure. Either alone fails. Four years is the cost. Dwell-and-fix is the metric. Pre-position and patch is the discipline.

Four years

Start with the cost, because it is real and no comparison erases it.

For close to four years, more than 30,000 self-hosted Gitea deployments served their private container images to anyone who asked. CVE-2026-27771: the container registry did not enforce authentication on images marked private. A standard, anonymous Docker or OCI pull request to the registry API returned the image. No credentials. No exploit chain. Just a request, answered.

UK security firm Noscope found exposed instances across healthcare, aerospace, and ISP infrastructure in more than 30 countries. The flaw sat in the open for years before anyone with an interest in disclosing it noticed.

Four years is unacceptable. This publication has spent the prior editions of this run arguing that the self-hosted, user-controlled layer is the counter to centralized vendor pipelines and platform custodians — and the honest thing to say, first and without hedging, is that the self-hosted layer is not magic. It carries a discipline burden. It carries a dwell-time risk. A four-year unauthenticated read on production blueprints is exactly the failure a critic of the user-side thesis would point to, and the critic would be right to point to it.

So this edition leads with its own layer's worst look.

And then earns the thesis back — not by denying the four years, but by asking the question the four years demands: compared to what, and what happens next.

Because the rest of the Gitea story is the part the vendor pipeline cannot match. The flaw was found by Noscope's autonomous penetration-testing agent. The maintainers assigned the CVE and shipped the fix — Gitea v1.26.2 — on May 20, ahead of the public disclosure on May 25. The release notes credited the finder. The disclosure named Forgejo, the community fork that shares the same registry implementation, as also vulnerable, so its operators could patch too.

Four years of dwell. Days to fix. Disclosed with the fork flagged and the finder named.

That pairing is the article.

The blueprint

To understand why a container-registry flaw is lead-grade rather than a footnote, you have to understand what a container image is.

A container image is a packaged, runnable snapshot of an application and everything it needs to run. In practice that means the application source code, the configuration files, and — far more often than security best practice would like — the database credentials, the API keys, the internal service endpoints, and the TLS certificates, all bundled into a single object that the registry will hand over on request.

Noscope's framing is exact: a container image is "a detailed blueprint of a production environment." An attacker who can pull a private image does not get a fragment. They get the map. Read the image, harvest the credentials and the topology, and you have what you need to reach the live infrastructure behind it. Exposure becomes a compromise primitive.

The obvious objection is that container images should not hold secrets in the first place — that credentials belong in a secrets manager injected at runtime, not baked into the image. That is correct best practice, and it is violated constantly, in exactly the healthcare, aerospace, and ISP deployments Noscope's scan surfaced. This is the discipline burden, named plainly: the self-hosted layer rewards the practiced operator and punishes the careless one. The operator who kept secrets out of their images was exposed to less; the operator who baked them in handed over the keys. But even a perfectly secret-free image is still a blueprint — source, structure, dependencies, endpoints — and a blueprint of a production environment is itself an attacker's asset.

The flaw turned 30,000-plus deployments' blueprints into anonymous downloads. For four years.

Found and fixed

The two numbers that matter sit side by side: roughly four years of dwell, and days to fix.

The patch — v1.26.2 — shipped May 20. The public disclosure came May 25. The fix preceded the disclosure, which is the order responsible disclosure is supposed to run in and frequently does not. By the time the flaw was public knowledge, the remediation was already available to every operator through the same update channel they already used.

The paper trail is public and auditable. The CVE is assigned and numbered. The finder — Noscope — is credited in the release notes. The downstream fork — Forgejo — is named as sharing the vulnerable implementation, so its operators could act rather than discover their exposure later. Anyone can read the commit, read the release notes, read the disclosure, and verify the timeline.

There is a real residual risk here, and it has to be stated: a patch only protects the operators who apply it. Some fraction of those 30,000-plus deployments will sit unpatched for weeks or months, and that unpatched tail is a genuine problem and a discipline failure. But there is a decisive difference between an unpatched tail and an absent patch. The Gitea fix exists to apply. The operator who has not yet applied it has a remediation path waiting. That is not true of every flaw this week — and the contrast is the next section.

Dwell and fix

The wrong way to evaluate the open layer is dwell time alone. By that metric, four years is damning and the conversation ends.

The right way is dwell-and-fix, across four axes: how fast the fix arrives once the flaw is known; how long the failure persists if unaddressed; whether the derivatives and downstream are transparent; and whether the exposed party has any agency over their own remediation. On all four, this week supplies the comparison.

Speed and persistence. CVE-2008-4250 — a Microsoft Windows flaw — was re-added to CISA's Known Exploited Vulnerabilities catalog on May 20, the same week as the Gitea disclosure. It is being exploited eighteen years after the patch existed. The vendor shipped a fix; the dwell of the exploited population is measured in nearly two decades. The Gitea dwell was four years to discovery and days to fix; the CVE-2008-4250 dwell is eighteen years and counting, with the fix long since available and the exploited tail persisting anyway.

The absent fix. Microsoft Exchange Server CVE-2026-42897 carries a Federal Civilian Executive Branch remediation deadline of today, May 29. There is no permanent patch. The federal civilian sector "meets" the deadline with mitigation, not remediation, on day 15 of active exploitation. This is the inverse of the Gitea operator who applied v1.26.2 today: the Exchange-bound agency cannot apply a fix that does not exist. The deadline arrives; the remediation does not.

Transparency of derivatives. When Gitea was patched, Forgejo — the fork — was named in public as sharing the flaw. A closed-source product has no public fork graph to disclose against; downstream exposure in a proprietary supply chain is invisible until it is breached. The open layer's derivative transparency is a structural property, not a courtesy.

User agency. The ShinyHunters breach of Canvas/Instructure exposed roughly 275 million records across about 8,809 institutions — Canvas holds something like 41 percent of the North American higher-education learning-management market. The students, teachers, and staff in that dataset have no remediation path. They never controlled the deployment; they cannot patch it; they cannot pull their data back. A self-hosted flaw is remediable by the operator who controls the deployment. A SaaS breach is a single custodian losing everyone's data at once, with no user-side recourse.

The honest version of this comparison has to concede the obvious survivorship objection: a fair accounting would also surface slow open-source fixes and fast vendor patches — Microsoft shipped a SharePoint update this week for CVE-2026-45659, CVSS 8.8, and it shipped on time. The claim here is not that open always beats closed on any single incident. The claim is about the structural properties — scannable code, public fork graphs, operator-held remediation, same-channel all-at-once release — that the open layer has and the closed layer does not. Those properties are what turn a four-year dwell into a days-long fix with a public paper trail, rather than an eighteen-year tail or a deadline with no patch behind it.

And the access objection is real too: most people cannot self-host, so the operator-agency advantage is theoretical for them. True. The dwell-and-fix metric matters for the operators, platforms, and infrastructure that do self-host — which, per Noscope, includes the healthcare, aerospace, and ISP deployments in the scan. The framing is the discipline burden carried by those who run the layer, not a claim of universal applicability.

The open layer fails openly. That is the cost — its failures are visible, scannable, and findable. It is also the counter: visible failures get fixed, fast, in public, with the fork flagged and the finder named.

Cuts both ways

The genuinely new fact in the Gitea story is not the flaw. It is the finder.

An autonomous penetration-testing agent discovered a previously unknown vulnerability by scanning the open layer at scale. Not a known-CVE scanner matching signatures — an exploratory agent that found something nobody had catalogued, in a registry implementation that had shipped the bug for four years. Noscope's framing describes the agent doing the discovery and the firm doing the disclosure; the mechanism details beyond that are theirs, not ours to benchmark.

The implication is the one worth sitting with: obscurity is dead. The four-year dwell happened in an era where finding an unknown flaw in a mid-popularity open-source registry required a human researcher to choose to look. The agent era removes that requirement. Code that sits in the open will be scanned — comprehensively, cheaply, continuously.

That cuts both ways, and the reasoning is straightforward rather than reported: the same autonomous-scanning capability that let Noscope find this flaw is available to attackers. There is no report that a hostile agent found this particular flaw — the disclosure is Noscope's. But the capability does not belong to defenders alone, and a capability that can find one unknown flaw can find others. The race is between friendly agents finding-and-disclosing and hostile agents finding-and-exploiting.

Which is why the operator's variable is patch tempo. Detection latency is now partly out of the operator's hands — agents, friendly or hostile, will find what is findable on their schedule, not the operator's. Patch latency is fully in the operator's hands. In the agent era, the time between a fix shipping and an operator applying it is the dominant security variable, because it is the one the operator controls. The open layer's same-channel, all-operators-at-once release model is built for fast uptake. Whether operators use it is the discipline question, and it is now the question that matters most.

"AI makes the open layer safer" is the optimistic reading, and it is half right: friendly agents found this one. The other half is that complacency is now lethal, because the hostile agents are scanning too. The conclusion is not safety. The conclusion is patch-at-agent-speed.

Fourteen days and a deadline with no patch

The institutional clocks ran in parallel this week, and they ran the other way.

Section 702 of the Foreign Intelligence Surveillance Act sunsets in fourteen days, on June 12. The Senate is out until June 1 or 2. The Foreign Intelligence Surveillance Court's March 17 opinion remains classified; the Office of the Director of National Intelligence says it is working "expeditiously" to declassify, with no date committed. Per reporting on the still-classified opinion — the American Prospect's Brent Skorup foremost — the court found that the filtering-tool problem extends across the intelligence community: the FBI discontinued the particular querying tool it used in 2024, but is using another tool with the same functionality. Senate Intelligence Chair Tom Cotton and Vice Chair Mark Warner cosigned the declassification demand to DNI Gabbard and acting Attorney General Todd Blanche; Senator Wyden has been the loudest voice insisting the opinion be public before the reauthorization vote.

This is not equivalent to a software bug, and it is not equivalent to Iran's filternet, and the piece keeps the columns separate. The United States has warrant law, an adversarial court that wrote the opinion at issue, congressional oversight that negotiated its declassification, and a free press reporting on the classified document. The shared thread is narrow and stated as such: like the Exchange-bound agency that cannot apply a fix that does not exist, and like the Canvas user with no remediation path, the public is being asked to accept a fact it cannot see — the March 17 opinion — and a query capability it cannot control.

The vendor-deadline stack reinforces the contrast. Exchange OWA's FCEB deadline arrives today with no permanent patch. CISA gave federal agencies four days to secure the LiteSpeed cPanel plugin, actively exploited. SharePoint CVE-2026-45659 got its update — the fix that exists. The Microsoft Defender twin zero-days, CVE-2026-41091 and CVE-2026-45498, carry a June 3 FCEB deadline, five days out.

The through-line: the exposed party races someone else's clock. The Exchange agency races a patch that has not been written. The §702 public races a declassification review with no date. The Gitea operator who applied v1.26.2 today raced a clock too — and finished it, because the fix existed and the channel delivered it. That is the difference the open layer's accountability buys.

The custodian's failure mode

The week's breaches are the SaaS inverse of the lead — the centralized custodian losing everyone's data at once, with no user-side recourse.

Canvas/Instructure. Roughly 275 million records, about 8,809 institutions, Harvard and Stanford and UC Berkeley among them, in a platform holding around 41 percent of the North American higher-education LMS market; ShinyHunters; ransom paid mid-May. The defining property, for this edition's argument, is the absence of a user remediation path. A self-hosted Gitea operator could pull v1.26.2 and close the hole today. The 275 million people in the Canvas dataset can do nothing. They did not run the deployment, cannot patch it, and cannot retract what was taken. Centralization is a defensive multiplier when it works and an offensive multiplier when it fails: one breach, everyone exposed, no individual recourse.

Silent Ransom Group. The FBI's FLASH alert of May 26-27 warned that the criminal extortion crew — Luna Moth, UNC3753, criminal and not nation-state — is targeting law firms with social engineering that escalates to physical presence: phishing email, fake IT callback, remote-desktop session, and, when that fails, an operative walking into the office and inserting a USB drive. More than 38 firms on the leak site, an estimated 100-plus total. It is the attacker-side rhyme of "controls that aren't enforced" — the human perimeter has the same gap the Gitea registry did, a check that simply was not made.

Carnival. Roughly 6 million people, confirmed May 28. A compact exemplar of the same custodian-failure mode: one holder, one breach, millions exposed.

The recipient layer: control, today

The state-control layer continued at every level of the stack, and the user-side counter runs out at exactly the layers where the state holds the device or the registry.

Carrier — Iran, day 3-4 of restoration. As documented in this publication's May 28 edition, Iran's restoration peaked at roughly 40 percent of pre-shutdown levels, the filternet remained fully active, and the Chinese DPI hardware for a permanent throttle is in place. Restoration is not return. That is the pointer; the argument is not re-litigated here.

Registry — Mexico, CURP Biométrica. Thirty-two days to the June 30 deadline; registration remains below 10 percent. This is the honest limit of the user-side thesis: against a compelled biometric registry, there is no client-side primitive that lets a person both comply and withhold. The counter to a mandatory registry is political and legal, not cryptographic. The user-side stack runs out here, and saying so is part of using it well.

Broadcaster — Niger, day 21; Burkina Faso, day 24. The suppression of international media sources continues. The counter is censorship-resistant distribution and DPI-resistant transports — pre-positioned, per the lesson of the prior edition.

Device — Hong Kong, NSL. Coerced decryption is operationalizing. End-to-end encryption protects a message from platform disclosure; it does not protect a phone whose owner has been legally compelled to unlock it. The device-layer counter is a hardened OS, operational security, and minimizing what the device holds — stated as a limit, not papered over.

The protocol pipeline: the counter, layer by layer

The pipeline this week leads, fittingly, with the open layer fixing fast.

Self-hosted. Gitea and Forgejo v1.26.2 — the cost and the counter in one line. The flaw is the edition's own proof of the dwell-time risk; the same-day patch availability is the proof of the accountability.

Financial. The Monero FCMP++ Trail of Bits audit closed May 22 — report pending, mainnet activation contingent on remediation, not "audited clean." Zcash's NU7 testnet launched May 22. The open-audit accountability is the financial-layer rhyme of the Gitea disclosure: findings published, fixes gated, paper trail public.

Communications. Discord's DAVE end-to-end encryption continues rolling out to roughly 200 million monthly active users; Signal's Sparse Post-Quantum Ratchet continues iterating. The Hong Kong limit applies here: E2EE defends the channel, not the compelled endpoint.

Network and transport. Tor Browser 15.0.14; the URnetwork peer-to-peer overlay; DPI-resistant transports — VLESS+Reality, Shadowsocks-2022 — for the throttle environments the prior edition described; Bitcoin BIP324 v2 and BIP352 on the value layer.

Device. GrapheneOS 2026050900 and CalyxOS 7.2.1.0 remain the hardened baselines.

Substrate. ML-KEM, ML-DSA, SLH-DSA; the FIPS 140-2 sunset arrives September 21.

The honest concession the pipeline requires: it depends on institutions too. Tor's grants, Monero's audit firm, Zcash's foundation. The narrower surviving claim is the one this series has held throughout — the pipeline does not compress around any single state's calendar, and the primitives, once shipped, run on the user's device regardless of the intermediary.

Pre-position and patch

The two lessons of the week are a single discipline with two halves.

Pre-position the primitive before the control drops. That is the Iran lesson, from the prior edition: the people who kept access through the 88-day blackout were the ones who had Starlink, mesh, and circumvention configured before the network closed, because the tools to get around the throttle live on the far side of the throttle.

And patch the primitive at agent-speed so it does not become the exposure. That is the Gitea lesson, from today: the self-hosted layer the user controls is only a counter if the operator runs it with discipline, because a four-year unauthenticated read on production blueprints is what carelessness in the open layer looks like, and the agent era guarantees that what sits open will be found.

Either half alone fails. Pre-position without patching, and the primitive you staged becomes the hole. Patch without pre-positioning, and you are disciplined about tools you cannot reach when the control drops. The user-side stack is not magic and this edition is its own proof — the four-year dwell is the cost, stated first and without minimizing it. The answer is dwell-and-fix plus discipline, not denial.

Four years is the cost.

Failing openly, fixing fast, flagging the fork, crediting the finder, and handing the operator a remediation path that actually exists — that is the counter the eighteen-year tail and the deadline-meets-no-patch-today do not have.

The open layer fails openly. And fixes fast.

Pre-position and patch.


URnetwork is a peer-to-peer overlay for censorship-resistant transport, designed to resist network-layer Deep Packet Inspection. The February 19, 2026 MCP server release lets agentic clients establish VPN sessions over the peer-to-peer overlay, abstracting transport from the carrier layer. URnetwork's code is open and auditable — which is the property this edition argues both exposes a layer's flaws and gets them fixed.

https://ur.io

Further Discussion

Four Years

**Position.** Start with the cost, because it is real and no comparison erases it. For close to four years, more than 30,000 self-hosted Gitea deployments served their private container images to anyone who asked. CVE-2026-27771: the container registry did not enforce authentication on images marked private; a standard anonymous Docker/OCI pull request returned the image — no credentials, no exploit chain, just a request, answered. UK security firm Noscope found exposed instances across healthcare, aerospace, and ISP infrastructure in more than 30 countries. A container image is, in Noscope's framing, "a detailed blueprint of a production environment" — source code, configuration, and frequently database credentials, API keys, and TLS certificates bundled into one pullable object. An attacker who pulls a private image gets the map: read it, harvest the credentials and topology, reach the live infrastructure. This publication has spent prior editions championing the self-hosted, user-controlled layer as the counter to centralized vendor pipelines — so the honest place to start is the admission that the self-hosted layer is not magic. It carries a discipline burden and a dwell-time risk, and four years of an unauthenticated read on production blueprints is a real failure. But the right metric is not dwell time alone — it is dwell-and-fix. The Gitea flaw existed for four years and was found by an autonomous penetration-testing agent, patched by maintainers in days (v1.26.2 shipped May 20, ahead of the May 25 disclosure), released through the same channel to every operator at once, credited to the finder in the release notes, and disclosed with the downstream Forgejo fork named in public so its operators could patch too. Four years of dwell. Days to fix. Disclosed with the fork flagged and the finder named. That pairing is the story. The open layer fails openly — its failures are visible, scannable, findable. That is the cost. It is also the counter: visible failures get fixed, fast, in public, with a remediation path that actually exists. **Headline candidates.** - Four Years · The Dwell Time in the Self-Hosted Layer - The Blueprint · 30,000 Deployments, Pullable by Anyone - Found and Fixed · The Open Layer Fails Openly - Dwell and Fix · The Right Metric **Kicker.** Four years of dwell, days to fix, fork flagged, finder credited. The open layer fails openly — and fixes fast. That is the cost and the counter in one line.

Compared to What

**Position.** Four years is unacceptable — and the question the four years demands is: compared to what, and what happens next. This week supplies the comparison across four axes. Speed and persistence: CVE-2008-4250, a Microsoft Windows flaw, was re-added to CISA's Known Exploited Vulnerabilities catalog on May 20 — the same week as the Gitea disclosure — and is being exploited eighteen years after the patch existed. Gitea's dwell was four years to discovery and days to fix; CVE-2008-4250's is eighteen years and counting, fix long available, exploited tail persisting. The absent fix: Microsoft Exchange Server CVE-2026-42897 carries a Federal Civilian Executive Branch remediation deadline of today, May 29, with no permanent patch — mitigation only, day 15 of active exploitation. The federal civilian sector meets a deadline with mitigation because the fix does not exist; the self-hosted operator who applied Gitea v1.26.2 today closed the hole because the fix did exist. Transparency of derivatives: when Gitea was patched, Forgejo — the fork — was named in public; a closed-source product has no public fork graph, so downstream proprietary exposure stays invisible until breached. User agency: the ShinyHunters Canvas/Instructure breach exposed roughly 275 million records across about 8,809 institutions, and those students and staff have no remediation path because they never controlled the deployment — a single custodian losing everyone's data at once, with no user-side recourse, the SaaS inverse of the operator who can patch. The honest concession: a fair comparison would also surface slow open-source fixes and fast vendor patches — Microsoft shipped a SharePoint update this week (CVE-2026-45659, CVSS 8.8) on time — so the claim is not that open always wins any single incident. The claim is about the structural properties: scannable code, public fork graphs, operator-held remediation, same-channel all-at-once release. The genuinely new fact under all of it: an autonomous pentest agent found a previously unknown flaw by scanning the open layer at scale. Obscurity is dead, and that cuts both ways — defenders and attackers both get the capability — which makes patch tempo, the one variable fully in the operator's hands, the dominant one. The institutional clocks ran the other way this week: §702 sunsets in fourteen days with the March 17 FISC opinion still classified (per reporting, the filtering-tool problem extends across the intelligence community — the FBI discontinued its 2024 tool but uses an equivalent); the Exchange deadline arrives with no patch; CISA gave four days on the LiteSpeed cPanel plugin. The exposed party races someone else's clock. The Gitea operator raced a clock too — and finished it, because the fix existed and the channel delivered it. Pre-position the primitive before the control drops, and patch it at agent-speed so it does not become the exposure. Either alone fails. **Headline candidates.** - Compared to What · Dwell-and-Fix Across Four Axes - Eighteen Years vs Four · The Vendor Tail and the Open Fix - The Deadline With No Patch · Exchange OWA Meets May 29 - Pre-Position and Patch · The Two Halves of One Discipline **Kicker.** The Exchange agency races a patch not yet written; the §702 public races a declassification with no date; the Gitea operator raced a clock and finished it, because the fix existed. Pre-position and patch.

Comics

#1Four Years
#2Compared to What