This is an old revision of the document!
Warning: Undefined property: syntax_plugin_folded_span::$helper in /usr/share/nginx/html/lib/plugins/folded/syntax/span.php on line 54
Warning: Undefined property: helper_plugin_folded::$ids_count in /usr/share/nginx/html/lib/plugins/folded/helper.php on line 29
XMLRPC
XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode its calls and HTTP as a transport mechanism and its functionality is turned on by default since WordPress 3.5.
XML-RPC is an API - this API gives developers and services the ability to talk to a wordpress site
Examples where XML-RPC functionality is needed:
XML-RPC functionality is primarily used for three common reasons:
- Pingbacks/trackbacks (great for Viagra spam, DDoS attacks, and not much else)
- Jetpack (an all-in-one solution to slowing down and/or bloating your WordPress site with third-party scripts)
- WP mobile apps
More information on XML-RPC API for wordpress can be found: https://codex.wordpress.org/XML-RPC_WordPress_API
What is an xmlrpc attack?
xml-rpc can use system.multicall - this can be used to execute multiple methods inside a single request. This allows applications to pass multiple commands with one http request.
This means that potential bots and hackers can use the system.multicall method to guess 100's or 1000's of passwords with a single http request
Hackers can attempt thousands of password attempts with just a 3-4 http request. These requests bypass security tools designed to block brute force attempts. These requests will have 1 entry per request in the log file.
NOTE: Your systems load average may increase significantly during one of these attacks. It may be a little hard to initially diagnose the issue as apache is NOT hitting max clients. Remember to investigate the access logs and see if there are lots of POST requests to XMLRPC.php!
—
NOTE: WordPress, Drupal and most content management systems support XML-RPC.
It can be used with Perl, Java, Python, C, C, PHP and many other programming languages.
\\
\\
Checking apache and nginx logs for xmlrpc
\\
<sxh bash>
awk '/xmlrpc.php/ {REQ[$1" "$6" "$7]++}END{for (i in REQ) print REQ[i],i}' /var/log/httpd/*access*log