= weak password reset token = The way how ownCloud generates password reset tokens is highly insecure and can be used to overtake arbitrary accounts by solely knowing the corresponding username. file: core/lostpassword/index.php 15 $token = sha1($_POST['user']+uniqId()); due to the usage of the + operator, both operands (strings) are interpreted as numerical values (http://php.net/manual/en/language.types.type-juggling.php). uniqId() is a simple timestamp in its hex representation. this timestamps starts with "4f" until 2012-7-13 and is therefore evaluated as a 4 (http://xkcd.com/221/). this allows an attacker to trivially predict the generated token and reset the password. = code exec = user uploaded files are stored in the /data/<user>/files directory of the ownCloud webroot. /data is secured by a .htaccess file ("deny from all") but users can overwrite this setting by uploading a new .htaccess to their files directory (e.g. "allow from all"). by uploading a php script and circumventing the .htaccess restriction users are able to execute code by requesting the uploaded script via the following url: http://<host>/owncloud/data/<user>/files/<script> (uploading of a .htaccess file is obviously only needed on webservers which support them in the first place). = Disclosure Timeline = 2012-04-03: contacted the ownCloud team 2012-04-04: fixes http://gitorious.org/owncloud/owncloud/commit/85f9869f6925ef52c1015916bbc28e13c15abc73 http://gitorious.org/owncloud/owncloud/commit/acdce2b1e01f7c0a77b7e7949540e1b0ba94efd1 2012-04-19: Disclosure You can find a metasploit module attached to this email which exploits these two vulnerabilities to achieve code execution.
Attachment:
owncloud.rb
Description: application/ruby
_______________________________________________ Full-Disclosure - We believe in it. Charter: http://lists.grok.org.uk/full-disclosure-charter.html Hosted and sponsored by Secunia - http://secunia.com/