<?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>idn &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/idn/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Fri, 21 Nov 2025 03: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>idn &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[The Homograph Strikes Back - Another IDN Attack With Strikethroughs - Android]]></title>
		<link>https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/</link>
					<comments>https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 21 Nov 2014 08:05:30 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[homograph]]></category>
		<category><![CDATA[idn]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=10832</guid>

					<description><![CDATA[Responsible Disclosure  This flaw was reported to both Google and Opera on 23rd October 2014.  Background  International Domain Names are great! They open the web up to the whole world and allow me to own a domain like 莎士比亚.org.  But they are a constant battleground in the fight for security.  Homograph attacks are when someone uses two letters or symbols which look the same, to fool a user into v…]]></description>
										<content:encoded><![CDATA[<h2 id="responsible-disclosure"><a href="https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#responsible-disclosure">Responsible Disclosure</a></h2>

<p>This flaw was reported to both Google and Opera on 23rd October 2014.</p>

<h2 id="background"><a href="https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#background">Background</a></h2>

<p>International Domain Names are great! They open the web up to the whole world and allow me to own a domain like <a href="https://莎士比亚.org/" title="莎士比亚.org/">莎士比亚.org</a>.</p>

<p>But they are a constant battleground in the fight for security.</p>

<p>Homograph attacks are when someone uses two letters or symbols which look the same, to fool a user into visiting the wrong web address.  For example TW1TTER.com has the number 1 rather than the letter i.  Most fonts are reasonably good at helping users disambiguate between similar characters - but it's not always possible.</p>

<h2 id="the-homograph-strikes-back"><a href="https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#the-homograph-strikes-back">The Homograph Strikes Back</a></h2>

<p>Unicode allows for "Combining Characters". This allows us to easily add an accent to an existing character. The two characters should display as one.  Well, that's the theory.</p>

<p>If we combine the letter "g" with &nbsp;&nbsp;  ̶ (<a href="http://www.fileformat.info/info/unicode/char/336/index.htm">Combining long stroke overlay</a>) we get "g̶" (it should display as "<strike>g</strike>" on your screen).
On certain Android phones, and on the Opera browser for Android, it does <strong>not</strong>.  It just shows up as "g".</p>

<p>Here's an example of the attack.</p>

<ul>
    <li>A malicious user registers the domain name "g̶o̶o̶g̶l̶e̶.com" (In Punycode it looks like xn--google-37dbbbbb.com)</li>
    <li>They send a plain text email / Tweet / or some other communication telling people to visit g̶o̶o̶g̶l̶e̶.com</li>
    <li>The Android phone displays the link as "google.com"</li>
    <li>The user clicks - and is taken to a page which illegitimately asks for her Google credentials.</li>
</ul>

<h2 id="impact"><a href="https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#impact">Impact</a></h2>

<p>This appears to be a problem with the Android Operating System.  Although Google's Chrome isn't affected, other system apps like Gmail <em>are</em> - as are any 3rd party apps which rely on Android's text rendering.  This appears to be why Opera is vulnerable but Firefox is not.</p>

<p>I've tested this on Android 4.4.4 - the latest public release of Android.  I assume older versions are vulnerable as well.</p>

<p>Here's Google's latest "Gmail" app being sent the plain text <code>Testing http://g̶o̶o̶g̶l̶e̶.com</code>.</p>

<p>Long pressing on the link displays correctly.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/Homograph-font-attack-in-Gmail-fs8.png" alt="Homograph font attack in Gmail" width="512" height="838" class="aligncenter size-full wp-image-20005">

<p>As you can see above - the user sees a link that appears to go to "google.com" even though it goes to an alternate address.</p>

<p>The same issue also affects the new "Inbox" app, as well as default Android apps like Calendar, Messaging, Hangouts, etc.  It also affects most of the apps which attempt to render plain text using Android's default libraries.</p>

<p>I wondered what was causing this issue.  I believe it is a problem with the default "Roboto" font used by Google.  If I switch the system to use an alternative font, the system renders the text very differently.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/Alternate-font-showing-missing-characters-fs8.png" alt="Alternate font showing missing characters" width="512" height="526" class="aligncenter size-full wp-image-20006">

<p>In this case, using <a href="https://github.com/adobe-fonts/source-sans">Source Sans Pro</a>, the strike-through is rendered as an unknown character rather than silently failing.</p>

<p>We can prove this by looking at the Roboto font from Android 4.4 via FontForge - the <a href="http://www.fileformat.info/info/unicode/char/336/index.htm">Strike Through Character</a> is missing.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/Roboto-Font-Missing-Character-fs8.png" alt="Roboto Font Missing Character" width="628" height="424" class="aligncenter size-full wp-image-20011">

<p>When we take a look at the Roboto font from the Android 5.0 release - we can see that the problem has been fixed.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/New-Roboto-Font-fs8.png" alt="New Roboto Font" width="624" height="359" class="aligncenter size-full wp-image-20010">

<p>This means that the GMail app and all other system apps correctly render the text.  Here is the same email on Android Lollipop.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/Lollipop-Font-fs8.png" alt="Lollipop Font" width="512" height="352" class="aligncenter size-full wp-image-20009"></p>

<h2 id="google"><a href="https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#google">Google</a></h2>

<p>I disclosed this to Google on 23rd October. Their (very prompt) reply was:</p>

<blockquote><p>unfortunately Android apps do not fall in scope for the vulnerability reward program (apart from Google Wallet, see http://www.google.com/about/appsecurity/reward-program/index.html), but I will pass this information along internally. Thanks!</p></blockquote>

<p>Personally, I consider this to be a deficiency with the underlying Android OS.  The default font which is bundled with modern Android phones is defective.  This couldn't be described as a fundamental flaw, but it does highlight the problem of relying on accurate text rendering.</p>

<p>I mentioned the source of the issue to Google. To their credit, they quickly  replied with:</p>

<blockquote><p>... it seems like there was an issue in the Android KitKat (and earlier) releases that can cause some text to be rendered without the strikethrough, but it's been fixed in Lollipop.
</p><p>...Because it appears that this issue is already fixed in the upcoming release and it's not high severity enough to backport to earlier releases, we're going to close this ticket out. If you think we missed something, please let us know.
</p><p>Nice work isolating the issue to the Roboto font. I have no problem with you writing a blog post about this issue.</p></blockquote>

<h2 id="opera"><a href="https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#opera">Opera</a></h2>

<p>Initially, I believed this to be a bug solely in the Opera browser and so I reported this to them.  I noticed that when viewing a link on Twitter, it displayed as "hunger.com" rather than "h̶u̶n̶g̶e̶r̶.com".</p>

<p><a href="https://twitter.com/edent/status/525216539877064704"><img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/Opera-IDN-Homograph.jpg" alt="Opera IDN Homograph" width="600" height="438" class="aligncenter size-full wp-image-19827"></a></p>

<p>Their (fairly sensible) reply was - "not a security bug"</p>

<blockquote><p>We have looked further into the issue, and have determined that it is not an exploitable security issue.
</p><p>Basically, Opera on Android will not render it correctly in a web page. That is a bug, but web pages can already display whatever confusing content they want anyway - they could just as easily use this:
</p><p></p><pre>&lt;a href="http://evil.com/"&gt;http://good.com/&lt;/a&gt;</pre>
<p>This is not something a browser can prevent - a page could just as easily use an image of text instead. This has always been required by the relevant HTML/CSS specifications.
</p><p>...
</p><p>So, we will look into fixing the display of strikethroughs within a web page, but that will be fixed as a regular bug, not an exploitable security issue.</p></blockquote>

<h2 id="where-next"><a href="https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/#where-next">Where Next?</a></h2>

<p>It's hard to call this a true exploit - it would require the user to ignore the URL bar in their browser - although if a malicious web page were to force itself into full screen mode, the user wouldn't stand a chance.</p>

<p>Given that <a href="https://tools.ietf.org/html/rfc3492">Punycode has been around for over a decade</a>, and that the &nbsp;&nbsp;  ̶  character has been in Unicode since 1993, it is more than a little disappointing that Google took so long to include it in their text rendering engine.</p>

<p>In the seminal paper "<a href="https://gabrilovich.com/publications/papers/homograph_full.pdf">The Homograph Attack</a>" by Evgeniy Gabrilovich and Alex Gontmakher - the authors concentrated on how browsers should work to fight against these attacks:</p>

<blockquote><p>More practically, the browser can highlight international letters present in domain names with a distinct color, although many users may find this technique overly intrusive. A more user-friendly browser may only highlight truly suspicious names, such as ones that mix letters within a single word.
</p><p>For additional security, the browser can use a map of identical letters to search for collisions between the requested domain and similarly written registered ones</p></blockquote>

<p>In today's interconnected app-driven world, <strong>every single program</strong> which can display a URL <em>must</em> ensure that the user is not misled into clicking on a fraudulent link.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=10832&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2014/11/the-homograph-strikes-back-another-idn-attack-with-strikethroughs-android/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Poor IDN Support From Major Webmail Providers]]></title>
		<link>https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/</link>
					<comments>https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 07 Jan 2014 12:25:18 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[idn]]></category>
		<guid isPermaLink="false">http://shkspr.mobi/blog/?p=9454</guid>

					<description><![CDATA[As I mentioned in a previous post, I&#039;m sick of people not being able to spell or pronounce shkspr.mobi correctly.  So I&#039;ve decided to double down and start using my alternate domain 莎士比亚.org.  It&#039;s pronounced &#34;Sha-shi-bi-ya&#34;, if that helps.  Getting my email account set up with my hosting provider was easy enough but it turned out to be quite tricky to send email to my account.  This is what happe…]]></description>
										<content:encoded><![CDATA[<p>As I <a href="https://shkspr.mobi/blog/2013/12/how-do-you-pronounce-your-domain-name/" title="How Do You Pronounce Your Domain Name?">mentioned in a previous post</a>, I'm sick of people not being able to spell or pronounce shkspr.mobi correctly.  So I've decided to double down and start using my alternate domain <a href="http://莎士比亚.org">莎士比亚.org</a>.  It's pronounced "Sha-shi-bi-ya", if that helps.</p>

<p>Getting my email account set up with my hosting provider was easy enough but it turned out to be quite tricky to send email <em>to</em> my account.</p>

<p>This is what happened when I tried to send an email from Gmail to test@莎士比亚.org:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/01/GMail-IDN-Support-fs8.png" alt="GMail IDN Support" width="736" height="607" class="aligncenter size-full wp-image-9452"></p>

<blockquote>Error
The address "test@莎士比亚.org" in the "To" field was not recognised</blockquote>

<h2 id="a-quick-bit-of-history"><a href="https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/#a-quick-bit-of-history">A Quick Bit of History</a></h2>

<p>The Internet was build and designed for English speaking people.  At its core, many systems only understand the Latin alphabet.  Not the fancy Latin alphabet with exotic accents and symbols, mind, just A-Z, 0-9, and a handful of punctuation marks.  There simply isn't the capability to do "foreign" characters.</p>

<p>As non-English speakers began to use the Internet, they wanted methods to read and write addresses in their own languages - not an unreasonable desire!</p>

<p>Thus was born "<a href="http://en.wikipedia.org/wiki/Punycode">Punycode</a>" - a method to turn non-English characters into something the infrastructure could understand.</p>

<p>For example, 莎士比亚.org is rendered in Punycode as xn--jlq54w7ypemw.org.  You don't have to understand how it works - just accept that it does :-)</p>

<p>I tried the four most popular free email providers to see if their interfaces would accept the following email addresses as valid destinations:</p>

<pre>test@莎士比亚.org
test@xn--jlq54w7ypemw.org</pre>

<p>The results were <em>not</em> encouraging.</p>

<h3 id="yahoo"><a href="https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/#yahoo">Yahoo</a></h3>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/01/Yahoo-Email-IDN-fs8.png" alt="Yahoo Email IDN-fs8" width="875" height="617" class="aligncenter size-full wp-image-9456">

<h3 id="outlook"><a href="https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/#outlook">Outlook</a></h3>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/01/Outlook-IDN-Test-fs8.png" alt="Outlook IDN Test" width="599" height="575" class="aligncenter size-full wp-image-9457">

<blockquote>The recipient's address can only contain letters (a-z or A-Z), numbers (0-9) and specific symbols (such as @). Please try again.</blockquote>

<h3 id="icloud"><a href="https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/#icloud">iCloud</a></h3>

<p>Apple's iCloud was curious. It marked both the IDN and Punycode version in red to indicate that they were invalid.  Yet the mail was allowed to send.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/01/iCloud-Test-fs8.png" alt="iCloud Test" width="715" height="292" class="aligncenter size-full wp-image-9458">
However, it immediately failed with this error
<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/01/iCloud-IDN-fail-fs8.png" alt="iCloud IDN fail" width="546" height="429" class="aligncenter size-full wp-image-9459"></p>

<blockquote> Reason: syntax error; address contains 8bit characters</blockquote>

<h2 id="now-what"><a href="https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/#now-what">Now What?</a></h2>

<p>Internationalised Domain Names <a href="http://en.wikipedia.org/wiki/Internationalized_domain_name">have existed since 2010</a>.  With billions of people accessing the web from non-English speaking countries, it's essential that web services adapt to accept to serve their needs.</p>

<p>It's simply inexcusable to alienate so many potential users.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=9454&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
