<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>Bug Bounty &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/bug-bounty/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Tue, 10 Feb 2026 15:32:00 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>Bug Bounty &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Security Flaws in the WebMonetization Site]]></title>
		<link>https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/</link>
					<comments>https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 26 Aug 2025 11:34:33 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[CyberSecurity]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[WebMonetization]]></category>
		<category><![CDATA[xss]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=62468</guid>

					<description><![CDATA[I&#039;ve written before about the nascent WebMonetization Standard. It is a proposal which allows websites to ask users for passive payments when they visit. A visitor to this site could, if this standard is widely adopted, opt to send me cash for my very fine blog posts.  All I need to do is add something like this into my site&#039;s source code:  &#60;link rel=&#34;monetization&#34;…]]></description>
										<content:encoded><![CDATA[<p>I've written before about <a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/">the nascent WebMonetization Standard</a>. It is a proposal which allows websites to ask users for passive payments when they visit. A visitor to this site could, if this standard is widely adopted, opt to send me cash for my very fine blog posts.</p>

<p>All I need to do is add something like this into my site's source code:</p>

<pre><code class="language-html">&lt;link rel="monetization" href="https://wallet.example.com/edent"&gt;
</code></pre>

<p>A user who has a WebMonetization plugin can then easily pay me for my content.</p>

<p>But not every website is created by an individual or a single entity. Hence, the creation of the "<a href="https://webmonetization.org/tools/prob-revshare/">Probabilistic Revenue Share Generator</a>".</p>

<blockquote><p>Probabilistic revenue sharing is a way to share a portion of a web monetized page's earnings between multiple wallet addresses. Each time a web monetized user visits the page, a recipient will be chosen at random. Payments will go to the chosen recipient until the page is closed or reloaded.</p></blockquote>

<p>Nifty! But how does it work?</p>

<p>Let's say a website is created by Alice and Bob. Alice does most of the work and is to receive 70% of the revenue. Bob is to get the remaining 30%.  Within the web page's head, the following meta element is inserted:</p>

<pre><code class="language-html">&lt;link
   rel="monetization"
   href="https://webmonetization.org/api/revshare/pay/W1siaHR0cHM6Ly9leGFtcGxlLmNvbS8iLDcwLCJBbGljZSJdLFsiaHR0cHM6Ly93aGF0ZXZlci50ZXN0LyIsMzAsIkJvYiJdXQ"
/&gt;
</code></pre>

<p>The visitor's WebMonetization plugin will visit that URl and be redirected to Alice's site 70% of time and Bob's 30%.</p>

<p>If we Base64 decode that weird looking URl, we get:</p>

<pre><code class="language-json">[
   [
      "https://example.com/",
       70,
      "Alice"
   ],
   [
      "https://whatever.test/",
       30,
      "Bob"
   ]
]
</code></pre>

<p>Rather than adding multiple URls in the head, the site points to one resource and lets that pick who receives the funds.</p>

<p>There are two small problems with this.</p>

<p>The first is that you have to trust the WebMonetization.org website. If it gets hijacked or goes rogue then all your visitors will be paying someone else. But let's assume they're secure and trustworthy. There's a slightly more insidious threat.</p>

<p>Effectively, this allows an untrusted 3rd party to use the WebMonetization.org domain as an open redirect. That's useful for phishing and other abuses.</p>

<p>For example, an attacker could send messages encouraging people to visit:</p>

<p><a href="https://webmonetization.org/api/revshare/pay/W1siaHR0cHM6Ly9leGFtcGxlLmNvbS8iLDk5LCJpbWciXV0">https://webmonetization.org/api/revshare/pay/W1siaHR0cHM6Ly9leGFtcGxlLmNvbS8iLDk5LCJpbWciXV0</a></p>

<p>Click that and you'll instantly be redirected to a domain under the attacker's control. This could be particularly bad if the domain encouraged users to share passwords or other sensitive information.</p>

<p>If the Base64 data cannot be decoded to valid JSON, the API will echo back any Base64 encoded text sent to it. This means an attacker could use it to send obfuscated messages. Consider, tor example:</p>

<p><a href="https://webmonetization.org/api/revshare/pay/W1siUGxlYXNlIHZpc2l0IFJlYWxfZ29vZF9DYXNpbm9zLmJpeiBmb3IgbG90cyBvZiBDcnlwdG8gZnVuISEhIiwxMjM0NTYsImltZyJdXQ==">https://webmonetization.org/api/revshare/pay/W1siUGxlYXNlIHZpc2l0IFJlYWxfZ29vZF9DYXNpbm9zLmJpeiBmb3IgbG90cyBvZiBDcnlwdG8gZnVuISEhIiwxMjM0NTYsImltZyJdXQ==</a></p>

<p>Visit that and you'll see a message. With a bit of effort, it could be crafted to say something to encourage a visitor to enter their credentials elsewhere.</p>

<p>When I originally reported this, the site could be used to to smuggle binary payloads. For example, <a href="https://webmonetization.org/api/revshare/pay/W1siZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmtnQkFBQlhSVUpRVmxBNElEd0JBQUNRQ0FDZEFTb3dBREFBUHJWUW4weW5KQ0tpSnl0bzRCYUphUUFJSXN4NEF1OWRoRHFWQTFpMVJvUlRPN25iZHl5MDNuTTVGaHZWNjJnb1VqMzd0dXhxcGZwUGVUQlp2cko3OHcwcUFBRCsvaFZ5Rkh2WVhJck1Dam55MHo3d3FzQjkvUUUwOHhscy9BUWRYSkZYMGFkRzlsSVNzbTZrVjk2SjVGSU5CRlh6SHdmek1DcjRONnIzejUvQWEvd2ZFb1ZHWDNIOTc2c2hlM2p5UzhScUp2N0p3N2JPeG9UU1BsdTRnTmJmWFlaOVRuYmRRME1Obk1PYnlhUlFMSXU1NTZqSWowM3pmSnJWZ3FSTThHUHdSb1diMU05QWZ6RmU2TXRnMTN1RUlxclRIbWl1QnBIK2JUVkI1RUVRM3VieTBDLy9YT0FQSk9GdjRRVjhSWkRQUWQ1MTdLaHliYThKbHI5N2oya0lCSkQ5SzNtYk9IU0hpUURhc2o2WTNmb3JBVGJJZzRRWkh4V25DZXFxTWtWWWZVQWl2dUwwTC82OG1NbmFnQUFBIiw4OCwiaW1nIl1d">this URl would display an image</a> - however, it seems to have been fixed.</p>

<p>Nevertheless, it is important to recognise that the WebMonetization.org domain contains an <a href="https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html">unvalidated redirect and forwarding</a> vulnerability.</p>

<p>I recommended that they ensured that the only URls which contain legitimate payment pointers should be returned. I also suggested setting a maximum limit for URl size.</p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/#timeline">Timeline</a></h2>

<ul>
<li>2025-03-27 - Discovered and disclosed.</li>
<li>2025-08-05 - Remembered I'd submitted it and sent a follow up.</li>
<li>2025-08-26 - Automatically published.</li>
<li><ins datetime="2025-08-27T15:37:49+00:00">2025-08-27</ins> - A day after this post was published, <a href="https://github.com/interledger/publisher-tools/issues/85">the issue was made public on their repo</a>.</li>
<li><ins datetime="2025-09-11T12:25:32+00:00">2025-09-10</ins> - <a href="https://github.com/interledger/publisher-tools/issues/85#issuecomment-3274623144">Confirmed fixed</a>.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=62468&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/08/security-flaws-in-the-webmonetization-site/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[What's a better bug-bounty reward than money?]]></title>
		<link>https://shkspr.mobi/blog/2022/08/whats-a-better-reward-than-money/</link>
					<comments>https://shkspr.mobi/blog/2022/08/whats-a-better-reward-than-money/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 22 Aug 2022 11:34:13 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[money]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43384</guid>

					<description><![CDATA[Google has recently increased the price it pays out to security researchers who responsibly disclose a vulnerability.  That got me thinking. Is money the best thing with which to reward people?  There&#039;s an interesting (if a little silly) economics paper about why gift giving is inefficient.  The crux of the argument, as I understand it, is that gift-givers rarely know what recipients need or…]]></description>
										<content:encoded><![CDATA[<p>Google has recently <a href="https://bughunters.google.com/about/rules/5745167867576320/chrome-vulnerability-reward-program-rules">increased the price it pays out</a> to security researchers who responsibly disclose a vulnerability.</p>

<p>That got me thinking. Is money the best thing with which to reward people?<sup id="fnref:yes"><a href="https://shkspr.mobi/blog/2022/08/whats-a-better-reward-than-money/#fn:yes" class="footnote-ref" title="Yes. As the saying goes &quot;Money can be exchanged for goods and services&quot;" role="doc-noteref">0</a></sup></p>

<p>There's an interesting (if a little silly) <a href="https://fs.blog/the-economic-inefficiency-of-gift-giving-why-you-shouldnt-buy-presents-for-the-holidays/">economics paper about why gift giving is inefficient</a>.</p>

<p>The crux of the argument, as I understand it, is that gift-givers rarely know what recipients need or want. So they give gifts which aren't optimal. Your aunt gets you a blue cardigan. But you'd rather have received a yellow t-shirt.  Therefore you value the gift at a lower monetary cost than what the giver spent.</p>

<p>If you're happy to ignore all the social niceties around giving and receiving - I'd say it's pretty accurate. Giving the gift of cash prevents newly-weds from being inundated with toasters.  A gift registry can solve some of that problem, but inevitably means some gifters end up spending much more or much less than they wanted.</p>

<p>A happy medium is, of course, gift vouchers. As a kid, I lost count of the number of book tokens, record tokens, and cinema coupons I received.</p>

<p>Vouchers have the (dubious) advantage of being unable to be mis-spent. A harried single-parent can't turn a pampering spa-voucher into paying the gas bill, and a student going off to university can't convert book tokens into beer<sup id="fnref:beer"><a href="https://shkspr.mobi/blog/2022/08/whats-a-better-reward-than-money/#fn:beer" class="footnote-ref" title="Of course, vouchers can be exchanged for cash. Usually at a much lower value than the face price." role="doc-noteref">1</a></sup>.</p>

<p>Back when I was doing developer relations, we were always looking for ways to incentivise people to use our products. They generally fell into a few categories:</p>

<ul>
<li>Stickers and other low-value goods.</li>
<li>Phones and other expensive hardware.</li>
<li>Credit for our platform.</li>
<li>Cash prizes.</li>
<li><strong>Money-can't-buy-experiences</strong>.</li>
</ul>

<p>Would a rational developer go out and buy a 2GB USB stick shaped like our logo? Or a t-shirt with our slogan? No. But they're useful low value items.</p>

<p>Would a rational developer buy the phone we were giving away? If it was a pre-release model, it would have high monetary value and social cachet. But that doesn't pay the bills.</p>

<p>Would a rational developer want £500 worth of credit on our service? Unlikely! It didn't cost us much to give it away, and the developer knew we were trying to hook them into spending more.</p>

<p>Would a rational developer want cash? Yes! Well, unless their accountant found out and told them what the state's tithe was!</p>

<p>And so we come to the most interesting one. Money-can't-buy-experiences. A few years ago I won a hackathon. The prize was <a href="https://shkspr.mobi/blog/2014/11/walking-under-the-thames/">A guided walking tour <em>under</em> the Thames Barrier</a>.  This was <em>not</em> something anyone could pay to do. Much like a tour of Wonka's chocolate factory, it was a limited offer to see the inner workings of something magnificent.</p>

<p>So, what are the money-can't-buy prizes that an organisation like Google could offer?</p>

<p>An adult-entertainment company I worked with once offered "win a date with one of our models" as a prize. Ignoring the obvious problematic aspects of that, would you like to win a 20 minute "date" with the CEO to pitch your idea?</p>

<p>What is it worth to a young security researcher to win an internship?</p>

<p>Would you place value on sitting in the command-centre when SpaceX launches a rocket?</p>

<p>Do you want an exclusive profile badge / challenge coin / avatar for the service?</p>

<p>Sure, you could get money, but how about a ride in our top-secret prototype?</p>

<p>We have tickets to the sports final that we sponsor - wanna come sit in the corporate box?</p>

<p>Can we name a character after you in our next hit movie?</p>

<p><a href="https://twitter.com/dennishegstad/status/1553210351616925696">We'll increase the number of followers you have on our social network</a>.</p>

<p>How about a photo-op with the President / Prime Minister / Chancellor / Pope?</p>

<p>To be clear, I think cash-money is <em>probably</em> still the best. And there are an awful lot of Bug Bounty hunters out there who make a decent living fixing other people's mistakes. And, obviously, money-can't-buy is sometimes just another way of saying "we don't have to spend a lot on this".</p>

<p>But I can't help thinking that big organisations could offer something a lot more valuable - and memorable - than money.</p>

<p>What do you think? What would you like to win?</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:yes">
<p>Yes. As the saying goes "<a href="https://www.youtube.com/watch?v=dgct3Jn8pFA">Money can be exchanged for goods and services</a>"&nbsp;<a href="https://shkspr.mobi/blog/2022/08/whats-a-better-reward-than-money/#fnref:yes" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:beer">
<p>Of course, vouchers can be exchanged for cash. Usually at a much lower value than the face price.&nbsp;<a href="https://shkspr.mobi/blog/2022/08/whats-a-better-reward-than-money/#fnref:beer" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43384&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/08/whats-a-better-reward-than-money/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Responsible Disclosure: Chrome security bug let tabs draw over each other ($1k bounty)]]></title>
		<link>https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/</link>
					<comments>https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 04 Dec 2021 12:34:26 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=40136</guid>

					<description><![CDATA[Chrome for Android had a flaw which let one tab draw over another - even if the tabs were on completely different domains. A determined attacker might have been able to abuse this to convince a user to download and installed a spoofed app.  See Chrome Bug #1242315 for details.  Demo  Here&#039;s a video of me on one site (Twistory.ml) opening a link to Twitter in a new tab.  Twitter&#039;s mobile site…]]></description>
										<content:encoded><![CDATA[<p>Chrome for Android had a flaw which let one tab draw over another - even if the tabs were on <em>completely different</em> domains. A determined attacker might have been able to abuse this to convince a user to download and installed a spoofed app.</p>

<p>See <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1242315">Chrome Bug #1242315</a> for details.</p>

<h2 id="demo"><a href="https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/#demo">Demo</a></h2>

<p>Here's a video of me on one site (Twistory.ml) opening a link to Twitter in a new tab.  Twitter's mobile site contains a <a href="https://web.dev/add-manifest/">Web Manifest</a> which should prompt the user to install an app. Rather than displaying this pop-up on Twitter's tab, Chrome displays it over the unrelated tab.</p>

<p></p><div style="width: 270px;" class="wp-video"><video class="wp-video-shortcode" id="video-40136-2" width="270" height="540" preload="metadata" controls="controls"><source type="video/webm" src="https://shkspr.mobi/blog/wp-content/uploads/2021/08/Chrome-Bug.webm?_=2"><a href="https://shkspr.mobi/blog/wp-content/uploads/2021/08/Chrome-Bug.webm">https://shkspr.mobi/blog/wp-content/uploads/2021/08/Chrome-Bug.webm</a></video></div><p></p>

<h2 id="why-this-is-a-problem"><a href="https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/#why-this-is-a-problem">Why this is a problem</a></h2>

<p>Here's a (somewhat unlikely) scenario.</p>

<p>You're on, for example, Reddit's website and see an interesting looking link to an external site. You open it in a new tab. All of a sudden, a pop-up appears saying "Reddit is better in the app! Click to download!!"</p>

<p>You download it. Unbeknownst to you, the pop-up was <strong>from the external site</strong>. They saw your <code>referer</code> header and automatically crafted a manifest file which sends you to a malicious copy-cat app. That app steals your password for Reddit, clones your identity, and kills your puppy.</p>

<h2 id="googles-response"><a href="https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/#googles-response">Google's response</a></h2>

<p>I was expecting Google to close this as <code>WONTFIX</code>. In my experience, Google's attitude to lots of bugs is the same as Steve Job's infamous "<a href="https://www.engadget.com/2010-06-24-apple-responds-over-iphone-4-reception-issues-youre-holding-th.html">You're holding it wrong</a>". Blame the user for not understanding how Google's poorly-tested and confusing products work.</p>

<p>But, to be fair, it was taken seriously. I didn't have to provide any extra detail and, while it was low severity, it was fixed promptly. Kudos!</p>

<p>Then came the agonising wait to see whether Google would pay out millions of dollars for this flaw...</p>

<h2 id="bounty"><a href="https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/#bounty">Bounty</a></h2>

<p>For UI bugs like this, Google tends to award $500 - see  <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1136714">1136714</a>, <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1133183">1133183</a>, and <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=841622">841622</a>. Although if you can draw over the security UI, the <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1162942">rewards are much higher</a>.</p>

<p>So I was pleasantly surprised to win a US$1,000 bounty!</p>

<p>Perhaps I could have sold it on the DarkWeb™ for <del>digital Beanie Babies</del> totally legitimate crypto-currency? Nah. Too much hassle! I'm going to plough the money into our <a href="https://openbenches.org">OpenBenches</a> project.</p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/#timeline">Timeline</a></h2>

<ul>
<li>2021-08-23 Discovered and <a href="https://twitter.com/edent/status/1429734143974383617">disclosed</a>. Within a few hours it was accepted, and triaged. With the (fair) comment that "This doesn't look very scary to me."</li>
<li>2021-08-26 <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3119088">Marked as fixed by this commit</a></li>
<li>2021-08-27 <a href="https://chromium-review.googlesource.com/c/chromium/src/+/3124684/">Further patches for related issue</a></li>
<li>2021-09-28 Given a gentle nudge, the Reward Panel offered $1k.</li>
<li>2021-10-08 After an annoying amount of back-and-forth, Google accepted my registration on their supplier platform. The cause of the delay? I used the W8 form from the IRS.gov site - and Google wanted me to use an older one 🙄</li>
<li>2021-11-01 After signing up on their supplier payment platform and jumping through yet more hoops, US$992.50 was deposited in my TransferWise account. Where's the missing $7.50? TransferWise fees? Plus, obviously, a fee to transfer it to GBP and then out to my normal bank account. After all the conversion and fees, it came to £722.64. Quite why the international behemoth Google can't pay in a local currency, I've no idea.</li>
<li>2021-12-03 Bug report set to public.</li>
<li>2021-12-04 Blog post published.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=40136&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/12/responsible-disclosure-chrome-security-bug-lets-tabs-draw-over-each-other/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2021/08/Chrome-Bug.webm" length="1679390" type="video/webm" />

			</item>
		<item>
		<title><![CDATA[Full Disclosure: XSS in Getty Images]]></title>
		<link>https://shkspr.mobi/blog/2021/08/full-disclosure-xss-in-getty-images/</link>
					<comments>https://shkspr.mobi/blog/2021/08/full-disclosure-xss-in-getty-images/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 17 Aug 2021 11:39:17 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[xss]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=39358</guid>

					<description><![CDATA[I&#039;ve spent two months trying to report this issue to Getty images. They haven&#039;t responded to my emails, phone calls, Tweets, or LinkedIn messages.  I&#039;ve tried escalating through OpenBugBounty and HackerOne - but still no response.  I&#039;ve taken the decision to fully disclose this XSS because the Getty Images sites accept payments from users - and users need to be aware that the content they see on…]]></description>
										<content:encoded><![CDATA[<p>I've spent two months trying to report this issue to Getty images. They haven't responded to my emails, phone calls, Tweets, or LinkedIn messages.  I've tried escalating through OpenBugBounty and HackerOne - but still no response.  I've taken the decision to fully disclose this XSS because the Getty Images sites accept payments from users - and users need to be aware that the content they see on Getty Images sites may have been tampered with.</p>

<p>This XSS was slightly unusual.  When a user submits HTML to a site search, it should be escaped before echoing it back on the screen. And that's exactly what Getty Images does:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/06/Getty-Images-with-escaped-HTML.png" alt="Getty Images with escaped HTML." width="1024" height="582" class="aligncenter size-full wp-image-39360">

<p>Except!</p>

<p>It <em>only</em> does that if there were <strong>no results</strong> found.</p>

<p>If a malicious user can craft a search term that returns results, then HTML is passed unescaped:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/06/Javascript-popup-on-the-Getty-Images-website.png" alt="Javascript popup on the Getty Images website." width="1024" height="437" class="aligncenter size-full wp-image-39359">

<!--
https://www.gettyimages.no/photos/zzzzzzzzzzzzzzz?family=creative&license=rf&phrase=xy%3C%2Fa%3E%3Cscript%3Ealert(1)%3C%2Fscript%3E
-->

<p>So - take care if you're using the Getty Images websites. Be cautious if it asks you for your financial or personal data. It is possible that the information you're seeing has been manipulated by an adversary.</p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2021/08/full-disclosure-xss-in-getty-images/#timeline">Timeline</a></h2>

<ul>
<li>2021-06-17 Discovered on the Getty Images Norway site, replicated on the UK site. Contacted via Twitter as they have no publicly listed security contact. Responsibly disclosed via <a href="https://www.openbugbounty.org/reports/2057054/">OpenBugBounty</a></li>
<li>2021-06-23 Used <a href="https://hackerone.com/disclosure-assistance">HackerOne's Disclosure Assistance</a> programme to see if that would prompt a response.</li>
<li>2021-07-12 Tried contacting via LinkedIn and the general contact form on their website. Made several attempts over the month.</li>
<li>2021-07-29 Direct email to security employees at Getty Images.</li>
<li>2021-08-17 Blog post automatically published.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=39358&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/08/full-disclosure-xss-in-getty-images/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Responsible Disclosure - John Lewis]]></title>
		<link>https://shkspr.mobi/blog/2020/02/responsible-disclosure-john-lewis/</link>
					<comments>https://shkspr.mobi/blog/2020/02/responsible-disclosure-john-lewis/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 10 Feb 2020 08:13:36 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=33730</guid>

					<description><![CDATA[The HTML5 specification is complicated. I&#039;ve been an author on it, and even I couldn&#039;t tell you all the weird little gotchas it contains. Between that and &#34;idiosyncratic&#34; browser engines, it&#039;s a wonder the world wide web works at all.  Let&#039;s talk about the humble &#60;meta&#62; element. As its name suggests, it contains metadata about the document. A typical element might look like this:  &#60;meta…]]></description>
										<content:encoded><![CDATA[<p>The HTML5 specification is <em>complicated.</em> I've been an author on it, and even I couldn't tell you all the weird little gotchas it contains. Between that and "idiosyncratic" browser engines, it's a wonder the world wide web works at all.</p>

<p>Let's talk about <a href="https://twitter.com/edent/status/1213830425866575872">the humble <code>&lt;meta&gt;</code> element</a>. As its name suggests, it contains metadata about the document. A typical element might look like this:</p>

<p><code>&lt;meta name="description" content="Search our shop for great deals!"&gt;</code></p>

<p>What can the <code>content</code> tag contain? Text! Specifically, text where certain characters have to be encoded into their HTML entities. Now, to be fair, neither the <a href="https://www.w3.org/TR/html51/document-metadata.html#description">W3C specification</a> nor the <a href="https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element">WHAT-WG spec</a> mention how text should be encoded. They both just say:</p>

<blockquote><p>The value must be a free-form string that describes the page.</p></blockquote>

<p>Obviously, you should encode a <code>"</code> character to <code>&amp;quot;</code> because otherwise the browser might think that's the end of the string.  But the spec doesn't mention that when talking about meta elements.</p>

<p>Create a document which has this meta element:</p>

<pre><code class="language-html">&lt;meta name="description" content="My name is "Terence &lt;em&gt;Eden&lt;/em&gt;" what's yours?"&gt;
</code></pre>

<p>And you'll see this echoed into the page:</p>

<p><code>Eden" what's yours?"&gt;</code></p>

<p>Most browsers interpret rogue HTML in the <code>&lt;head&gt;</code> as <code>&lt;body&gt;</code> content.</p>

<h2 id="search-for-the-hero-inside-yourself-ukulele-cover"><a href="https://shkspr.mobi/blog/2020/02/responsible-disclosure-john-lewis/#search-for-the-hero-inside-yourself-ukulele-cover">"Search for the hero inside yourself (ukulele cover)"</a></h2>

<p>The John Lewis shop website had this problem.  If you searched for <code>lorem&lt;em&gt;ipsum</code> you saw this:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/01/Lorem-Ipsum.png" alt="Text leaking into a website." width="691" height="257" class="aligncenter size-full wp-image-33740"></p>

<p>The server <em>correctly</em> encodes the text in:</p>

<pre><code class="language-html">&lt;meta name="description" 
      content="Search results for &amp;quot;lorem&amp;amp;lt;em&amp;amp;gt;ipsum&amp;quot; on John Lewis &amp; Partners. Free delivery on orders over £50" /&gt;
</code></pre>

<p>But it <em>incorrectly</em> encoded it in the <a href="https://ogp.me/">OpenGraph meta element</a>:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/01/Broken-meta-element.png" alt="Broken meta element in HTML code." width="1287" height="128" class="aligncenter size-full wp-image-33743"></p>

<p>The server is smart enough to filter out <code>&lt;script&gt;</code> content - so an attacker can't get it to echo malicious JavaScript. But, it was possible to inject SVG content.  This is similar to <a href="https://shkspr.mobi/blog/2019/11/responsible-disclosure-svg-injection-in-three-co-uk/">a disclosure I made last year to Three.co.uk</a>.</p>

<p>Here's a basic circle injected into the page:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/01/John-Lewis-Website-with-a-big-circle-drawn-on-it.png" alt="John Lewis Website with a big circle drawn on it." width="845" height="667" class="aligncenter size-full wp-image-33739">

<p>With a well enough crafted SVG, an attacker can perform a complete site takeover or other malicious activity.  Because the content is sent in the <code>GET</code> request, an attacker can send malicious URl which looks like:</p>

<p><code>https://www.johnlewis.com/search?search-term=%22%3E%3Csvg%20xmlns...</code></p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2020/02/responsible-disclosure-john-lewis/#timeline">Timeline</a></h2>

<p>John Lewis doesn't have a <a href="https://securitytxt.org/">security.txt</a> available, and I couldn't find anything on their website about reporting security issues.</p>

<p><a href="https://twitter.com/edent/status/1213830425866575872">So I sent a Tweet</a>. When that didn't get a response - presumably because it wasn't a complaint about a missing order - I asked my security buddies. They forwarded on a message. That's great for anyone well-connected, but not a long-term solution.</p>

<p>Eventually, Twitter customer service coughed up the security team's email, so I sent them a write up on the 9th of January. I got back a generic and slightly dispiriting response:</p>

<blockquote class="social-embed" id="social-embed-1215685867274166273" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Where can I exchange all this Karma++ for biscuits? <a href="https://x.com/edent/status/1215685867274166273/photo/1">pic.x.com/YUZluHC47z</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/EN772crXkAA9pU_.png" class="social-embed-media-link"><img class="social-embed-media" alt="Thanks for your information. REDACTED takes the security of our websites and information relating to our customers, our suppliers and our own operations very seriously. As such, we shall ensure any vulnerability you have reported is risk assessed and passed to the appropriate team for remediation. We do not offer financial reward for submissions. We are actively working to put in place a bug bounty pr" src="data:image/webp;base64,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"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1215685867274166273"><span aria-label="4 likes" class="social-embed-meta">❤️ 4</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2020-01-10T17:24:31.000Z" itemprop="datePublished">17:24 - Fri 10 January 2020</time></a></footer></blockquote>

<p>A few days later, it was fixed. That's a pretty good response time!  I understand that John Lewis will be working on a responsible disclosure programme - but until then, reporting via Twitter seems to be the best way to go.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=33730&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/02/responsible-disclosure-john-lewis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Even Google forgets to renew its domains]]></title>
		<link>https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/</link>
					<comments>https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 14 Jan 2020 12:17:21 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=33237</guid>

					<description><![CDATA[tl;dr Google forgot to renew a domain used in their documentation. It was mildly embarrassing for them. And possibly a minor security concern for some new G-Suite domain administrators    Background  Choosing a good example domain, to use in documentation, is hard. You want something which is obviously an example, so that users understand they have to substitute it for their own details. But…]]></description>
										<content:encoded><![CDATA[<details open="">
  <summary><strong>tl;dr</strong></summary>
<ol><li>Google forgot to renew a domain used in their documentation.</li>
<li>It was mildly embarrassing for them.</li>
<li>And possibly a minor security concern for some new G-Suite domain administrators</li></ol>

</details>

<h2 id="background"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#background">Background</a></h2>

<p>Choosing a good example domain, to use in documentation, is hard. You want something which is obviously an example, so that users understand they have to substitute it for their own details. But it also needs to be a validly formatted domain, and shouldn't be used for anything important, and - most importantly - should be under your control.</p>

<p>In most of Google's domain documentation, they used <code>SpottedFig.org</code> - why? Who knows!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/GSuite-Admin-showing-the-domain-fs8.png" alt="GSuite Admin showing the domain." width="884" height="438" class="aligncenter size-full wp-image-33240">

<p>They used it across their support platform:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Lots-of-Google-pages-with-the-domain-in-them-fs8.png" alt="Lots of Google pages with the domain in them." width="893" height="611" class="aligncenter size-full wp-image-33242">

<p>Yet, for some reason, they didn't renew it when it expired a couple of months ago.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Domain-showing-as-available-to-purchase-fs8.png" alt="Domain showing as available to purchase." width="1212" height="414" class="aligncenter size-full wp-image-33244">

<p>So I bought it for £10. Cheap!</p>

<h2 id="security"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#security">Security</a></h2>

<p>Google's documentation said "To view DNS results for a domain already configured to use G Suite, enter spottedfig.org."</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Documentation-showing-the-domain-fs8.png" alt="Documentation showing the domain." width="667" height="495" class="aligncenter size-full wp-image-33243">

<p>As I now have control of the domain, I could have entered malicious DNS information and convinced people to use it. Perhaps redirecting their email to my servers.</p>

<h2 id="impact"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#impact">Impact</a></h2>

<p>Look, this isn't in the same league as <a href="https://www.linkedin.com/pulse/i-purchased-domain-googlecom-via-google-domains-sanmay-ved/">the chap who bought <code>Google.com</code> for $12</a>. This is a minor domain with probably zero traffic until I stumbled upon it. Looking in the Wayback Machine, it appears that the site never had any meaningful content.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Google-404-error-in-the-wayback-machine-fs8.png" alt="Google branded 404 error in the wayback machine." width="780" height="255" class="aligncenter size-full wp-image-33239"></p>

<p>Because Google specifically advised users to check the DNS entries of <code>SpottedFig.org</code>, I thought there was a minor security risk that Google users could be tricked into entering incorrect DNS information.  So I responsibly disclosed it to them.</p>

<p>Eventually, Google replaced <em>most</em> references to <code>SpottedFig</code> in their documentation. <a href="https://support.google.com/a/answer/2579951?hl=en">They inexplicably left this <code>.com</code> one though</a>:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/01/Screenshot_2020-01-07-Troubleshoot-A-records-G-Suite-Admin-Help.png" alt="Google help page." width="663" height="216" class="aligncenter size-full wp-image-33761">

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#timeline">Timeline</a></h2>

<ul>
<li>2019-11-29 Found the domain while reading the documentation close to midnight.</li>
<li>2019-11-30 Purchased the domain. Wrote a badly worded vulnerability report at 1am and sent to Google.</li>
<li>2019-12-02 Marked as "infeasible" by Google. So I wrote a better explanation. Essentially "Google tells G-Suite admins to use my domain as a template for configuration."</li>
<li>2019-12-03 Google reconsidered! Said it probably wasn't eligible for a bounty (drat!) but they'd evaluate it.</li>
<li>2019-12-11 I noticed that Google had rewritten its documentation. All references to <code>SpottedFig.org</code> were removed and replaced with a domain they control - <code>solarmora.com</code></li>
<li>2019-12-18 "As a part of our Vulnerability Reward Program, we decided that it does not meet the bar for a financial reward, but we would like to acknowledge your contribution to Google security in our <a href="https://bughunter.withgoogle.com/profile/daaf885b-933e-4425-8668-d44cca3bc0f1">Hall of Fame</a>"</li>
<li>2020-01-14 Published this blog post.</li>
</ul>

<h2 id="how-to-prevent-this-happening-to-you"><a href="https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/#how-to-prevent-this-happening-to-you">How to prevent this happening to you?</a></h2>

<p>I recommend using <a href="https://littlewarden.com/">Little Warden</a> to monitor your domains.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=33237&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/01/even-google-forgets-to-renew-its-domains/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Responsible Disclosure: SVG injection in Three.co.uk]]></title>
		<link>https://shkspr.mobi/blog/2019/11/responsible-disclosure-svg-injection-in-three-co-uk/</link>
					<comments>https://shkspr.mobi/blog/2019/11/responsible-disclosure-svg-injection-in-three-co-uk/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 23 Nov 2019 12:25:37 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[three]]></category>
		<category><![CDATA[xss]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=32644</guid>

					<description><![CDATA[Here&#039;s a quick write-up of a minor XSS (Cross Site Scripting) vulnerability on the website of Three.co.uk - one of the UK&#039;s mobile providers.  A brief recap... Most websites have a search function.  If you search for something which cannot be found, the site will often say &#34;No results found for XYZ.&#34;    If we can convince the search engine to spit out HTML, we can inject malicious content into…]]></description>
										<content:encoded><![CDATA[<p>Here's a quick write-up of a minor XSS (<a href="https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)">Cross Site Scripting</a>) vulnerability on the website of Three.co.uk - one of the UK's mobile providers.</p>

<p>A brief recap... Most websites have a search function.  If you search for something which cannot be found, the site will often say "No results found for XYZ."</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Bug-Bounty.png" alt="The website says " no="" results="" found="" for:="" bug="" bounty.""="" width="624" height="429" class="aligncenter size-full wp-image-32654">

<p>If we can convince the search engine to spit out HTML, we can inject malicious content into the page.</p>

<p>This is usually done by searching for something like <code>&lt;script&gt;alert("h4X0r");&lt;/script&gt;</code><br>
Three's website detects <code>script</code> elements as hostile and refuses to serve them back.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Access-Denied.png" alt="Access Denied message." width="569" height="198" class="aligncenter size-full wp-image-32655">

<p>But, curiously, it does allow <em>some</em> HTML elements through. The <code>&lt;u&gt;</code> underline element, for example.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Underline.png" alt="Some text on the website has been underlined." width="1178" height="315" class="aligncenter size-full wp-image-32656">

<p>It wouldn't allow <code>&lt;img&gt;</code> or <code>&lt;video&gt;</code> or most other troublesome content. But I was surprised to see it let through SVG (Scalable Vector Graphics).  This means some minor naughtiness can be had!</p>

<p>Doing a search for</p>

<pre><code class="language-_">&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128px"&gt;&lt;circle cx="64" cy="64" fill="#006add" r="64"/&gt;
</code></pre>

<p>Results in a big blue circle being drawn on the page.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Three-XSS-fs8.png" alt="The website has a circle drawn on it." width="865" height="469" class="aligncenter size-full wp-image-32650">
...and that's when I stopped and tried to find someone to report it to!</p>

<h2 id="why-is-this-a-problem"><a href="https://shkspr.mobi/blog/2019/11/responsible-disclosure-svg-injection-in-three-co-uk/#why-is-this-a-problem">Why is this a problem?</a></h2>

<p>Drawing a circle is not malicious. But SVGs are complex. They can store intricate graphics.</p>

<p>Because the search parameter is sent in the URL - <code>http://www.three.co.uk/Search/?q=&lt;svg...</code> - it would be easy for a spammer to send a message saying "Click here for great deals on Three!!!" and then use the SVG to draw a graphic encouraging the hapless user to visit a malicious site.</p>

<p>Or they could create a form to phish users' details. Or... Well, use your imagination.</p>

<h2 id="reporting-it-to-three"><a href="https://shkspr.mobi/blog/2019/11/responsible-disclosure-svg-injection-in-three-co-uk/#reporting-it-to-three">Reporting it to Three</a></h2>

<p><em>*sigh*</em> Three don't publish any security contact details. Nor do they participate in any bug bounties that I could find.</p>

<p>I reached out to my friends in the mobile industry - because I didn't have much faith in reporting it via Twitter...</p>

<blockquote class="social-embed" id="social-embed-1085560856702844928" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-1085554510343430144" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/REALSgtBrdStk" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRuwBAABXRUJQVlA4IOABAAAQCwCdASowADAAPrVMn0snJCKhqrVdUOAWiWMApd+JyHCtVMtjtnXVNOvhqNhvh1SI3REggQ49DeLP5LuEPW5AnxjKRV/vJdNCXbZ2gXD95OuRjujU8QIhaJS7+b3jzS6QAP7KtOj7nldmsLS4JkyewH+5u6DOuO+LKIyFd/JYitkXgzD2mmZR12ZpkuZgN7uq9RBgZglyJguHbILKcjUeIwrHWEQvTVCdVkpVL7bNeivVXx0eIPdbxPsQhwmd00D84fd643IfcaPgiQmdaUoqHsOllU8QOzqYv2XsNm76ODQm/zdBWw7Mq552hfd+7QaWTRYNxglhK7a0Sps1JalE8nL9+H2WtZOz4hWm+MeO7m/iCvndKobhYkKWIPz5druh70BzoR5AbZ+PgPaHcoQFC/q4DFTHSzbmjKvxBHrrr2ArwZCdirahmJdUanDiuOmjaLqKk2cPQXf5sck0eRab59hJoTEMSutn9GZ0i6uecQvycn+8o8QyaJXW+50tpDfEthimiO6iJ9z1WhKIWSbAPuuLWWSiiTKJdu/S9mfNYV2pmTMSwWllpoqsnr6P0VBo10rDtYql76k51UGNEJnhAQ7AVPZV5Mqvr3cTNXanxtcnX3uD0rooX+zSU/egAAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Kieran</p>@REALSgtBrdStk</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/ThreeUKSupport">Replying to @ThreeUKSupport</a></small><a href="https://twitter.com/ThreeUKSupport">@ThreeUKSupport</a> your site "<a href="https://www.three.co.uk">three.co.uk</a>" is showing up as 'Not Secure' and there's no valid SSL Certificate for the site. So it will appear as this. <a href="https://twitter.com/REALSgtBrdStk/status/1085554510343430144/photo/1">pic.x.com/0trepindah</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/DxCqEZiWkAAp9ds.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="" src="data:image/webp;base64,UklGRpQDAABXRUJQVlA4IIgDAADwFQCdASrQACcAPrVUo0snJSOhqrdqwOAWiWUA0713vAorBuAOgdShvg+9pOEy2/1Wmjxif5nwBo+PPuzhvRnsEfzL+tdYD9mfYl/Zw3IAsUAlsmP7L+CdDbxWZTSrUbjhV78I9kCu6FKLp+hC/Yppd3bNOkAG9z6tepL9hmEAjPZVd62mitKv+9hd/rvt5I52JwUAvfIqhXbp6FY1jqdHnpMc2vHlf59xGbie937mHJzB0VnuTMsgAP78ESIVbQdcz79aROfPwAIJnsd5oW4xWpGXzNXhuoRZAITvjyPQkpDa8K2KjVs6lwMNYGAiZ1ye/aUSODgBgQYfY23xqZ17FdohxgxWgJ6D8+SeAC03xJPXUUwDhDg8QvuMis2Qh8FlS8MSaxO06A52ySvpeKFryJ8jgA73PQKY/Qtd4VZQoj6lL495MewkFDtd4QV894T9QXVZlfsxB5nye09PsY/qJNcFWZ/FaE9IBGj0Wpg4xh+0LgeyHvcoFar2BbHb/bNFaqFKEZOd5B7RqxLV4wzKtNr2Jx+6vG4A66p5tayj659A0QpRXoKO3DB9cKT7COytXyU5+w507BXMv04kZmrersa2vmsVo7swsqqv2fyEUKjppSE+XwbIW0r/BDHW7vl/na9vYAi2zfQw2R2MdvGBlOXis6HSgirT1t3PeqouQNCPndcSkpf9TjkBPEPDRT00pmC2BX40/DjpK7hF8T5f2qwga+y7qUUbAEr+CGBtTcz+M6TDS4vnnRdzVB+T3U9MaOQey7W5qTpOfU+RBgtpSq6D8PcDkhZJxX+Ca79G9ZM+KGzawZcC1VesyDEmiDKRcaVaMRgbZYzOCRHQunUw7N/WdLIugtiKGZ1iarRKrLdaxzJDWA/PYZ3GA2QB014CrbviZfRpu7bN+IoVa5vZ/wQTy2r46kR48On1gw/zSMDWy09V39i38hzkMyfSF3R0FI6UvpmlFeE+e6Nx/hy3S7/2Rp996GJZ24p752vJaeMxGmaXk/qhYpn7SryCQ8s/XFljj7Y6pu5+fLPmRMdSpylRu58t4U9BxcBH1zwQ/DkQliC6httsHrBc/QwB/EbSvA2uRCACFSDkduBInUuzkxsAbuqZgOfgbSdj0aYPzZksgxbfEt64/7GQZwFKnEGUbGfvwVpXhSnRf+Y8psLt+SpjCIYYWf4GL2lM7n7SRNdwAAAAAAAA"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/REALSgtBrdStk/status/1085554510343430144"><span aria-label="1 likes" class="social-embed-meta">❤️ 1</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2019-01-16T15:08:58.000Z" itemprop="datePublished">15:08 - Wed 16 January 2019</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/ThreeUKSupport" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRrwBAABXRUJQVlA4ILABAACwBwCdASowADAAPrVYpU8nJKMzo4gCcBaJQBB06v1cDLA0gUzDxx26g7DcbFV9fgwC2kjW36YORYWNy4dMdl2LlssLHuEAAP7tvp7EN/qXdRl/9r1HS9RwckT/9arI0DFP//56Z/rb7LeNQSZ1hUH1nA9jFMBRK/PIM39Gm+50ffpcXBlSW/AE5vx26S4iMI/h6rWw4eKEYjmW+oFa8FX2rUXaQM98VIwAUDn6ZgWybitUInYMmnTr128gD0Sx7nz5eojf0kulj4CUaEuzud4TmfoVYER1Ct4eM+N6ugXCA+YRNQ6K3/dbcn3AqvKGzO+0nz26kPwgSZUqyIMJXQ8yd//mkTYLZtcMswCiP1TOvMLPQHgiTpDH9JAhYLM0CNzTnwdYAUYPtrCcve1kT/Hu9OkJ2/rM5O1kbAmzGGRaoGrz4ND/XUiNqp37mATkO/6XeJkbRL2sdYSg7ycXqjdxrL8XHW+SBBPGf0J3DKXf4/gyFlT36Dm88Yv8yX/g1LAv+eaVZqJnTj7m9Dx4WfhCBhmw4S7klaXQfHSSuHOWmzEpXLODEOoQVzkEd2IAAAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">ThreeUKSupport</p>@ThreeUKSupport</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/REALSgtBrdStk/status/1085554510343430144">Replying to @REALSgtBrdStk</a></small><a href="https://twitter.com/REALSgtBrdStk">@REALSgtBrdStk</a> don't worry, if you go to any pages where you need to enter any personal details or sensitive info the webpage will be https secure ☺🔐 &gt;KH</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/ThreeUKSupport/status/1085560856702844928"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2019-01-16T15:34:11.000Z" itemprop="datePublished">15:34 - Wed 16 January 2019</time></a></footer></blockquote>

<p>Eventually a friend of a friend sent me a security email address which Three do not publicise. I fired off a quick disclosure and was pleasantly surprised at how seriously they took the issue.</p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2019/11/responsible-disclosure-svg-injection-in-three-co-uk/#timeline">Timeline</a></h2>

<ul>
<li>2019-08-22 - Discovered and disclosed. Got a reply in under an hour that it was being looked at and that a 90 day disclosure was fine.</li>
<li>2019-09-20 - Three informed me the issue was fixed, which I verified. They offered to send me a token of their appreciation in lieu of a formal bug bounty.</li>
<li>2019-09-22 - Bug Bounty delivered! <img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/chocolates.jpeg" alt="A lovely box of chocolates." width="678" height="680" class="aligncenter size-full wp-image-32760">
Big ol' box of chocolates!</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=32644&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/11/responsible-disclosure-svg-injection-in-three-co-uk/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[€100 Bug Bounty from Intigriti - please stop tracking your confirmation emails!]]></title>
		<link>https://shkspr.mobi/blog/2019/01/e100-bug-bounty-from-intigriti-please-stop-tracking-your-confirmation-emails/</link>
					<comments>https://shkspr.mobi/blog/2019/01/e100-bug-bounty-from-intigriti-please-stop-tracking-your-confirmation-emails/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 05 Jan 2019 12:06:26 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[Responsible Disclosure]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=30965</guid>

					<description><![CDATA[There&#039;s a new bug bounty provider in town! The Belgian company Intigriti.  This is a quick write-up of how I found a trivial bug in their own system.  The EU has announced that it is providing funding for bug bounties on critical open source projects.  They&#039;ve split the programme between HackerOne and Intigriti.  I signed up to Intigriti, and instantly received a confirmation email.    Can you…]]></description>
										<content:encoded><![CDATA[<p>There's a new bug bounty provider in town! The <a href="https://www.intigriti.com">Belgian company Intigriti</a>.  This is a quick write-up of how I found a trivial bug in their own system.</p>

<p>The <a href="https://juliareda.eu/2018/12/eu-fossa-bug-bounties/">EU has announced that it is providing funding for bug bounties on critical open source projects</a>.  They've split the programme between <a href="https://hackerone.com/edent">HackerOne</a> and <a href="https://app.intigriti.com/profile/edent">Intigriti</a>.</p>

<p>I signed up to Intigriti, and instantly received a confirmation email. 
<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/12/Confirmation-Email.png" alt="Confirmation Email with a big button in the middle." width="540" height="391" class="aligncenter size-full wp-image-30966"></p>

<p>Can you guess where you go if you click the big "Activate Account" button?
<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/12/Weird-confrimation-address.png" alt="Weird confrimation address." width="540" height="464" class="aligncenter size-full wp-image-30967"></p>

<p>I think that's the first time I've ever seen a <code>.lu</code> domain in the wild. Hardly surprising as there's <a href="http://research.domaintools.com/statistics/tld-counts/">fewer than 90,000 of them</a>.</p>

<p>This <em>looks</em> like a phishing URl.  It doesn't use http<strong>s</strong>, it's a random string of gibberish characters, and an obscure domain.</p>

<p>It is happens, the site is legitimate. <a href="http://wtf.omg.bbq.mjt.lu/">MailJet</a> - an email marketing firm - use it as a redirector.  I assume that Intigriti use them as a mailing service, and want to track every single click you make on their emails.</p>

<p>Why are their statistics more important than your privacy and security?</p>

<h2 id="why-is-this-bad"><a href="https://shkspr.mobi/blog/2019/01/e100-bug-bounty-from-intigriti-please-stop-tracking-your-confirmation-emails/#why-is-this-bad">Why is this bad?</a></h2>

<p>Links to http sites are not secure. That means your visit to that URl can be seen by your ISP and anyone else between you and your destination.</p>

<p>A user clicking on that insecure URl risks having their request intercepted. While an attacker can't log in using the data they've captured, they would be able to redirect the user and phish their details.</p>

<h2 id="why-use-a-3rd-party"><a href="https://shkspr.mobi/blog/2019/01/e100-bug-bounty-from-intigriti-please-stop-tracking-your-confirmation-emails/#why-use-a-3rd-party">Why use a 3rd party?</a></h2>

<p>Basically, if Mailjet gets hacked, or goes rogue, they can start phishing all of Intigriti's customers.</p>

<p>Thankfully, Intigriti had the good sense to not use this tracking on their password reset emails.  Indeed, I must commend them on their general security, and their swift responsiveness to this minor security issue.</p>

<p>This isn't the hack of the century - this is low-hanging fruit. I've reported identical issues to <a href="https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/">CloudFlare</a>, <a href="https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/">Udacity</a>, and several others.</p>

<p><strong>PLEASE STOP TRACKING EVERY LINK IN YOUR EMAILS!</strong></p>

<p>Or, if you really have to - make sure your tracking server supports https, is controlled by you, and doesn't have a daft domain name.</p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2019/01/e100-bug-bounty-from-intigriti-please-stop-tracking-your-confirmation-emails/#timeline">Timeline</a></h2>

<ul>
<li>2018-12-31 - responsibly disclosed.</li>
<li>A few hours later - confirmed fixed and bounty offered. Filled in my IBAN details.</li>
<li>2019-01-02 - £90 deposited in my account.</li>
<li>2019-01-04 - permission given to publish.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=30965&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/01/e100-bug-bounty-from-intigriti-please-stop-tracking-your-confirmation-emails/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[$3k Bug Bounty - Twitter's OAuth Mistakes]]></title>
		<link>https://shkspr.mobi/blog/2018/12/twitter-bug-bounty/</link>
					<comments>https://shkspr.mobi/blog/2018/12/twitter-bug-bounty/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 14 Dec 2018 12:09:32 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[twitter]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=30658</guid>

					<description><![CDATA[Imagine the scenario.  You&#039;re trying out some cool new Twitter app. It asks you to sign in via OAuth as per usual.  You look through the permissions - phew - it doesn&#039;t want to access your Direct Messages.    You authorise it - whereupon it promptly leaks to the world all your sexts, inappropriate jokes, and dank memes. Tragic!  What&#039;s going on?  Many years ago the official Twitter API keys were…]]></description>
										<content:encoded><![CDATA[<p>Imagine the scenario.  You're trying out some cool new Twitter app. It asks you to sign in via OAuth as per usual.  You look through the permissions - <em>phew</em> - it doesn't want to access your Direct Messages.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/11/Google-TV-Twitter-DMs-fs8.png" alt="A Twitter login screen. Highlighted is the information that it cannot access your DMs." width="697" height="456" class="aligncenter size-full wp-image-30659">

<p>You authorise it - whereupon it promptly leaks to the world all your sexts, inappropriate jokes, and dank memes. Tragic!</p>

<h2 id="whats-going-on"><a href="https://shkspr.mobi/blog/2018/12/twitter-bug-bounty/#whats-going-on">What's going on?</a></h2>

<p>Many years ago <a href="https://web.archive.org/web/20151112153930/https://gist.github.com/shobotch/5160017">the official Twitter API keys were leaked</a>.  This means that app authors who can't get their app approved by Twitter are still able to access the Twitter API.</p>

<p>For some reason, Twitter's OAuth screen says that these apps do <em>not</em> have access to Direct Messages. But they do!</p>

<p>In short, users could be tricked into allowing access to their DMs.</p>

<h2 id="restrictions"><a href="https://shkspr.mobi/blog/2018/12/twitter-bug-bounty/#restrictions">Restrictions</a></h2>

<p>There are some restrictions which Twitter has put in place in the name of good security. The most important of these is restricting callback addresses. After successful login, the apps will <em>only</em> return to a <em>predefined</em> URL.  That means you can't take the official Twitter keys and send the user to your app.  This is a sensible security decision.</p>

<p>Except... Not every app has a URL. Or supports callbacks. Or is an actual app.  Twitter has a secondary authorisation mechanism for such cases.  You log in, it provides a PIN, you type the PIN into your app.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/11/iphone-pin-fs8.png" alt="Twitter login screen displaying a security PIN." width="695" height="243" class="aligncenter size-full wp-image-30660">

<p>It appears that these official PIN apps don't display the correct OAuth information to the user.</p>

<h2 id="fixing-it"><a href="https://shkspr.mobi/blog/2018/12/twitter-bug-bounty/#fixing-it">Fixing it</a></h2>

<p>Will Twitter audit old apps and make sure the permissions are correctly displayed? I hope so!</p>

<p>Ideally, Twitter should have a much more granular permissions model. Allow apps to read DMs, but not send them. Write tweets, but not delete them.  Read Tweets, but not follow people.</p>

<h2 id="timeline"><a href="https://shkspr.mobi/blog/2018/12/twitter-bug-bounty/#timeline">Timeline</a></h2>

<ul>
<li>2018-11-06 Submitted via <a href="https://hackerone.com/bugs?report_id=434763">HackerOne</a></li>
<li>2018-11-06 Provided clarification and PoC. Issue accepted.</li>
<li>2018-11-15 Proposed publication date of 30th November rejected due to US holidays.</li>
<li>2018-11-16 Bug Bounty of $2,940 offered. Filled in the W2 form to say I'm not a US taxpayer.</li>
<li>2018-11-17 <a href="https://untappd.com/user/edent/checkin/676732835">Drank a fair amount of cider</a>.</li>
<li>2018-11-21 £2,287.05 deposited in my UK bank account. There was also the option of receiving it via PayPal.</li>
<li>2018-12-06 Twitter fixed the issue and <a href="https://twitter.com/edent/status/1070810894144339974">published the bounty payout</a>. They let me know I was clear to publish.</li>
<li>2018-12-07 I provided clarification that the issue was still present on some API keys.</li>
<li>2018-12-14 Published this report.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=30658&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2018/12/twitter-bug-bounty/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Responsible Disclosure: CloudFlare - more interested in tracking than security]]></title>
		<link>https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/</link>
					<comments>https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 20 Nov 2018 12:08:25 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=30583</guid>

					<description><![CDATA[CloudFlare claim they want to secure the web - but they seem more interested in tracking their customers than giving them decent security.  Upon registering with the Internet giant, users are encouraged to confirm their email addresses. So far, so standard. This is the confirmation message CloudFlare sends out:    Looks good! Hey! I wonder where that garish orange button goes?    WHAT!?! An http…]]></description>
										<content:encoded><![CDATA[<p>CloudFlare claim they want to secure the web - but they seem more interested in tracking their customers than giving them decent security.</p>

<p>Upon registering with the Internet giant, users are encouraged to confirm their email addresses. So far, so standard. This is the confirmation message CloudFlare sends out:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/10/Cloudflare-1-fs8.png" alt="A confirmation email asking me to click on a link," width="617" height="478" class="aligncenter size-full wp-image-30586">

<p>Looks good! Hey! I wonder where that garish orange button goes?</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/10/Cloudflare-2-fs8.png" alt="A block of HTML. The insecure URl is highlighted." width="631" height="222" class="aligncenter size-full wp-image-30585">

<p>WHAT!?! An <em>http</em> URl? Surely some mistake. Every baby-in-a-basket knows that we should use http<strong>s</strong> everywhere.</p>

<p>No matter, I'll click on the raw link underneath. That's got an <code>https</code> at the start, right? WRONG!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/10/Cloudflare-3-fs8.png" alt="A block of HTML. The insecure URl is highlighted." width="644" height="328" class="aligncenter size-full wp-image-30584">

<p>Yup, the clumsy clowns at CloudFlare have managed to turn a secure URl into an insecure one. Bless.</p>

<p>Why do they do this? Because they want to track every click on their emails. Their statistics are more important than your security.</p>

<h2 id="why-is-this-bad"><a href="https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/#why-is-this-bad">Why is this bad?</a></h2>

<p>Links to <code>http</code> sites are not secure.  That means your visit to that URl can be seen by your ISP and anyone else between you and your destination.</p>

<p>A user clicking on that insecure URl risks having their request intercepted. While an attacker can't log in using the data they've captured, they would be able to redirect the user and phish their details.</p>

<h2 id="it-gets-worse"><a href="https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/#it-gets-worse">It gets worse!</a></h2>

<p>Hey, at least <a href="http://email.cloudflare.com"><code>email.cloudflare.com</code></a> belongs to Cloudflare, right?</p>

<p>Well... Not quite. Visit it, and you'll find that it is run by Customer.io's edge event collection service.</p>

<p>Visit an incorrect URl like <a href="http://email.cloudflare.com/example"><code>email.cloudflare.com/example</code></a> and you'll be taken to Customer.io's site.</p>

<p>Basically, if Customer.io gets hacked, or goes rogue, they can start phishing all of Cloudflare's customers. Nice...</p>

<h2 id="how-to-solve-it"><a href="https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/#how-to-solve-it">How to solve it?</a></h2>

<p><strong>STOP TRACKING EVERY LINK IN YOUR EMAILS!</strong></p>

<p>Or, if you <em>really</em> have to - make sure your tracking server supports <code>https</code> and is controlled by you.</p>

<h2 id="disclosure-timeline"><a href="https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/#disclosure-timeline">Disclosure timeline</a></h2>

<p>I went through <a href="https://hackerone.com/edent">HackerOne</a> in the vague hope of getting a tiny bug bounty.</p>

<ul>
<li>2018-10-19 - Disclosed</li>
<li>2018-10-26 - Response from HackerOne asking for clarification</li>
<li>2018-10-27 - "We were able to validate your report, and we have submitted it to the appropriate remediation team for review."</li>
<li>2018-11-05 - Informed them that I indented to publish on the 19th. Received no objection.</li>
<li>2018-11-19 - Response from HackerOne "It looks like the problem has been solved and future emails will provide https:// verification links."</li>
<li>2018-11-20 - Published</li>
</ul>

<h2 id="all-this-has-happened-before"><a href="https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/#all-this-has-happened-before">All this has happened before...</a></h2>

<p>This is <a href="https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/">an identical bug to the one I disclosed to Udacity</a> who were kind enough to say thanks and send me some <a href="https://www.youtube.com/watch?v=fgRFQJCHcPw">merchandising</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=30583&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2018/11/responsible-disclosure-cloudflare-more-interested-in-tracking-than-security/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Udacity Bug Bounty - or, please stop tracking every link in your emails]]></title>
		<link>https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/</link>
					<comments>https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 13 Apr 2018 10:50:15 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[udacity]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=29175</guid>

					<description><![CDATA[Look, I know your company wants metrics. I know your boss wants to see the exact percentages of people who click on links in your emails. Your sales team are desperate to track conversions. Someone wants to optimise your funnel for reasons which are unclear to you, a lowly engineer.  So you make the mistake of adding tracking to every email you send out.  Including sensitive ones.  I recently…]]></description>
										<content:encoded><![CDATA[<p>Look, I know your company wants metrics. I know your boss wants to see the exact percentages of people who click on links in your emails. Your sales team are desperate to track conversions. Someone wants to optimise your funnel for reasons which are unclear to you, a lowly engineer.</p>

<p>So you make the mistake of adding tracking to <em>every</em> email you send out.  Including sensitive ones.</p>

<p>I recently signed up to <a href="https://udacity.com/">online learning platform Udacity</a>.  As part of registration, they want me to confirm my email address.  Pretty normal behaviour.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/03/Udacity-Verify-email-fs8.png" alt="An email from Udacity asking me to verify my email address. Theer's a big button to press, or a smaller URL to click." width="540" height="670" class="aligncenter size-full wp-image-29177"></p>

<p>Because I'm a paranoid fellow, I wanted to see where the big VERIFY EMAIL link went.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/03/Link-going-to-an-insecure-location-1-fs8.png" alt="Clicking on the button shows an insecure web address." width="540" height="406" class="aligncenter size-full wp-image-29178">

<p>Ah! An insecure <code>http</code> link to their email tracking platform.</p>

<p>Never mind, thought I, there's a plain link underneath that one.  Hmmm.... I wonder where that goes.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/03/Link-going-to-an-insecure-location-2-fs8.png" alt="The plain URL is also insecure." width="540" height="392" class="aligncenter size-full wp-image-29179">

<p>Oh, right. That's also insecurely tracked.  To be clear, the <em>text</em> of the URl is <code>https</code> but the <em>link</em> it points to is <code>http</code>.</p>

<h2 id="whats-the-problem"><a href="https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/#whats-the-problem">What's the problem?</a></h2>

<p>Links to <code>http</code> sites are not secure.  That means your visit to that URl can be seen by your ISP and anyone else between you and your destination.  Your ISP can change the contents of that page and a malicious entity could - potentially - hijack your credentials.</p>

<p>In this case, all the links go via <a href="https://sendgrid.com/">SendGrid</a>.  You have no protection if they get hacked, or decide to harvest your credentials.</p>

<h2 id="how-to-solve-it"><a href="https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/#how-to-solve-it">How to solve it?</a></h2>

<p><strong>STOP TRACKING EVERY LINK IN YOUR EMAILS!</strong></p>

<p>Or, if you <em>really</em> have to - make sure your tracking server supports <code>https</code>.</p>

<h2 id="disclosure-timeline"><a href="https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/#disclosure-timeline">Disclosure timeline</a></h2>

<p>There's no dedicated security contact for Udacity.  I went through their <a href="https://udacity.com/contact">regular contact page</a></p>

<ul>
<li>2018-03-11 Asked to make responsible disclosure</li>
<li>2018-03-12 Udacity asked for more information.  I sent details &amp; screenshots.</li>
<li>2018-03-13 Report accepted and bug bounty issued.</li>
<li>2018-04-13 Publication.</li>
</ul>

<h2 id="reward"><a href="https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/#reward">Reward</a></h2>

<p>Obviously, for a vulnerability of this magnitude, I was expecting a bug bounty of several million dollars. Nevertheless, I'm rather pleased with my free Udacity T-Shirt, sticker, pen, and notebook 😊</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/04/Udacity-T-Shirt-notebook-pen-and-sticker.jpg" alt="Photo of a Udacity T-Shirt, notebook, pen, and sticker" width="800" height="600" class="aligncenter size-full wp-image-29197">
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=29175&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2018/04/udacity-bug-bounty-or-stop-tracking-every-link-in-your-emails/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Self-inflicted Denial of Service on GitHub (Disclosed)]]></title>
		<link>https://shkspr.mobi/blog/2017/02/self-inflicted-denial-of-service-on-github-disclosed/</link>
					<comments>https://shkspr.mobi/blog/2017/02/self-inflicted-denial-of-service-on-github-disclosed/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 14 Feb 2017 07:36:16 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[hacking]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=24801</guid>

					<description><![CDATA[I&#039;ve found an interesting, but low severity, way for a malicious user to selectively deny access to specific GitHub issues and Pull Requests.  This doesn&#039;t affect the whole site - just targeted pages. It doesn&#039;t require elevated permissions, nor any special skills. This is just GitHub punching itself in the face.  Here&#039;s how it works.       An attacker creates thousands of comments in their own…]]></description>
										<content:encoded><![CDATA[<p>I've found an interesting, but low severity, way for a malicious user to selectively deny access to specific GitHub issues and Pull Requests.</p>

<p>This doesn't affect the whole site - just targeted pages. It doesn't require elevated permissions, nor any special skills. This is just GitHub punching itself in the face.</p>

<p>Here's how it works.</p>

<ul>
    <li>An attacker creates <i>thousands</i> of comments in their own repos which contain references to a specific issue or PR in an external repo.</li>
    <li>When that issue or PR page is loaded, GitHub tries to render every single reference from all repos.</li>
    <li>This <i>often</i> makes the page completely unavailable (Unicorn Error) and <i>always</i> slows down page loading and rendering time.</li>
    <li>Site owners are unable to remove the malicious links, leading to a either permanent degradation of page loading time, or a page which can never be loaded.</li>
</ul>

<h2 id="uses"><a href="https://shkspr.mobi/blog/2017/02/self-inflicted-denial-of-service-on-github-disclosed/#uses">Uses</a></h2>

<p>Suppose a GitHub issue is talking about a security vulnerability - a malicious actor can deny access to that page.</p>

<p>Similarly, a competitor can disrupt your normal GitHub workflow.</p>

<p>Users on slow / mobile Internet connections will have a markedly worse experience accessing pages.</p>

<h2 id="examples"><a href="https://shkspr.mobi/blog/2017/02/self-inflicted-denial-of-service-on-github-disclosed/#examples">Examples</a></h2>

<p>A good source of examples is the Linux Kernel.</p>

<p>Take a look at <a href="https://github.com/torvalds/linux/pull/12">Pull Request #12</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/02/Screen-Shot-2017-02-14-at-10.12.30.png" alt="Linux PR on GitHub showing a timeout" width="836" height="518" class="aligncenter size-full wp-image-24808">

<p>(Edit - this page now appears fixed and no longer times out.)</p>

<p>Most of the time, the page fails to load. When it does load, it renders slowly on desktop. At the bottom are <b>hundreds</b> of links to places which <i>appear</i> to refer back to this. But they don't! Instead, the comments often contain lists of numbers like:</p>

<pre><code>#5 ffffffff812a12de (____fput+0x1e/0x30)
#6 ffffffff8111708d (task_work_run+0x10d/0x140)
#7 ffffffff810ea043 (do_exit+0x433/0x11f0)
#8 ffffffff810eaee4 (do_group_exit+0x84/0x130)
</code></pre>

<p>GitHub gets confused and thinks that those numbers refer to an Issue or Pull Request.</p>

<p>When it tries to render the page, it can timeout while gathering all of the comments which appear to be links.</p>

<p>In my experiments I found dozens of pages which repeatedly gave timeout errors.</p>

<h2 id="severity-and-disclosure"><a href="https://shkspr.mobi/blog/2017/02/self-inflicted-denial-of-service-on-github-disclosed/#severity-and-disclosure">Severity and Disclosure</a></h2>

<p>This is a low impact bug.</p>

<p>When there are thousands of comments across dozens of repositories, gathering all references can be time consuming. Once the servers have managed to successfully render the page, it reduces the likelihood of the page being blocked again.</p>

<p>I reported it via <a href="https://hackerone.com/">HackerOne</a> on the 13th of February. The next day GitHub responded:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2017/02/wp-1487056528520.png" alt="" class="wp-image-24800 alignnone size-full" width="1381" height="422">

<p>In the meantime, there isn't much you can do to protect yourself. There's no way to bulk remove malicious references.</p>

<p>On GitHub's side, they should be truncating pages before a timeout occurs. They already do this on mobile - perhaps it should be standard everywhere?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=24801&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/02/self-inflicted-denial-of-service-on-github-disclosed/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
