Umbraco version 8.9.0 (also seen in 8.6.3) has a privilege escalation issue in the core administrative screens which allows a low privileged user to access various resources otherwise limited to higher privileged users. The issue exists in an API endpoint that does not properly check the user’s authorization prior to returning results found in the application’s logging section.
The observed version is Umbraco 8.9.0:
The higher privileged user (currently, an Administrator) has functionality that allows them to view log data in the administrative UI:
This log data contains whatever may have been inserted into the application logs per configuration (here, Information level) or custom exception handling routines. Note that the risk of the information leak will be contextualized based on what is actually logged by default or by whatever additional logging the application maintainer has decided to add. For example, custom logging of a failed authentication routine could potentially leak usernames and passwords to the log:
In order to test this issue, a lower privileged user is created by the Administrator and placed in the Writers group:
The Writers group is given limited access to the application. Note that only the Administrators can view Settings while the low privileged user can only view the Content tab indicating the intent of limiting what Writers can do or see within the application:
The low privileged user authenticates to the application and is given the requisite cookies and headers in order to access the application:
Using these identifiers, the low privileged user can access the API endpoint which returns the log data only available to the Administrator via the UI:
More example log data:
It was observed in the Umbraco.Web.dll that the LogViewerController class uses no granular authorization attributes on its exposed endpoints. Here we see that numerous endpoints are accessible by lower privileged users including the GetLogs method:
Conversely, there are other areas that do protect resources such as the UsersController wherein some methods are explicitly limited to Administrative users (“[AdminUsersAuthorize]” attribute) or must otherwise be given permission to the controller (“[UmbracoApplicationAuthorize]”). A similar approach should be used for the LogViewerController to limit unauthorized access to its data:
This issue was reported to Umbraco through Trustwave's Responsible Disclosure program. Umbraco was responsive in putting a patch together and we recommend that affected users upgrade to Umbraco CMS 8.10.0 or the latest stable version. Please note that Trustwave has not verified the fixes. Umbraco version 7.x is not affected by this bug.