IOTA Security is flawed — IOTA security hole disclosure

Posted on February 9, 2018April 17, 2018Categories information security, iota

Updated with the dates reported and more clarity.

Updated to reflect timeline of events.

Updated to explain different ways to disclose security holes and which method we followed.

Since we are dedicated to security, let’s dive into IOTA. IOTA is an alternative crypto currency to bitcoin. There are over 1500 alternative crypto currencies, but IOTA stood out among many of them. Before we go further we want to disclose that Planet Zuda is an advisor to on the security of their crypto currency coin. We also discovered what could be critical flaws in the IOTA wallet if properly exploited.

What is IOTA?

IOTA is a public ledger of internet of things devices, developed for companies to easily track the data their internet of things devices generate. Unlike most coins it does not use the blockchain, instead they developed something similar called tangled. Tangled was designed to solve many issues wrong with crypto currencies, like bitcoin charging up to $26 per transaction. IOTA has no transaction fees among other improvements. The duetsche bank said that IOTA solves the failures in current blockchain technology.

IOTA has multiple large corporations now called participants using IOTA, including Microsoft . These participants used to be called partnerships, at least by the press and a misleading Microsoft partnership image that was on the IOTA site. The press started reporting everyone working with IOTA as partnerships. Unfortunately, per our knowledge IOTA did not try to say they weren’t partnerships until the media did some digging and discovered that none of the companies had a partnership, they are simply participants testing the IOTA technology.

An MIT related research team discovered security vulnerabilities in their cryptography and published them. While the founders wanted their cryptography improved they didn’t seem to understand who’s who in the world of cryptography. They seemed to put everyone in cryptography, even those who are very well known as amateurs if they spoke up about the MIT vulnerability research on IOTA cryptography. To their credit months later IOTA hired a cryptography company to help them out. Unfortunately, cryptography is not the only part of security.

This author publicly criticized IOTA and their lack of security on Twitter, causing one of their co founders to almost instantly pull me into private chat where I said everything in private chat would be made public. I wanted to help them improve their software, but in my opinion their team didn’t seem serious about security at the time, so I moved on.

Per our knowledge around October 20th IOTA was hacked and millions of dollars were stolen from their users, which to their credit they’ve recently started to pay back. I held on to my IOTA after the hack because the price crashed. We offered to help them after they suffered a ddos disruption.

They wanted to know what security holes we had discovered for free, so On November 25th we freely shared a flaw in their wallet with a function that works almost exactly like the php function called htmlspecialchars that they call escapeHTML. Unfortunately, they use this in an area of their code called .format. This means any input that is malicious and doesn’t contain “<>”&’ will succeed. At the time we published this, everything we can see shows that this issue has not been fixed.

One example of code that may bypass their security function is the JavaScript: tag. So, javascript:alert(document.String.Charfromcode(88,87)) could potentially work and would be an exploit if it was written properly and put in the correct vulnerable areas, which are the transactionhash and transactionbundle per our analysis. If you wrote the right code it could potentially end up on all the wallets and steal the users crypto currency. One professional view of a member of my team slightly conflicted with these findings, because they only did a code audit and didn’t notice one area that was used with user supplied input. All professional views were shared with IOTA.

Here is a snippet of the escapeHTML function in question from github, unfortunately this is throughout a lot of the program, this is just one section.

String.prototype.escapeHTML = function() {return String(this).replace(/[&<>"'\/]/g, function(s) {return __entityMap[s];”
UI.format = function(text) {return String(text).escapeHTML();}

The most recent demonstration of an IOTA security issue is when IOTA did not automate seed generation into their wallet. This lead people to use online websites to generate a seed. What is a seed and why is this important, you ask? A seed in layman terms in this case is your fingerprint protecting all of your crypto currency, in this case all of your iota. One website asked for users wallet address and generated their seed giving the attackers everything they needed due to the way IOTA had designed the wallet that many people use.

It can not be emphasized enough that people losing their money due to using online websites is because IOTA didn’t offer a service to automatically generate the seed within the app. The only other option was for people to write the computer code to generate their own seed offline, which the majority of people aren’t able to do.

We review a lot of programs for free and inform the companies of the issues. This gives the company time to fix the issues we reported and lets the researcher disclose them instead of just disclosing them and then informing the company. Both are acceptable ways to disclose security holes.

To conclude when we did our independent review of their code and informed IOTA of the issues we found for free that it needs a lot of improvements.