When the CMS writes backend passwords in plain text: TYPO3 14.2 and CVE-2026-6553

Ein einzelner Messingschlüssel auf Beton neben einem aufgeschlagenen Papier-Ledger, dessen halb abgehobene Seite einen Carbon-Schlüsselabdruck in dunklem Oxblood-Ton zeigt; Messingstempel und ledernes Notizbuch im kühlen Nordlicht.

One week after the disclosure of CVE-2026-6553, many TYPO3 14.2 installations are still in a state in which backend passwords sit in the database without encryption. The 14.3.0 update closes the vulnerability. It does not clean up the data set.

TL;DR — the 90-second summary

CVE-2026-6553

The backend user settings module in TYPO3 14.2.0 serialises sensitive fields together with UI preferences — passwords end up in plain text in be_users.uc and user_settings

Affected version

only TYPO3 14.2.0 — 14.1.x and earlier are not affected, 14.3.0 is the fix

Database touch

updating to 14.3.0 is not enough — the columns must be cleaned and all backend passwords force-rotated

Follow-on problem

backups from the 14.2.0 window contain plain-text passwords — their classification changes

Four guardrails

maturation window for LTS minors, Composer lockfile, sensitive backup classification, structured cleanup rather than only patching

NIS-2 lever

authentication-data protection is mandatory — without inventory and audit log the incident cannot be reconstructed after the fact

 

What is the problem?

On 24 April 2026 the TYPO3 security team published the advisory for CVE-2026-6553. Only version 14.2.0 (LTS) is affected: in the new backend user-settings module, sensitive fields such as passwords were serialised together with the usual UI settings and ended up in plain text in the columns uc and user_settings of the be_users table. The official fix version is 14.3.0.

It is a classic separation flaw in the data model. In TYPO3, backend settings (UI preferences) and identity attributes (password, email) have historically sat on two separate paths because the one path has to be handled differently from the other — with hashing, with audit logging, with a clear source of truth. In 14.2.0 that separation was dropped in the new module. The result is a database that has lost part of its own protection layer — without it being visible during normal operation.

For us as an agency operating TYPO3 in client setups, that was a short Sunday evening of counting rows. No-one on our managed platforms had used the 14.2.0 backend user-settings module in a way that would have triggered the issue. That is not coincidence — it is the consequence of our policy not to install TYPO3 LTS major and minor updates on the day of release.

Impact: plain-text passwords are not only a backup problem

The code runs, the backend responds, the login works. The only thing broken is an invisible assumption — namely that the contents of the be_users table consist of a hashed password field and otherwise harmless UI data. Anyone building on that assumption (because they classify backups as non-sensitive or do not audit database read access) now carries the risk in their routines without noticing.

Backups become retroactively more sensitive

Anyone who took a backup during the window in which 14.2.0 was in production — hosting, internal job, external service provider — potentially has plain-text passwords in their backup pool. That turns every such backup into a sensitive data carrier and changes the requirements for storage, access and disposal.

Password reuse becomes a cross-system risk

Backend users in TYPO3 are often not only editors but external partners, agencies, test accounts. The assumption that these people assign a unique strong password to every system rarely survives a sober check. A plain-text password stored in be_users.uc can therefore open other systems where TYPO3 itself is not in play at all.

NIS-2 makes it a documented incident

NIS-2 explicitly requires protection of authentication data in risk management as well as defined patch management. Anyone in NIS-2 scope is required to reconstruct an incident of this class in a structured way — namely: which systems were affected, which backups, which people, which follow-up measures. Without a clean inventory and an audit log, that cannot be delivered after the fact.

Who is affected?

At the core: every TYPO3 installation that actively rolled out the LTS minor between the 14.2.0 release and the 14.3.0 patch. Three constellations are particularly relevant.

Anyone who never ran 14.2.0 in production, or who switched to 14.3.0 before 24 April 2026, is not directly affected. Backups from the 14.2.0 window remain sensitive data carriers regardless.

Mitigation and immediate actions — four steps, in this order

Quick start in the order in which we are currently cleaning up. Each step assumes the previous one.

 

# 1. Apply the update (Composer-based)
composer require typo3/cms-core:^14.3.0 --update-with-dependencies
vendor/bin/typo3 upgrade:run

# 2. Inspect and clean the be_users table
mysql -e "SELECT uid, username, LENGTH(uc) AS uc_len \
         FROM be_users WHERE uc IS NOT NULL"
mysql -e "UPDATE be_users SET uc = NULL, user_settings = NULL"

# 3. Forced password reset for all backend users
mysql -e "UPDATE be_users SET password = '', \
         tx_extbase_type = 'reset_required'"

 

1. Maturation window for minor releases on LTS lines

