CVE-2023-23684: WordPress WPGraphQL Plugin <= 1.14.5 is vulnerable to Server Side Request Forgery (SSRF)
Impact Users with capabilities to upload media (editors and above) are succeptible to SSRF (Server-Side Request Forgery) when executing the createMediaItem Mutation.
Authenticated users making GraphQL requests that execute the createMediaItem could pass executable paths in the mutations filePath argument that could give them unwarranted access to the server.
It's recommended to update to WPGraphQL v1.14.6 or newer. If you're unable to do so, below is a snippet you can add to your functions.php (or similar) that filters the createMediaItem mutation's resolver.
Patches
- v1.14.6 - https://github.com/wp-graphql/wp-graphql/pull/2840
Workarounds If you're unable to upgrade to v1.14.6 or higher, you should be able to use the following snippet in your functions.php to override the vulnerable resolver.
This snippet has been tested as far back as WPGraphQL v0.15
php addfilter( 'graphqlpreresolvefield', function( $nil, $source, $args, $context, \GraphQL\Type\Definition\ResolveInfo $info, $typename, $fieldkey, $field, $fieldresolver ) {
if ( $info->fieldName !== 'createMediaItem' ) { return $nil; }
$input = $args['input'] ?? null;
if ( ! isset( $input['filePath'] ) ) { return $nil; }
$uploadedfileurl = $input['filePath'];
// Check that the filetype is allowed $checkfile = wpcheckfiletype( $uploadedfileurl );
// if the file doesn't pass the check, throw an error if ( ! $checkfile['ext'] || ! $checkfile['type'] || ! wphttpvalidateurl( $uploadedfileurl ) ) { throw new \GraphQL\Error\UserError( sprintf( ( 'Invalid filePath "%s"', 'wp-graphql' ), $input['filePath'] ) ); }
$protocol = wpparseurl( $input['filePath'], PHPURLSCHEME );
// prevent the filePath from being submitted with a non-allowed protocols $allowedprotocols = [ 'https', 'http', 'file' ];
if ( ! inarray( $protocol, $allowedprotocols, true ) ) { throw new \GraphQL\Error\UserError( sprintf( ( 'Invalid protocol. "%1$s". Only "%2$s" allowed.', 'wp-graphql' ), $protocol, implode( '", "', $allowedprotocols ) ) ); }
return $nil;
}, 10, 9 );
References
- https://patchstack.com/database/vulnerability/wp-graphql/wordpress-wp-graphql-plugin-1-14-5-server-side-request-forgery-ssrf-vulnerability
Other sources
Server-Side Request Forgery (SSRF) vulnerability in WPGraphQL.This issue affects WPGraphQL: from n/a through 1.14.5.
Affected Software
Remediation
Information
Event History
Frequently Asked Questions
What is the vulnerability ID for this WordPress WPGraphQL vulnerability?
The vulnerability ID for this WordPress WPGraphQL vulnerability is CVE-2023-23684.
What is the impact of this vulnerability?
Users with capabilities to upload media are susceptible to Server Side Request Forgery (SSRF) when executing the createMediaItem Mutation.
Which version of WordPress WPGraphQL Plugin is affected by this vulnerability?
WordPress WPGraphQL Plugin version 1.14.5 is affected by this vulnerability.
How severe is this vulnerability?
This vulnerability has a severity score of 6.5, which is categorized as medium.
How can I fix this vulnerability?
To fix this vulnerability, update your WordPress WPGraphQL Plugin to version 1.14.6 or later.