[wp-trac] [WordPress Trac] #44935: Automated test's suggesting /wp-login.php?action=lostpassword can be used for compromizing site
WordPress Trac
noreply at wordpress.org
Wed Sep 12 11:31:21 UTC 2018
#44935: Automated test's suggesting /wp-login.php?action=lostpassword can be used
for compromizing site
--------------------------+-----------------------------
Reporter: wzislam | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Security | Version: 4.9.8
Severity: major | Keywords: needs-testing
Focuses: |
--------------------------+-----------------------------
I'm not a security expert. But recently ran an automated test to one of
our client site, and came with this issue. Tried posting in HackerOne, but
couldn't came up with the UI. Hence posting here for proper notice.
If there's nothing to take care about, at least I need a reasonable answer
so that I can conclude the issue with my clients and to all the haters of
WordPress.
----------------
Test Tool: ZAP
(https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project)
Risk level: High
Test server: Localhost (Windows 7 machine, PHP 7.1.7 and PHP 5.6)
Alert details: Path Traversal
Description:
The Path Traversal attack technique allows an attacker access to files,
directories, and commands that potentially reside outside the web document
root directory. An attacker may manipulate a URL in such a way that the
web site will execute or reveal the contents of arbitrary files anywhere
on the web server. Any device that exposes an HTTP-based interface is
potentially vulnerable to Path Traversal.
Most web sites restrict user access to a specific portion of the file-
system, typically called the "web document root" or "CGI root" directory.
These directories contain the files intended for user access and the
executable necessary to drive web application functionality. To access
files or execute commands anywhere on the file-system, Path Traversal
attacks will utilize the ability of special-characters sequences.
The most basic Path Traversal attack uses the "../" special-character
sequence to alter the resource location requested in the URL. Although
most popular web servers will prevent this technique from escaping the web
document root, alternate encodings of the "../" sequence may help bypass
the security filters. These method variations include valid and invalid
Unicode-encoding ("..%u2216" or "..%c0%af") of the forward slash
character, backslash characters ("..\") on Windows-based servers, URL
encoded characters "%2e%2e%2f"), and double URL encoding ("..%255c") of
the backslash character.
Even if the web server properly restricts Path Traversal attempts in the
URL path, a web application itself may still be vulnerable due to improper
handling of user-supplied input. This is a common problem of web
applications that use template mechanisms or load static text from files.
In variations of the attack, the original URL parameter value is
substituted with the file name of one of the web application's dynamic
scripts. Consequently, the results can reveal source code because the file
is interpreted as text instead of an executable script. These techniques
often employ additional special characters such as the dot (".") to reveal
the listing of the current working directory, or "%00" NULL characters in
order to bypass rudimentary file extension checks.
URL: http://localhost/wordpress/wp-login.php?action=lostpassword
Method: POST
Parameter: user_login
Attack: wp-login.php
Instances: 1
Solution:
Assume all input is malicious. Use an "accept known good" input validation
strategy, i.e., use a whitelist of acceptable inputs that strictly conform
to specifications. Reject any input that does not strictly conform to
specifications, or transform it into something that does. Do not rely
exclusively on looking for malicious or malformed inputs (i.e., do not
rely on a blacklist). However, blacklists can be useful for detecting
potential attacks or determining which inputs are so malformed that they
should be rejected outright.
When performing input validation, consider all potentially relevant
properties, including length, type of input, the full range of acceptable
values, missing or extra inputs, syntax, consistency across related
fields, and conformance to business rules. As an example of business rule
logic, "boat" may be syntactically valid because it only contains
alphanumeric characters, but it is not valid if you are expecting colors
such as "red" or "blue."
For filenames, use stringent whitelists that limit the character set to be
used. If feasible, only allow a single "." character in the filename to
avoid weaknesses, and exclude directory separators such as "/". Use a
whitelist of allowable file extensions.
Warning: if you attempt to cleanse your data, then do so that the end
result is not in the form that can be dangerous. A sanitizing mechanism
can remove characters such as '.' and ';' which may be required for some
exploits. An attacker can try to fool the sanitizing mechanism into
"cleaning" data into a dangerous form. Suppose the attacker injects a '.'
inside a filename (e.g. "sensi.tiveFile") and the sanitizing mechanism
removes the character resulting in the valid filename, "sensitiveFile". If
the input data are now assumed to be safe, then the file may be
compromised.
Inputs should be decoded and canonicalized to the application's current
internal representation before being validated. Make sure that your
application does not decode the same input twice. Such errors could be
used to bypass whitelist schemes by introducing dangerous inputs after
they have been checked.
Use a built-in path canonicalization function (such as realpath() in C)
that produces the canonical version of the pathname, which effectively
removes ".." sequences and symbolic links.
Run your code using the lowest privileges that are required to accomplish
the necessary tasks. If possible, create isolated accounts with limited
privileges that are only used for a single task. That way, a successful
attack will not immediately give the attacker access to the rest of the
software or its environment. For example, database applications rarely
need to run as the database administrator, especially in day-to-day
operations.
When the set of acceptable objects, such as filenames or URLs, is limited
or known, create a mapping from a set of fixed input values (such as
numeric IDs) to the actual filenames or URLs, and reject all other inputs.
Run your code in a "jail" or similar sandbox environment that enforces
strict boundaries between the process and the operating system. This may
effectively restrict which files can be accessed in a particular directory
or which commands can be executed by your software.
OS-level examples include the Unix chroot jail, AppArmor, and SELinux. In
general, managed code may provide some protection. For example,
java.io.FilePermission in the Java SecurityManager allows you to specify
restrictions on file operations.
This may not be a feasible solution, and it only limits the impact to the
operating system; the rest of your application may still be subject to
compromise.
Reference:
1. http://projects.webappsec.org/Path-Traversal
2. http://cwe.mitre.org/data/definitions/22.html
CWE Id: 22
WASC Id: 33
Source ID: 1
--
Ticket URL: <https://core.trac.wordpress.org/ticket/44935>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list