{"id":77,"date":"2022-10-04T09:00:52","date_gmt":"2022-10-04T09:00:52","guid":{"rendered":"https:\/\/www.roblsmith.co.uk\/blog\/?p=77"},"modified":"2022-09-21T19:27:30","modified_gmt":"2022-09-21T19:27:30","slug":"a-responsible-cybersecurity-disclosure-boots-com","status":"publish","type":"post","link":"https:\/\/roblsmith.co.uk\/blog\/2022\/10\/a-responsible-cybersecurity-disclosure-boots-com\/","title":{"rendered":"A responsible cybersecurity disclosure &#8211; boots.com"},"content":{"rendered":"<p>XSS or Cross Site Scripting is a common form of attack a hacker might perform on a website.<\/p>\n<p>Now pretty much every shopping website, or even most websites, have a search facility.<br \/>\nIf there are no search results I\u00a0<em>tend<\/em> to get the message &#8220;xxxxxx not found&#8221; or &#8220;Sorry, no results found for yyyyyy&#8221;<\/p>\n<p>One thing I like to do when I am bored is try and innocent html tags on search pages such as <code>lorem&lt;em&gt;ipsum<\/code> to see what happens. I was on Boots anyway, searching for facemasks because of the virus (when I first found this vulnerability), however I finished finding what I needed, and did some other searches&#8230;<\/p>\n<p>Now, If a website is handling searches properly I would get &#8220;lorem&lt;em&gt;ipsum&#8221; returned to me or just &#8220;loremipsum&#8221; (with the tags stripped).<\/p>\n<p>If the website is interpreting the tags, I will see &#8220;lorem<em>ipsum&#8221;<\/em>, this is bad.<\/p>\n<p>This is what happened on the Boots website, naughty..<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-91 size-large\" src=\"http:\/\/www.roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem-1024x344.png\" alt=\"\" width=\"525\" height=\"176\" srcset=\"https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem-1024x344.png 1024w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem-300x101.png 300w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem-151x51.png 151w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem-768x258.png 768w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem-320x108.png 320w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem-600x200.png 600w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-lorem.png 1514w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Now let&#8217;s take B&amp;M Retail, their website just spits my search query out &#8211; they pass the test.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-98 size-large\" src=\"http:\/\/www.roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/bm-good-1024x363.png\" alt=\"\" width=\"525\" height=\"186\" srcset=\"https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/bm-good-1024x363.png 1024w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/bm-good-300x106.png 300w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/bm-good-151x54.png 151w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/bm-good-768x273.png 768w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/bm-good-320x114.png 320w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/bm-good.png 1251w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/p>\n<p>Now back to Boots&#8230;<\/p>\n<p>My next go to is to inject a simple &#8216;alert&#8217; box by searching for <code>&lt;script&gt;alert(1)&lt;\/script&gt;<\/code>.<br \/>\nAgain, totally innocent, but if I can inject a script here, I&#8217;m likely to be able to do more malicious things.<br \/>\nWhen trying this, my request was blocked.. So it allowed some elements, but not others. Interesting, but there are other ways to craft dodgy things&#8230;<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-95 size-full\" src=\"http:\/\/www.roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-blocked-1.png\" alt=\"\" width=\"799\" height=\"462\" srcset=\"https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-blocked-1.png 799w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-blocked-1-300x173.png 300w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-blocked-1-151x87.png 151w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-blocked-1-768x444.png 768w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-blocked-1-320x185.png 320w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>SVG is another method of attack which can be used by hackers.<br \/>\nI tried drawing a simple square using <code>&lt;svg width=\"100\" height=\"100\"&gt;&lt;rect x=\"50\" y=\"20\" rx=\"20\" ry=\"20\" width=\"50\" height=\"50\" style=\"fill:red;stroke:black;\" \/&gt;&lt;\/svg&gt;<\/code><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-medium wp-image-96\" src=\"http:\/\/www.roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-svg-vuln-300x148.png\" alt=\"\" width=\"300\" height=\"148\" srcset=\"https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-svg-vuln-300x148.png 300w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-svg-vuln-151x74.png 151w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-svg-vuln-768x378.png 768w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-svg-vuln-320x158.png 320w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-svg-vuln.png 851w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>BOOM!<\/p>\n<p>While this is a very simple SVG XSS attack, given the true power of SVGs &#8211; a real hacker may inject some convincing message\/ad which appears to be Boots, when in fact its not.<br \/>\nThe attacker may then redirect the user to a malicious site to steal credentials for instance.<\/p>\n<p>Why is this a problem? Well the SVG element&#8217;s code can be passed in via a simple GET request as part of the search string, e.g.<br \/>\n<code>https:\/\/www.boots.com\/sitesearch?searchTerm=%3Csvg%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20x%3D%2250%22%20y%3D%2220%22%20rx%3D%2220%22%20ry%3D%2220%22%20width%3D%2250%22%20height%3D%2250%22%20style%3D%22fill%3Ared%3Bstroke%3Ablack%3B%22%20%2F%3E%3C%2Fsvg%3E<\/code><\/p>\n<p>Now, if that link was sent in email which was a spoofed as Boots, no doubt someone could fall for it &#8211; provided it was well executed&#8230; The link goes to Boots, so why would someone question it?<\/p>\n<p>Now, a red circle wont do any damage. But what if I had an &#8220;invisible&#8221; link which went to an attacker&#8217;s website or something? Like how this innocent hyperlink went to Google<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-100 size-large\" src=\"http:\/\/www.roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-poc-1024x402.png\" alt=\"\" width=\"525\" height=\"206\" srcset=\"https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-poc-1024x402.png 1024w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-poc-300x118.png 300w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-poc-151x59.png 151w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-poc-768x301.png 768w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-poc-320x126.png 320w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/boots-poc.png 1290w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/p>\n<p>Or a link to a prize that I&#8217;ve won?<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-111 size-large\" src=\"http:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568-1024x309.png\" alt=\"\" width=\"525\" height=\"158\" srcset=\"https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568-1024x309.png 1024w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568-300x91.png 300w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568-151x46.png 151w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568-768x232.png 768w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568-1536x464.png 1536w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568-320x97.png 320w, https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/07\/boots-vuln-poc-e1657134038568.png 1919w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>So this is the point I give Boots a heads up.<\/p>\n<p><em>While I received no further updates from Boots, when I tried the exploit again in August I instead got a &#8220;Generic Error&#8221; page back. So it looks like it has been resolved.<\/em><\/p>\n<p><span style=\"text-decoration: underline;\">Timeline:<br \/>\n<\/span><em><strong>08\/03\/2021<\/strong> &#8211; Initial email sent to customer services requesting details of who to contact<\/em><br \/>\n<em><strong>11\/03\/2021<\/strong> &#8211; Generic customer service reply with generic email to procurement about &#8220;my product idea&#8221;<\/em><br \/>\n<em><strong>20\/06\/2022<\/strong> &#8211; Forgot about this until I decided to migrate my blog across to a new host<\/em><br \/>\n<em><strong>25\/06\/2022<\/strong> &#8211; Confirmed vulnerability still active<\/em><br \/>\n<em><strong>25\/06\/2022<\/strong> &#8211; Reached out via email (could only find customer services) asking for a suitable contact<br \/>\n<strong>04\/07\/2022<\/strong> &#8211; Response asking for further details and assurance it will be passed to Digital-Ops.<br \/>\n<\/em><em><strong>06\/07\/2022<\/strong> &#8211; Stonewalled from getting direct contact to someone on their web team. Full details handed reluctantly over to customer services manager &#8211; who will be playing piggy-in-the-middle. Asked about a their\u00a0VDP<\/em><br \/>\n<em><strong>04\/10\/2022<\/strong> &#8211; Disclosure automatically made public after 90 days of no further contact, or a prohibition of disclosing, despite asking.\u00a0<\/em><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>XSS or Cross Site Scripting is a common form of attack a hacker might perform on a website. Now pretty much every shopping website, or even most websites, have a search facility. If there are no search results I\u00a0tend to get the message &#8220;xxxxxx not found&#8221; or &#8220;Sorry, no results found for yyyyyy&#8221; One thing&#8230;<\/p>\n","protected":false},"author":2,"featured_media":81,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"spay_email":""},"categories":[10],"tags":[22],"jetpack_featured_media_url":"https:\/\/roblsmith.co.uk\/blog\/wp-content\/uploads\/2022\/06\/the-boots-company-plc-logo-vector-1.png","_links":{"self":[{"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/posts\/77"}],"collection":[{"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=77"}],"version-history":[{"count":28,"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/posts\/77\/revisions"}],"predecessor-version":[{"id":166,"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/posts\/77\/revisions\/166"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/media\/81"}],"wp:attachment":[{"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=77"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=77"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/roblsmith.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=77"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}