Releases 12.1 

Release 12.1.4 

This is a security release for TYPO3 12 LTS.

!!! Recommendation: align existing Solr volumes with the new configset 

The ext_solr_12_1_0 configset now sets the Unified Highlighter as default on both the /select and /browse request handlers. Solr volumes created from older configsets default to the legacy highlighter and remain vulnerable to the FieldExistsQuery HTTP 500 oracle when queried directly (bypassing EXT:solr). Run the bundled migration script against the existing configset to align the defaults; the script is idempotent and writes a solrconfig.xml.Backup-SST-235567 backup next to the modified file: * Docker/SolrServer/docker-entrypoint-initdb.d-as-sudo/fix-SST-235567-2026050810000025-highlighter-defaults.sh EXT:solr itself enforces the Unified Highlighter unconditionally in PHP, so this configset alignment is a defence-in-depth measure for clients that query Solr directly.

!!! New: TypoScript settings for query-syntax handling 

Two new TypoScript settings govern how user input on tx_solr[q] is parsed:

  • plugin.tx_solr.search.query.userFields — whitelist of fields a Solr field-selector (field:value) may target. By default derived from query.queryFields; selectors against other fields are now treated as literal terms and silently miss. Sites that rely on selectors against non-qf fields must extend the whitelist via a scalar override or the add / remove sub-keys.
  • plugin.tx_solr.search.query.allowSolrOperatorSyntax — toggle for operator-syntax passthrough. Default 1 keeps the documented + - && || ! * ? UX functional; set to 0 for strict mode (additionally escapes | & ;). Selector, range and grouping characters (: [ ] ( ) { } ^ " ~ \ /) are always escaped regardless.

See tx_solr.search for full reference details.

!!! Breaking: multi-value cObjs now use JSON transport 

The SOLR_MULTIVALUE, SOLR_RELATION and SOLR_CLASSIFICATION content objects now return their multi-value payload as json_encode($array) instead of serialize($array), and the indexer decodes it with json_decode() instead of unserialize(). Because json_decode() never reconstructs PHP objects, the indexer can no longer be turned into a PHP object-injection sink by an attacker who can influence an indexed record field.

Third-party content objects that returned serialize($array) for a multi-value Solr field must switch to json_encode($array); no other change is required.

!!! Security: additionalFilters can no longer preempt the siteHash filter 

Request-provided tx_solr[additionalFilters] could register a named siteHash filter that AbstractQueryBuilder::useFilter() refused to overwrite, so the system siteHash filter added later by AccessComponent was dropped. In a shared-Solr-core multi-site installation this let an anonymous visitor of one site read public documents of another site sharing the same core (CVE-2026-56094).

EXT:solr now strips the reserved filter names siteHash and access from request-provided additionalFilters before they reach the query, and applies the system siteHash filter with remove-then-set semantics so request input can no longer preempt it. Filters that integrators set server-side — TypoScript plugin.tx_solr.search.query.filter., plugin/FlexForm, or PSR-14 events — are unaffected.

Impact for integrators: a frontend request can no longer override siteHash (or access) through tx_solr[additionalFilters]. Cross-site search must be configured server-side via plugin.tx_solr.search.query.allowedSites as documented in tx_solr.search.

!!! Security: detail view enforces site and access restrictions (CVE-2026-56093) 

The detail action of the pi_results plugin looked up a document by its documentId without applying the current site's siteHash filter or the frontend user-group access filter. An anonymous visitor who knew or guessed a valid documentId could therefore retrieve access-restricted documents through the detail view — a path that was less restricted than the regular search.

The direct documentId lookup now applies the same siteHash and frontend user-group filters as the normal search path. A documentId that resolves to no accessible document — unknown, from another site, or restricted for the current visitor — yields the site's configured 404 page. The response is uniform, so it cannot be used to probe whether a restricted document exists.

As defence in depth, review whether your templates still expose data-document-id and mask it where the document id should not be publicly visible.

!!! Security: page indexer no longer forges access fields on page records (CVE-2026-56092) 

During a page-indexer sub-request, EXT:solr forced fe_group and extendToSubpages to public values on every pages record it touched, so the indexer itself would not be blocked by access restrictions.

On TYPO3 12 that override was applied where TYPO3 Core discards it again, so it never reached the shared rootline cache and no access bypass resulted. On TYPO3 13 the same override was persisted, letting anonymous visitors reach pages restricted only by an ancestor page's extendToSubpages.

The indexer no longer forges these fields. The access bypass it needed during indexing was already provided safely, without touching any persisted cache, by EXT:solr's other, unaffected listeners.

All Changes 

  • [SECURITY] Fix CVE-2026-56096 — close FVH FieldExistsQuery HTTP 500 oracle by @dkd-kaehm in 73c4a52af
  • [SECURITY] Fix CVE-2026-56096 — edismax uf whitelist by @dkd-kaehm in 918c4c957
  • [SECURITY] Fix CVE-2026-56096 — escape user query syntax by @dkd-kaehm in a63c3e586
  • !!![SECURITY] Fix CVE-2026-56095 — JSON transport for multi-value cObjs by @dkd-kaehm in 268bc8124
  • [SECURITY] Fix CVE-2026-56094 — Prevent request additionalFilters from preempting siteHash filter by @dkd-kaehm in 925596ac2
  • [SECURITY] Fix CVE-2026-56093 — Enforce siteHash and access filters in detailAction lookup by @dkd-kaehm in 058af60ac
  • [TASK] Drop dead checkEnableFields() hook from UserGroupDetector by @dkd-kaehm in 17292d950
  • [SECURITY] Fix CVE-2026-56092 — Stop rootline cache poisoning via forged fe_group/extendToSubpages by @dkd-kaehm in 796e9a87f

Release 12.1.3 

This is a maintenance release for TYPO3 12 LTS that removes the temporary guzzlehttp/psr7 <2.10.0 pin introduced in 12.1.2, now that the upstream fix is available.

All Changes 

  • [TASK] Remove guzzlehttp/psr7 <2.10.0 pin (upstream fix in guzzlehttp/guzzle 7.10.2) by @dkd-kaehm in #4660

Release 12.1.2 

This is a bugfix release for TYPO3 12 LTS, primarily restoring Solr write functionality after a regression introduced by an upstream PSR-7 library update.

All Changes 

  • [BUGFIX] Pin guzzlehttp/psr7 to <2.10.0 by @dkd-kaehm in #4663
  • [BUGFIX] facet URL encoding mismatch (spaces) when using urlParameterStyle=assoc by @dkd-hauser in #4625
  • [BUGFIX] Correct field name casing for subTitle and navTitle in TypoScript queryFields by @amirarends in #4623
  • [TASK] Upgrade GitHub Actions to latest versions by @dkd-kaehm in #4600
  • [BUGFIX] Cast result offset to integer by @SaschaNoLe in #4584
  • [TASK] fix CS 2026.03.08 by @dkd-kaehm in #4579
  • [BUGFIX] pass a request with page id to Configuration manager by @WebsiteDeveloper in #4579
  • [BUGFIX] Add checks for flexParentDatabaseRow key in methods by @Myrmod in #4579

Release 12.1.1 

This is a security release for TYPO3 12 LTS.

!!! Upgrade to Apache Solr 9.10.1 

Apache Solr 9.10.1 fixes several security issues, please upgrade your Apache Solr instance!

  • CVE-2025-54988: Apache Solr extraction module vulnerable to XXE attacks via XFA content in PDFs
  • CVE-2026-22444: Apache Solr: Insufficient file-access checking in standalone core-creation requests
  • CVE-2026-22022: Apache Solr: Unauthorized bypass of certain "predefined permission" rules in the RuleBasedAuthorizationPlugin

All Changes 

  • [DOCS] Update version matrix in main for current versions by @dkd-kaehm in #4506
  • [SECURITY] Update to Apache Solr 9.10.1 by @dkd-friedrich in #4517

Release 12.1.0 

We are happy to release EXT:solr 12.1.0. The focus of this release has been on AI integrations.

New in this release 

!!! Upgrade to Apache Solr 9.10.0+ 

This release requires Apache Solr at least v9.10.0.

!!! Allow nested TypoScript on multiValue fields 

This breaking change allows nested TypoScript index configurations for multi-value/array fields like:

How to define the contents of the vector field
plugin.tx_solr.index.queue.pages.fields.someDoktypeSpecificCategory_stringM = CASE
plugin.tx_solr.index.queue.pages.fields.someDoktypeSpecificCategory_stringM {
  key.field = doktype
  80 = SOLR_RELATION
  80 {
    localField = some_doktype_specific_sys_category
    multiValue = 1
  }
}
Copied!

This feature removes the SerializedValueDetector hook without any replacements, due of new TypoScript parser in Frontend on TYPO3 12, which does not require any manual stdWrap by EXT:solr. Each custom cObect implementation returning the array/object as PHP serialized string will be used without registration or check. Note: Empty arrays/objects will not be written to the documents. Check if your system uses the SerializedValueDetector hook $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['solr']['detectSerializedValue'] remove it and check the desired fields are properly indexed.

All Changes 

  • [FEATURE] Add DenseVectorField in schemas by @dkd-kaehm in #4440
  • [TASK] Prepare release-12.1.x branch by @dkd-kaehm in #4445
  • [TASK] 12.1.x-dev Update solarium/solarium requirement from 6.3.7 to 6.4.1 by @dependabot[bot] in #4434
  • [FEATURE] Initial vector search by @dkd-friedrich in #4447
  • [TASK] 12.1.x-dev Bump solr from 9.9.0 to 9.10.0 in /Docker/SolrServer by @dependabot[bot] in #4463
  • Fix bug for phrase search with slops, bigram and trigram by Florian Rival in #4472
  • [BUGFIX] Pass TypoScript configuration to SolrWriteService by @dkd-friedrich in #4475
  • [FEATURE] Add dateRange field type in schema by @tillhoerner in #4487
  • [BUGFIX] Replace TSFE call for page type by Sebastian Klein in #4488
  • [FEATURE] Improve BeforeSearchFormIsShownEvent by Simon Schaufelberger in #4486
  • [FEATURE] Add HEALTHCHECK to Dockerfile by @dkd-kaehm in #4489
  • !!![FEATURE] allow nested TypoScript on multiValue fields by @dkd-kaehm in #4496

Contributors 

Like always this release would not have been possible without the help from our awesome community. Here are the contributors to this release.

(patches, comments, bug reports, reviews, ... in alphabetical order)

Also a big thank you to our partners who have already concluded one of our new development participation packages such as Apache Solr EB for TYPO3 12 LTS (Maintenance):

  • 3m5. Media GmbH
  • ACO Ahlmann SE & Co. KG
  • AmedickSommer Neue Medien GmbH
  • CDG 59
  • chiliSCHARF GmbH
  • Columbus Interactive GmbH
  • cosmoblonde GmbH
  • CPS GmbH
  • Davitec GmbH
  • Deutsches Literaturarchiv Marbach
  • Die Medialen GmbH
  • Digitale Offensive GmbH
  • Eidg. Forschungsanstalt WSL
  • GAYA
  • Gernot Leitgab
  • grips IT GmbH
  • Gyldendal A/S
  • HSPV NRW
  • INOTEC Sicherheitstechnik GmbH
  • Intersim AG
  • Kassenzahnärztliche Vereinigung Bayerns (KZVB)
  • La Financière agricole du Québec
  • Landesinstitut für Schule und Medien Berlin-Brandenburg
  • Landeskriminalamt Thüringen
  • Lingner Consulting New Media GmbH
  • LST AG
  • medien.de mde GmbH
  • MEDIENHAUS der Evangelischen Kirche in Hessen und Nassau GmbH
  • mellowmessage GmbH
  • NEW.EGO GmbH
  • OST Ostschweizer Fachhochschule
  • Provitex GmbH Provitex GmbH
  • Randstad Digital
  • rms. relationship marketing solutions GmbH
  • Serviceplan Suisse AG
  • sgalinski Internet Services
  • Stratis
  • Studio 9 GmbH
  • SUNZINET GmbH
  • Webtech AG
  • Werbeagentur netzpepper
  • zimmer7 GmbH

How to Get Involved 

There are many ways to get involved with Apache Solr for TYPO3:

  • Submit bug reports and feature requests on GitHub
  • Ask or help or answer questions in our Slack channel
  • Provide patches through Pull Request or review and comment on existing Pull Requests
  • Go to www.typo3-solr.com or call dkd to sponsor the ongoing development of Apache Solr for TYPO3

Support us by becoming an EB partner:

https://shop.dkd.de/Produkte/Apache-Solr-fuer-TYPO3/

or call:

+49 (0)69 - 2475218 0