Cross-Site Scripting in Content Rendering
Description
Bootstrap Package is a theme for TYPO3. It has been discovered that rendering content in the website frontend is vulnerable to cross-site scripting. A valid backend user account is needed to exploit this vulnerability. Users of the extension, who have overwritten the affected templates with custom code must manually apply the security fix. Update to version 7.1.2, 8.0.8, 9.1.4, 10.0.10 or 11.0.3 of the Bootstrap Package that fix the problem described. Updated version are available from the TYPO3 extension manager, Packagist and at https://extensions.typo3.org/extension/download/bootstrap_package/.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
bk2k/bootstrap-packagePackagist | >= 7.1.0, < 7.1.2 | 7.1.2 |
bk2k/bootstrap-packagePackagist | >= 8.0.0, < 8.0.8 | 8.0.8 |
bk2k/bootstrap-packagePackagist | >= 9.0.0, < 9.0.4 | 9.0.4 |
bk2k/bootstrap-packagePackagist | >= 9.1.0, < 9.1.3 | 9.1.3 |
bk2k/bootstrap-packagePackagist | >= 10.0.0, < 10.0.10 | 10.0.10 |
bk2k/bootstrap-packagePackagist | >= 11.0.0, < 11.0.3 | 11.0.3 |
Affected products
1- Range: >= 7.1.0, < 7.1.2
Patches
1de3a568fc311[SECURITY] Ensure content element subheader is HTML encoded
5 files changed · +13 −13
Resources/Private/Partials/ContentElements/Carousel/Item/CallToAction.html+2 −2 modified@@ -4,9 +4,9 @@ <f:if condition="{item.data.nav_title}"> <div>{item.data.nav_title}</div> </f:if> - <h{item.data.header_layout} class="carousel-item-header{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.header}</f:format.htmlentitiesDecode></h{item.data.header_layout}> + <h{item.data.header_layout} class="carousel-item-header{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.header}</f:format.htmlspecialchars></h{item.data.header_layout}> <f:if condition="{item.data.subheader}"> - <h{item.data.subheader_layout} class="carousel-item-subheader{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.subheader}</f:format.htmlentitiesDecode></h{item.data.subheader_layout}> + <h{item.data.subheader_layout} class="carousel-item-subheader{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.subheader}</f:format.htmlspecialchars></h{item.data.subheader_layout}> </f:if> <f:if condition="{item.data.bodytext}"> <div class="carousel-item-bodytext">
Resources/Private/Partials/ContentElements/Carousel/Item/Header.html+2 −2 modified@@ -3,9 +3,9 @@ <div class="valign" {f:if(condition: item.data.text_color,then:'style="color: {item.data.text_color};"')}> <div class="vcontainer"> <div class="carousel-text-inner"> - <h{item.data.header_layout} class="carousel-header awesome{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.header}</f:format.htmlentitiesDecode></h{item.data.header_layout}> + <h{item.data.header_layout} class="carousel-header awesome{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.header}</f:format.htmlspecialchars></h{item.data.header_layout}> <f:if condition="{item.data.subheader}"> - <h{item.data.subheader_layout} class="carousel-subheader awesome{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.subheader}</f:format.htmlentitiesDecode></h{item.data.subheader_layout}> + <h{item.data.subheader_layout} class="carousel-subheader awesome{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.subheader}</f:format.htmlspecialchars></h{item.data.subheader_layout}> </f:if> </div> </div>
Resources/Private/Partials/ContentElements/Carousel/Item/TextAndImage.html+2 −2 modified@@ -2,9 +2,9 @@ <f:link.typolink parameter="{item.data.link}" additionalAttributes="{draggable:'false'}"> <div class="valign"> <div class="carousel-text vcontainer" {f:if(condition: item.data.text_color,then: 'style="color: {item.data.text_color};"')}> - <h{item.data.header_layout} class="carousel-header{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.header}</f:format.htmlentitiesDecode></h{item.data.header_layout}> + <h{item.data.header_layout} class="carousel-header{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.header}</f:format.htmlspecialchars></h{item.data.header_layout}> <f:if condition="{item.data.subheader}"> - <h{item.data.subheader_layout} class="carousel-subheader{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.subheader}</f:format.htmlentitiesDecode></h{item.data.subheader_layout}> + <h{item.data.subheader_layout} class="carousel-subheader{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.subheader}</f:format.htmlspecialchars></h{item.data.subheader_layout}> </f:if> <f:format.html>{item.data.bodytext}</f:format.html> </div>
Resources/Private/Partials/ContentElements/Carousel/Item/Text.html+2 −2 modified@@ -4,9 +4,9 @@ <f:if condition="{item.data.nav_title}"> <div>{item.data.nav_title}</div> </f:if> - <h{item.data.header_layout} class="carousel-item-header{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.header}</f:format.htmlentitiesDecode></h{item.data.header_layout}> + <h{item.data.header_layout} class="carousel-item-header{f:if(condition: item.data.header_class, then: ' {item.data.header_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.header}</f:format.htmlspecialchars></h{item.data.header_layout}> <f:if condition="{item.data.subheader}"> - <h{item.data.subheader_layout} class="carousel-item-subheader{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlentitiesDecode>{item.data.subheader}</f:format.htmlentitiesDecode></h{item.data.subheader_layout}> + <h{item.data.subheader_layout} class="carousel-item-subheader{f:if(condition: item.data.subheader_class, then: ' {item.data.subheader_class}')}{f:if(condition: item.data.header_position, then: ' text-{item.data.header_position}')}"><f:format.htmlspecialchars doubleEncode="false">{item.data.subheader}</f:format.htmlspecialchars></h{item.data.subheader_layout}> </f:if> <f:if condition="{item.data.bodytext}"> <div class="carousel-item-bodytext">
Resources/Private/Partials/ContentElements/Header/SubHeader.html+5 −5 modified@@ -3,27 +3,27 @@ <f:switch expression="{layout}"> <f:case value="1"> <h2 class="{class} {positionClass}"> - <span><f:format.htmlentitiesDecode>{subheader}</f:format.htmlentitiesDecode></span> + <span><f:format.htmlspecialchars doubleEncode="false">{subheader}</f:format.htmlspecialchars></span> </h2> </f:case> <f:case value="2"> <h3 class="{class} {positionClass}"> - <span><f:format.htmlentitiesDecode>{subheader}</f:format.htmlentitiesDecode></span> + <span><f:format.htmlspecialchars doubleEncode="false">{subheader}</f:format.htmlspecialchars></span> </h3> </f:case> <f:case value="3"> <h4 class="{class} {positionClass}"> - <span><f:format.htmlentitiesDecode>{subheader}</f:format.htmlentitiesDecode></span> + <span><f:format.htmlspecialchars doubleEncode="false">{subheader}</f:format.htmlspecialchars></span> </h4> </f:case> <f:case value="4"> <h5 class="{class} {positionClass}"> - <span><f:format.htmlentitiesDecode>{subheader}</f:format.htmlentitiesDecode></span> + <span><f:format.htmlspecialchars doubleEncode="false">{subheader}</f:format.htmlspecialchars></span> </h5> </f:case> <f:case value="5"> <h6 class="{class} {positionClass}"> - <span><f:format.htmlentitiesDecode>{subheader}</f:format.htmlentitiesDecode></span> + <span><f:format.htmlspecialchars doubleEncode="false">{subheader}</f:format.htmlspecialchars></span> </h6> </f:case> <f:defaultCase>
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/advisories/GHSA-p48w-vf3c-rqjxghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2021-21365ghsaADVISORY
- github.com/benjaminkott/bootstrap_package/commit/de3a568fc311d6712d9339643e51e8627c80530bghsax_refsource_MISCWEB
- github.com/benjaminkott/bootstrap_package/security/advisories/GHSA-p48w-vf3c-rqjxghsax_refsource_CONFIRMWEB
- typo3.org/security/advisory/typo3-ext-sa-2021-007ghsax_refsource_MISCWEB
News mentions
0No linked articles in our index yet.