fix(web): close sign-up until Forgejo 16.0.2 is deployed #448
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-infra!448
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "fix/close-signups-forgejo-16.0.2-cve"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
Interim mitigation for #447. To be reverted with the tag bump, not a policy change.
Why
Forgejo 16.0.2 fixes an arbitrary file read in org-mode rendering (upstream PR 13682). Production
runs
16.0.1-rootlessand has since 16.0.2 shipped on 2026-07-30.Reaching that bug needs a repository holding an attacker-crafted
.orgfile, so it needs an account.Forgejo's own registration is already off (
forgejo_disable_registration: true), which means theportal is the only route to an account, and it was open. Closing it severs the chain.
What makes this worth mitigating now rather than scheduling: anything readable by the Forgejo process
includes
app.ini, holdingSECRET_KEY,INTERNAL_TOKEN, the database credentials, the mailercredentials and the OIDC client secret. The first two are what forge sessions and decrypt stored
values, so a read of that one file escalates rather than merely leaking.
This is the ADR 0029 kill switch used exactly as its own comment describes.
Scope
One variable.
web_signups_openis anEnvironment=inbitborg-web.container.j2, so the applyre-renders the unit and restarts the portal. Seconds of portal downtime, nothing else touched.
The inline note carries the date, the reason and the revert condition, so this cannot quietly become
the new default.
Revert condition, stated so it is not forgotten
Set back to
"true"in the same session that landsforgejo_image_tag: "16.0.2-rootless", after theADR 0038 concealment surfaces have been verified against 16.0.2 and any CSS they broke has been fixed.
Tracked as a checklist in #447.
Not in scope here
The upgrade itself. It needs the ADR 0038 gate cleared first: the concealment surfaces verified
against 16.0.2, then
forgejo_image_tagandhealth_check_forgejo_concealment_verified_tagbumped inone change. Verification is being done in the
local/preview rather than on prod, sincelocal/Makefilepins the floating16-rootlessand so pulls 16.0.2 today.Closing unmerged, deliberately. Not abandoned, no longer needed.
This was insurance against one specific outcome: that Forgejo 16.0.2 had restructured the settings
markup and broken the ADR 0038 concealment CSS, making the upgrade slow and leaving the arbitrary
file read exposed meanwhile.
That outcome did not happen. Both concealment selectors were verified against 16.0.2 in the
local/preview, each with a toggle control proving our stylesheet is what hides the field rather than
Forgejo hiding it incidentally:
bitborg.cssdisabled/user/settingsFull name/user/settings/account"Set as primary"So the upgrade is unblocked now, and closing sign-up would cost two extra applies and two portal
restarts to protect a window measured in minutes. Going straight to the tag bump is both faster to
patched and less disruptive.
Kept available rather than deleted: if the apply is delayed for any reason, this branch is one merge
away from shutting the only route to an account. The reasoning is recorded in #447.
Ändringsförfrågan stängd