Skip to content

Commit d5cf175

Browse files
committed
MC-13922: [Sec] XSS Injection in Admin For Map Location Attributes, Image Caption, Slide Name
- Add tests for image & slider
1 parent 2fa7173 commit d5cf175

File tree

6 files changed

+116
-6
lines changed

6 files changed

+116
-6
lines changed

app/code/Magento/PageBuilder/Test/Mftf/ActionGroup/ContentTypeSliderActionGroup.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@
2020
<waitForPageLoad stepKey="waitForAnimation"/>
2121
<waitForElementVisible selector="{{slideSection.base(slideIndex)}}" stepKey="waitForSlide"/>
2222
</actionGroup>
23-
<actionGroup name="unfocusSlideOptions">
24-
<click selector="{{PageBuilderPanel.searchPanel}}" stepKey="clickOutsideLiveEdit"/>
25-
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
26-
<waitForElementNotVisible selector="{{SlideOnBackend.optionTitle}}" stepKey="dontSeeSlideOptionsEdit"/>
27-
</actionGroup>
2823
<actionGroup name="inlineEditWYSIWYGFromStageForSlideCollageAppearancesInSmallColumns" extends="inlineEditWYSIWYGFromStage">
2924
<click selector="{{SlideOnBackend.base(index)}}" stepKey="focusOnEditorArea"/>
3025
</actionGroup>

app/code/Magento/PageBuilder/Test/Mftf/Data/ImageData.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,12 @@
102102
<data key="fieldName">image_caption</data>
103103
<data key="value">This is my image caption</data>
104104
</entity>
105+
<entity name="PageBuilderImageCaptionProperty_HtmlCode" type="pagebuilder_image_caption_property">
106+
<data key="name">Image Caption</data>
107+
<data key="section">general</data>
108+
<data key="fieldName">image_caption</data>
109+
<data key="value">&#x3C;img src=x onerror=&#x22;throw &#x27;error&#x27;;&#x22; /&#x3E;</data>
110+
</entity>
105111
<entity name="PageBuilderImageAltTextProperty" type="pagebuilder_alt_text_property">
106112
<data key="name">Alternative Text</data>
107113
<data key="section">seo</data>