In our update path, a 14.2.0 is not installed on the day of release — but only after it has survived a defined maturation period. In this concrete case the window would have been enough to wait for 14.3.0 and simply skip 14.2.0. The exception remains a known actively-exploited CVE — then we deliberately move to the new version with calculated risk.

2. Composer-based installation with a committed lockfile

For TYPO3 the same rule applies: no "latest" versions, no composer update in CI — only composer install against a versioned composer.lock. That prevents a spontaneously updated dependency from slipping unnoticed into a build. Same discipline as in our Composer CVE post.

3. Database backups classified as sensitive by default

Anyone who runs backups as "internal, confidential" by default can react to incidents like CVE-2026-6553 without having to reinvent their own classification first. That saves weeks. Retention and disposal rules are defined in the backup concept, not improvised during the incident.

4. Structured cleanup, not just an update

When a flaw compromises productive data, the update is step one of three. Step two is the cleanup of the already-stored plain-text data in be_users.uc and user_settings. Step three is the forced password reset for all backend users plus MFA enablement. Only then is the incident cleanly closed.

Detection and verification

Five core questions — in half an hour you have clarity on your incident status.

Quick-check SQL we run before every cleanup:

 

-- Which be_users actually have user_settings/uc?
SELECT uid, username,
       CASE WHEN uc IS NOT NULL THEN LENGTH(uc) ELSE 0 END AS uc_len,
       CASE WHEN user_settings IS NOT NULL THEN LENGTH(user_settings) ELSE 0 END AS us_len
FROM be_users
ORDER BY uc_len + us_len DESC;

-- Look for typical plain-text indicators
SELECT uid, username
FROM be_users
WHERE uc LIKE '%password%' OR user_settings LIKE '%password%';

Operator recommendation

What should be operationally in place for which TYPO3 setup right now — depending on where you stand today.

Cross-references: the Composer CVE post for update discipline, the Managed Hosting post for backup classification, and the Outsourced IT Department post for embedding into NIS-2 discipline.

Conclusion

Most pipeline reviews we have done in the past months show the same pattern: TYPO3 gets patched because the update arrives. It is rarely checked whether the data set after the update still matches the assumption the update was written against. With CVE-2026-6553, that is exactly where the extra work sits.

The question is not whether 14.3.0 is rolled out at your site. It is whether the be_users table in your productive database still carries traces from 14.2.0 today — and whether anyone has systematically checked that.

A longer write-up with concrete SQL snippets for the cleanup of be_users.uc and user_settings and the reasoning why a maturation window on LTS minor releases for TYPO3 is structurally sensible is available (in German) at ole-hartwig.eu.

Frequently asked questions about the TYPO3 CVE

Do we have to report the incident under NIS-2?+

If you fall under NIS-2, that depends on the exposure. A successful exploitation with provable data exfiltration is a reportable incident — a path that was closed by the patch without exploitation usually is not. What belongs in the records in any case: an internal note about the assessment, the update, the cleanup and the password rotation. That kind of documentation is exactly what the BSI expects in the next audit.

How much effort is the be_users cleanup?+

Less than most teams assume. A targeted SQL script removes the non-UI fields from uc and user_settings in seconds. The accompanying work takes longer: pull a backup beforehand, set up the reset workflow for all backend users, switch on MFA, document the audit entry. For a mid-sized installation we plan with half a day including documentation.

What does "maturation window for minor releases" mean in practice?+

A new minor release on an LTS line does not enter our update path on release day. It is only considered after a defined maturation window — typically two to four weeks, depending on sensitivity. That gives the community and maintainers time to detect a bug or security issue. The exception is always a known, actively exploited CVE in the running version.

Isn't the update to 14.3.0 enough on its own?+

The update prevents further plain-text data from being written. Plain-text fields already stored in be_users.uc and user_settings remain there until they are actively cleaned up. Closing the incident properly therefore needs three steps: update, database cleanup, forced password reset for all backend users.

We never rolled out 14.2.0 — are we still affected?+

Not directly. The plain-text data is only created when backend users used the user-settings module on 14.2.0. Anyone who upgraded directly from 14.1 to 14.3, or only ran 14.2.0 briefly on a staging system, mainly needs to check whether backups were taken during that window. If those backups are still in retention, mark them as sensitive.

Before the next audit asks about your be_users — let's talk about the cleanup.

How clean is your be_users table really?

If you ran TYPO3 14.2.0 in any client setup, the next 60 minutes pay off. We walk through your be_users table with you: were passwords stored in plain text, which backups are now retroactively sensitive, who needs an external password reset — and what the structured documentation for a possible NIS-2 inquiry needs to contain.

This is the operational routine from DevSecOps as a Service and the Outsourced IT Department — TYPO3 incident handling as data-cleanup discipline, not as patch hope.

Book a call directly