## Case Study: SSRF in Nelio AB Testing WordPress Plugin ##
Nelio AB Testing is a WordPress plugin used for A/B Testing in WordPress pages. We can download the source-code of the Plugin from plugins.svn.wordpress.org/nelio-ab-testing/tags/4.5.8/.
Server-side Request Forgery (SSRF) is a vulnerability where requests can be made from the vulnerable server to the intra/internet. Though it does not seem to have serious impact, using a protocol supported by certain URI schemes, an attacker could collect various information about the server or even achieve remote code execution (RCE). There is a very comprehensive cheat-sheet for SSRF available here.
Zooming in to the vulnerable PHP script at .`/ajax/iesupport.php`. It is obvious from manual analysis that we are able to control the URL that would eventually be cURL’ed by the server.
<?php
** Truncated **
$url = false;
$data = false;
if ( isset( $_POST['originalRequestUrl'] ) ) {
$url = $_POST['originalRequestUrl'];
$url = preg_replace( '/^\/\//', '', $url );
}
else {
// Silence is gold
return;
}
if ( isset( $_POST['data'] ) ) {
$data = $_POST['data'];
}
else {
// Silence is gold
return;
}
$was_data_sent = false;
if ( !$was_data_sent && function_exists( 'curl_version' ) ) {
//open connection
$ch = curl_init();
if ( $ch ) {
//set the url, number of POST vars, POST data
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, substr_count( $data, '=' ) );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data );
if ( isset( $_SERVER['HTTP_REFERER'] ) )
curl_setopt( $ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER'] );
if ( isset( $_SERVER['HTTP_USER_AGENT'] ) )
curl_setopt( $ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
//execute post
$result = curl_exec( $ch );
//close connection
curl_close( $ch );
$was_data_sent = true;
}
}
** Truncated **
?>
In fact, the vulnerabilty was found by the tool automatically. We can see an intuitive result from testing the vulnerable script on http://taint.spro.ink. We see that the tool is able to detect the tainted user-input being used in the `curl_setopt` function.
![](https://images.seebug.org/1493105376666)
From https://pluginu.com/nelio-ab-testing/, we can easily see that there are at least 173 websites using this plugin currently! Being lucky, I was able to find a bug bounty program that has a WordPress site using this particular plugin and was able to obtain a bounty with this finding. :)
![](https://images.seebug.org/1493105406699)
## Conclusion ##
What this experiment proved was that it was highly possible for a development cycle/process where applications are continuously tested for vulnerability. However, more work needs to be done to ensure true positives in result and/or to even automatically patch simple vulnerabilities!
This is the first part of many and in the subsequent parts I will write more about the tool in detail!
Thanks for reading!
暂无评论