CVE-2017-16510

WordPress Core < 4.8.3 - SQL Injection due to Double Prepare approach

2017-10-31 00:00
Anthony Ferrara

Strategic Overview

Status
Patched in 3.7.23
Affected Core
WordPress 4.8
Affected Version
3.7 – 4.8.2 · 13 branches
CVSS
9.8Critical
Weakness type
CWE-89 · Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
CVE
CVE-2017-16510
View all WordPress 4.8 vulnerabilities

At a glance

CVE-2017-16510 is a critical-severity Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') vulnerability in the WordPress 4.8 WordPress release line, affecting 3.7 – 4.8.2 · 13 branches. It carries a CVSS score of 9.8 (reachable over the network; low attack complexity; high confidentiality, integrity, availability impact). Exploitation requires no authentication. The issue is fixed in version 3.7.23; sites on affected versions should update now. Disclosed October 2017, reported by Anthony Ferrara.

Vulnerability Overview

WordPress before 4.8.3 is affected by an issue where $wpdb->prepare() can create unexpected and unsafe queries leading to potential SQL injection (SQLi) in plugins and themes, as demonstrated by a "double prepare" approach, a different vulnerability than CVE-2017-14723.

Technical Analysis

The vector marks this flaw as remotely reachable over the network, with low attack complexity — no special timing or configuration is needed, and no privileges on the target site, and no interaction from a victim user. A successful exploit has high impact on confidentiality, integrity, availability — full site compromise territory.

CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

WordPress 4.8 3.7 – 4.8.2 · 13 branches carries this weakness at prepare(), and reaching it takes a caller who can reach the endpoint. SQL injection happens when request data is concatenated into a query instead of being bound as a parameter, letting an attacker change the structure of the statement rather than just its values.

A working injection can read any table the database user can see, which on a WordPress install means user records, password hashes and session or API secrets stored in options. For WordPress 4.8 the fix is 3.7.23: builds 3.7 – 4.8.2 · 13 branches are affected, anything from 3.7.23 onward is not.

Remediation

Update to one of the following versions, or a newer patched version: 3.7.23, 3.8.23, 3.9.21, 4.0.20, 4.1.20, 4.2.17, 4.3.13, 4.4.12, 4.5.11, 4.6.8, 4.7.7, 4.8.3

How does WordSec protect against this?

The attempt arrives as an ordinary request to WordPress 4.8: WordSec's web application firewall inspects request payloads before WordPress loads them. None of that substitutes for the fix: updating to 3.7.23 is the step that ends it.

  • Firewall
  • Alerts

External References

Related records

Vulnerability data © Defiant, Inc., provided under the Wordfence Intelligence T&C