.. include:: ../Includes.rst.txt .. _upgrade: Upgrade ======= .. only:: html :ref:`v14.0` | :ref:`v13.0` | :ref:`v8.0` | :ref:`v7.1` | :ref:`v6.0` | :ref:`v5.2` | :ref:`v5.0` | :ref:`v4.0` | .. _v14.0: to version 14.0.0 ----------------- System Requirements ~~~~~~~~~~~~~~~~~~~ The minimum requirements have been raised: - **PHP:** 8.2 or higher (previously 8.1) - **TYPO3:** ^14.0 (previously ^13.4) - **Symfony:** ^7.0 (previously ^6.4 or ^7.0) - **New PHP extension required:** ``ext-fileinfo`` (used for MIME-type validation of file uploads) Database Update ~~~~~~~~~~~~~~~ After updating, run the database analyser in the TYPO3 Install Tool to apply the required schema changes. A new field ``tx_femanager_confirmation_required`` is added to the ``fe_users`` table. It stores a bitmask value for confirmation workflows: - ``0`` — No confirmation required (``User::CONFIRMATION_REQUIRED_NONE``) - ``1`` — User confirmation required (``User::CONFIRMATION_REQUIRED_USER``) - ``2`` — Admin confirmation required (``User::CONFIRMATION_REQUIRED_ADMIN``) Security: registration confirmation bypass ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This version closes a registration confirmation bypass via the "Resend Confirmation Mail" plugin. The resend plugin is a separate content element without the registration plugin's flexform, so the required confirmation can no longer be derived from the ambient settings at resend time. The workflow now reads the requirement persisted on the user in ``tx_femanager_confirmation_required``: - The resend action only (re)sends the user confirmation mail when the account still has an outstanding user confirmation (``User::isUserConfirmationResendable()``). Sites that only use admin confirmation no longer hand out a valid user confirmation link, and the user confirmation step can no longer enable an account that still needs admin approval (``User::isAdminConfirmationMissing()``). - To avoid disclosing whether an account exists for a given email address, the resend form shows the same neutral message for every valid address - regardless of whether a mail was sent, nothing was pending, or no such account exists. The same hardening applies to the profile change confirmation (``Edit`` controller, ``processUpdateWorkflow``): confirming, refusing or silently refusing a pending profile change is an admin action and now always requires a valid admin hash. The pre-built workflow URLs (``{confirmUrl}``, ``{refuseUrl}``, ``{refuseSilentUrl}``) already carry it, so customised :file:`UpdateRequest.html` templates that use those variables need no change; only templates that build the link manually must pass the admin hash in the ``hash`` argument. .. important:: After updating, run the upgrade wizard :guilabel:`Admin Tools > Upgrade > Run Upgrade Wizard > "EXT:femanager: Migrate required confirmation for pending users"`. It populates ``tx_femanager_confirmation_required`` for accounts that were still pending at the time of the update. The fix does not depend on the wizard for its security: for accounts that still carry the default value ``0`` the requirement is inferred at runtime from the confirmation state (``User::getEffectiveConfirmationRequired()``). For the ambiguous case (a disabled account confirmed by neither the user nor an admin) the safe option is chosen and an admin confirmation is required; such accounts can always be released from the femanager backend module. Security: usergroup privilege escalation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This version closes a privilege escalation in the frontend usergroup selection. The registration, edit and invitation forms can render a usergroup ``