WordPress Plugin Vulnerabilities

Admin Columns Free (< 4.3.2) & Pro (< 5.5.2) - Authenticated Stored Cross-Site Scripting (XSS) in Custom Field

Description

The Admin Columns WordPress plugin allowed to configure individual columns for tables. Each column had a type. The type "Custom Field" allowed to choose an arbitrary database column to display in the table. There was no escaping applied to the contents of "Custom Field" columns.

When a "Custom Field" was used with a database column that could be changed by attackers, JavaScript code could be injected. The code was executed when the table was rendered. Tables could be rendered both in the WordPress frontend and backend, possibly compromising high-privileged users.

Proof of Concept

1. Create a custom field for WordPress users which allows to store HTML
   control characters. This can be done, e.g., with the "Advanced Custom
   Fields" plugin [2].

2. Store "<img src=0 onerror=alert()>" in the custom field for any user.

3. Open the Admin Columns plugin settings.

4. Choose the "Admin Columns" tab and select "Users" from the drop down
   menu.

5. Click "Add Column", choose the type "Custom Field" and select the
   previously created custom field.

6. Open the user list in the WordPress backend. The JavaScript code will
   be executed.

Affects Plugins

References

Classification

Type
XSS
CWE

Miscellaneous

Original Researcher
Johannes Lauinger, SySS GmbH
Verified
No

Timeline

Publicly Published
2021-05-31 (about 2 years ago)
Added
2021-06-21 (about 2 years ago)
Last Updated
2021-06-25 (about 2 years ago)

Other