app/code/Magento/PageBuilder/Test/Mftf/Data/SlideData.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@
2727
<data key="fieldName">slide_name</data>
2828
<data key="value">Slide 2 Name</data>
2929
</entity>
30+
<entity name="PageBuilderSlideItemSlideName_HtmlCode" type="pagebuilder_slide_item_slide_name_property">
31+
<data key="name">Name</data>
32+
<data key="section">appearance_fieldset</data>
33+
<data key="fieldName">slide_name</data>
34+
<data key="value">&#x3C;img src=x onerror=&#x22;throw &#x27;error&#x27;;&#x22; /&#x3E;</data>
35+
</entity>
3036
<!-- Minimum Height -->
3137
<entity name="PageBuilderSlideItemMinimumHeight_500" type="pagebuilder_slide_item_minimum_height_property">
3238
<data key="name">Minimum Height</data>

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderImageSection.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
</section>
3838
<section name="ImageOnStage">
3939
<element name="base" type="text" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-image')])[{{arg1}}]" parameterized="true"/>
40+
<element name="caption" type="text" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-image')])[{{arg1}}]//figcaption" parameterized="true"/>
4041
<!-- Advanced Configuration -->
4142
<element name="noAlignment" type="text" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-image')])[{{arg1}}]//figure[not(contains(@style,'text-align:'))]" parameterized="true"/>
4243
<element name="alignment" type="text" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-image')])[{{arg1}}]//figure[contains(@style,'text-align: {{arg2}};')]" parameterized="true"/>
@@ -59,7 +60,7 @@
5960
<element name="imageElement" type="button" selector="figure[data-role='image'] img:nth-child({{arg1}})" parameterized="true"/>
6061
<element name="imageElementCSS" type="text" selector="figure[data-role=image] img"/>
6162
<element name="imageHasAltText" type="button" selector="img.pagebuilder-mobile-hidden[alt='{{arg1}}']" parameterized="true"/>
62-
<element name="imageHasCaption" type="button" selector="figcaption"/>
63+
<element name="imageHasCaption" type="button" selector="figure[data-role='image'] figcaption"/>
6364
<element name="imageHasTitleTag" type="button" selector="img.pagebuilder-mobile-hidden[title='{{arg1}}']" parameterized="true"/>
6465
<element name="imageLink" type="button" selector="figure[data-role='image'] a[href='{{arg1}}']" parameterized="true"/>
6566
<element name="imageLinkTarget" type="button" selector="figure[data-role='image'] a[target='{{arg1}}']" parameterized="true"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminPageBuilderImageTest.xml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,4 +1393,57 @@
13931393
<seeElement selector="{{TabOnStorefront.base('4')}}" stepKey="seeTab4Storefront"/>
13941394
<seeElement selector="{{ImageOnStorefront.base('4')}}" stepKey="seeImage4Storefront"/>
13951395
</test>
1396+
<test name="ImageCaptionDoesNotRenderHtml">
1397+
<annotations>
1398+
<features value="PageBuilder"/>
1399+
<stories value="Image"/>
1400+
<title value="Image caption does not render HTML"/>
1401+
<description value="Image caption should not render HTML within the browser or storefront"/>
1402+
<severity value="CRITICAL"/>
1403+
<useCaseId value="MC-13922"/>
1404+
<testCaseId value="MC-13933"/>
1405+
<group value="pagebuilder"/>
1406+
<group value="pagebuilder-image"/>
1407+
</annotations>
1408+
<before>
1409+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
1410+
<createData entity="_defaultCmsPage" stepKey="createCMSPage" />
1411+
</before>
1412+
<after>
1413+
<actionGroup ref="logout" stepKey="logout"/>
1414+
<deleteData createDataKey="createCMSPage" stepKey="deletePreReqCMSPage" />
1415+
</after>
1416+
<actionGroup ref="navigateToCreatedCMSPage" stepKey="navigateToCreatedCMSPage">
1417+
<argument name="CMSPage" value="$$createCMSPage$$"/>
1418+
</actionGroup>
1419+
<!-- Add Image to Tab -->
1420+
<comment userInput="Add Image to Tab" stepKey="commentAddImageToTab"/>
1421+
<actionGroup ref="expandPageBuilderPanelGroup" stepKey="expandPageBuilderPanelGroup">
1422+
<argument name="group" value="PageBuilderImageContentType"/>
1423+
</actionGroup>
1424+
<actionGroup ref="dragContentTypeToStage" stepKey="dragContentTypeToStage">
1425+
<argument name="contentType" value="PageBuilderImageContentType"/>
1426+
</actionGroup>
1427+
<actionGroup ref="addImageToStage" stepKey="addImageToStage">
1428+
<argument name="property" value="PageBuilderImageProperty_StageJPG"/>
1429+
</actionGroup>
1430+
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditMenuOnStage">
1431+
<argument name="contentType" value="PageBuilderImageContentType"/>
1432+
</actionGroup>
1433+
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterImageCaptionProperty">
1434+
<argument name="property" value="PageBuilderImageCaptionProperty_HtmlCode"/>
1435+
</actionGroup>
1436+
<actionGroup ref="saveEditPanelSettings" stepKey="saveEditPanelSettings"/>
1437+
<!-- Verify admin -->
1438+
<comment userInput="Verify admin" stepKey="commentVerifyAdmin"/>
1439+
<dontSeeJsError stepKey="dontSeeThrownError" />
1440+
<waitForElementVisible selector="{{ImageOnStage.caption('1')}}" stepKey="waitForImageCaption" />
1441+
<see selector="{{ImageOnStage.caption('1')}}" userInput="{{PageBuilderImageCaptionProperty_HtmlCode.value}}" stepKey="seeHtmlCodeInCaption" />
1442+
<!-- Verify storefront -->
1443+
<comment userInput="Verify storefront" stepKey="commentVerifyStorefront"/>
1444+
<actionGroup ref="saveAndContinueEditCmsPage" stepKey="saveAndContinueEditCmsPage"/>
1445+
<amOnPage url="$$createCMSPage.identifier$$" stepKey="amOnPageTestPage"/>
1446+
<waitForElementVisible selector="{{ImageOnStorefront.imageHasCaption}}" stepKey="waitForCaptionVisible" />
1447+
<see selector="{{ImageOnStorefront.imageHasCaption}}" userInput="{{PageBuilderImageCaptionProperty_HtmlCode.value}}" stepKey="seeHtmlCodeOnStorefront" />
1448+
</test>
13961449
</tests>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminPageBuilderSlideItemCommonTest.xml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1862,4 +1862,53 @@
18621862
<waitForPageLoad stepKey="waitForPageLoad4"/>
18631863
<seeElement selector="{{SlideOnFrontend.messageContentTextAreaImage('1', PageBuilderImageProperty_StageJPG.value)}}" stepKey="validateImageFrontEnd"/>
18641864
</test>
1865+
<test name="SlideNameDoesNotRenderHtml">
1866+
<annotations>
1867+
<features value="PageBuilder"/>
1868+
<stories value="Slider"/>
1869+
<title value="Slide name does not render HTML"/>
1870+
<description value="The slide name does not render as HTML within the tooltip on the slide navigation dot"/>
1871+
<severity value="CRITICAL"/>
1872+
<useCaseId value="MC-13922"/>
1873+
<testCaseId value="MC-13932"/>
1874+
<group value="pagebuilder"/>
1875+
<group value="pagebuilder-slide"/>
1876+
<group value="pagebuilder-slideItemCommon"/>
1877+
</annotations>
1878+
<before>
1879+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
1880+
<actionGroup ref="navigateToAPageWithPageBuilder" stepKey="navigateToAPageWithPageBuilder"/>
1881+
<actionGroup ref="switchToPageBuilderStage" stepKey="switchToPageBuilderStage"/>
1882+
</before>
1883+
<after>
1884+
<actionGroup ref="logout" stepKey="logout"/>
1885+
</after>
1886+
<!-- Add Slider -->
1887+
<comment userInput="Add Slider" stepKey="commentAddContentType"/>
1888+
<actionGroup ref="expandPageBuilderPanelGroup" stepKey="expandPageBuilderPanelGroup">
1889+
<argument name="group" value="PageBuilderSliderContentType"/>
1890+
</actionGroup>
1891+
<actionGroup ref="dragContentTypeToStage" stepKey="dragContentTypeOntoStage">
1892+
<argument name="contentType" value="PageBuilderSliderContentType"/>
1893+
</actionGroup>
1894+
<actionGroup ref="openPageBuilderEditPanelSmallByIndex" stepKey="openEditPanelAfterDrop">
1895+
<argument name="section" value="SlideOnBackend"/>
1896+
</actionGroup>
1897+
<!-- Edit Slide 1 -->
1898+
<comment userInput="Edit Slide 1" stepKey="commentEditSlide1"/>
1899+
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterSlideNameText1">
1900+
<argument name="property" value="PageBuilderSlideItemSlideName_HtmlCode"/>
1901+
</actionGroup>
1902+
<actionGroup ref="saveEditPanelSettings" stepKey="saveEditPanel1Settings"/>
1903+
<dontSeeJsError stepKey="dontSeeThrownError" />
1904+
<actionGroup ref="unFocusOptionMenu" stepKey="unfocusSlideOptions">
1905+
<argument name="contentType" value="PageBuilderSlideContentType"/>
1906+
</actionGroup>
1907+
<moveMouseOver selector="{{SliderOnStage.slideNavigationDot('1', '1')}}" stepKey="moveMouseOverTooltip" />
1908+
<waitForPageLoad stepKey="waitForPageLoad"/>
1909+
<!-- Verify tooltip hasn't rendered HTML -->
1910+
<comment userInput="Verify tooltip hasn't rendered HTML" stepKey="commentVerifyTooltipNotRendered"/>
1911+
<waitForElementVisible selector="{{SliderOnStage.slideNavigationDotNameTooltip('1')}}" stepKey="waitForTooltipVisible" />
1912+
<see selector="{{SliderOnStage.slideNavigationDotNameTooltip('1')}}" userInput="{{PageBuilderSlideItemSlideName_HtmlCode.value}}" stepKey="seeHtmlCodeInTooltip" />
1913+
</test>
18651914
</tests>

0 commit comments

Comments
 (0)