Six vulnerabilities have been found affecting Ghost, the blogging platform coded in the Node.js born on October 2013. These vulnerability were discovered on January 26 by a group of researcher from Voidsec (voidsec, bughardy and smaury) during a web application penetration test. The researchers promtly reported the security vulnerability to the Ghost team, which has fixed some of them.
The team found stored XSS, privilege reduction, privilege bypass, article author spoofing, DoS by the mean of resource consumption and an unsafe token storage policy. An attacker could exploit these vulnerabilities to perform privilege escalation/reduction and account take over resulting in the consequently hack the whole blogging platform. The attacker can block the legitimete administrator to use the service and potentially the whole platform hosting the website powered by Ghost.
The first of these issues is composed by a set of three stored XSS which can lead to session hijacking. Those XSS were triggerable by any user on the blog and were found in blog’s logo and cover, users’ avatar and cover and in the tag manager.
The DoS vulnerability allows an attacker to create a malfunction in the targeted server, since there were no control over the size or the number of avatars uploaded by users.
“In our case instead the vulnerability is within the application, and it can lead to a server crash.”
There were found various issues related to privilege management that can create great instability of the blogging platform. Due to a wrong check in the code of Ghost any user can reduce privilege of any other one, administrators and moderators included and in the meanwhile taking control of that account. Another hole in the platform also allows any user to read everybody private drafts, which are private; that flaw is still not fixed at time I’m writing. The last privilege issue is an escalation one, which take the form of author spoofing in any article entry newly created; there are various applications of an attack of that form of creation of the undeletable post to social engineering.
“The post will be published, the blog’s readers will see it as the Owner wrote and published it but since we set a non-existing user as author, this non-existing user is the real owner of the post blog, so only him is able to delete/edit the post” bughardy wrote in a blog post.
The last vulnerability affects the way sensitive data are stored, Bearer token is not stored in a cookie with the HttpOnly flag, but it is kept in the localStorage of the browser, so any XSS, like the one described above can lead to session hijacking.
Moreover, the team pointed out another two potential vulnerabilities one affecting Ghost platform and one affecting bcryptCompare function. The first one is another XSS through javascript injection within articles, but the team was not sure if it is a feature that the Ghost team want to keep or will be replaced or removed in the future. The second one is a timing attack on the function that check if the hash of the password is the same as the one stored into the database.
Luckily most of those vulnerabilities has been fixed by Ghost team, a detailed report is available at voidsec.com.
Written by kalup and Voidsec
(Security Affairs – Ghost blogging platform, hacking)