Skip to content

feat(security): remove remember-me login - #1798

Merged
JohnVillalovos merged 6 commits into
developfrom
jlvillal/GHSA-mvjx-72w3-wqhp
Oct 13, 2026
Merged

JohnVillalovos merged 6 commits into
developfrom
jlvillal/GHSA-mvjx-72w3-wqhp

Conversation

@JohnVillalovos

Copy link
Copy Markdown
Collaborator

Security release. Details in the advisory once published.

Authentication::Login() saved the user with UserRepository::Update(),
which rewrites most users columns and all preferences from the copy
loaded at the start of the login. A password change, deactivation,
credit adjustment or preference change made between that load and the
save was silently reverted.

Add IUserRepository::UpdateLoginData(), which writes only lastlogin,
last_modified, the language chosen at login, and the generated
public_id when the user had none. Authentication::Login() now uses it.
A login that chooses no language leaves the stored language alone
instead of writing back the loaded one.

Add database integration tests that change the user's row between the
login's load and its save, and check that the change survives.

Assisted-by: Claude:claude-opus-5-5
Remove the "Remember Me" option from the login page, together with the
persistent login cookie behind it. The cookie could not be made safe
without a redesign, so this release removes the feature rather than
patching it. Users must authenticate again once their normal application
session is unavailable.

A persist_login cookie left over from an earlier release is never
read. Logout still expires it.

For authentication plugin authors:

- IWebAuthentication::CookieLogin() is removed. Plugins implement
  IAuthentication and were never required to provide it.
- IAuthentication::ShowPersistLoginPrompt() is kept so that existing
  plugins continue to load, and is marked deprecated. Its result is
  no longer used.
- LoginData::$Persist and the matching constructor argument are kept
  and marked deprecated. The value is ignored.
- FormKeys::PERSIST_LOGIN is kept and marked deprecated. A login
  template compiled by an earlier release still resolves it, so the
  login page keeps working until tpl_c is cleared.

Update the plugin guide and the authentication plugin readme to match.

Assisted-by: Claude:claude-opus-5-5
Booking from the resource display identifies the user by the email
address typed there. To find that user the display called the login
routine, which recorded a login for the account even though nobody had
authenticated as that user.

Look the account up read-only instead and build the booking session
without logging in. An account that exists but is not active is now
refused: it is neither logged in nor replaced by a new guest account.
An unknown email address still creates a guest account as before.

The booking is attributed to the same user, with the same roles, as
before.

Assisted-by: Claude:claude-opus-5-5
A reservation made through the resource display took the resource's
internal id straight from the request and never checked that the
resource was enabled for display. Any resource could be booked that
way, not only the one shown on the tablet.

Identify the resource by its public id, the same way the display does,
and refuse the reservation unless that resource is enabled for display.
The check runs before any guest account or reservation is created, so a
request naming any other resource has no effect. The authenticated
setup actions keep using the internal id and are unchanged.

Assisted-by: Claude:claude-opus-4-8
Use a restricted copy of the booking session and prevent stored
roles from restoring administrative permissions or exemptions.
Preserve ownership, ordinary permissions, and authenticated sessions.

Add regression coverage across all four administrative roles.

Assisted-by: Codex:GPT-6
The README announced a security release for 13 October 2026 without
saying what it fixed. That release is LibreBooking 7.1.0, so replace
the announcement with the upgrade notice.

The notice tells administrators to upgrade to 7.1.0 or later, says
that the release removes the "Remember Me" option, gives the
workaround for installations that cannot upgrade right away, and
links to security advisory GHSA-mvjx-72w3-wqhp.

The notice for the earlier 7.0.0 security release is unchanged.

Assisted-by: Claude:claude-opus-5-5
Closes: #1779
@JohnVillalovos
JohnVillalovos merged commit 1707c7b into develop Oct 13, 2026
17 checks passed
@JohnVillalovos
JohnVillalovos deleted the jlvillal/GHSA-mvjx-72w3-wqhp branch October 13, 2026 15:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant