Open Source · · 280 days
OpenX Source archive backdoored
The official OpenX Source 2.8.10 distribution archives were compromised for months, shipping a remote PHP code execution backdoor in the open-source ad server.
OpenX sat between publishers, advertisers, and every visitor who loaded an ad slot. In 2013, heise Security found that official OpenX Source 2.8.10 downloads from the project server contained a hidden PHP execution path. The compromised ZIP, tar.gz, and tar.bz2 archives came from the trusted download channel, and the backdoor did not sit in plain view inside them: it rode in a nested archive, openx-2.8.10/etc/plugins/openXVideoAds.zip, the plugin bundle that a normal installation unpacks.
The attacker hid PHP inside flowplayer-3.1.1.min.js, a JavaScript file nested under the video ads plugin. That file alone would have been inert, because web servers do not hand .js files to the PHP interpreter. Three files were modified, not one. In player.delivery.php, the echo file_get_contents() call that 2.8.9 and 2.8.11 used to serve the player became MAX_commonReadFile(). In lib/max/Delivery/common.php, the attacker injected the function that call now resolved to: function MAX_commonReadFile($arg) { if($conf['debug']['read']){ echo file_get_contents($arg); } require_once($arg); }. That second edit is what converted a read into an include, turning an innocuous-looking asset into server-side code. Rapid7 later described exploitation as a single request with a ROT13-encoded and reversed payload.
The backdoor was already being used against ad servers. Heise confirmed it in a download from November 2012, put its own body text at "at least three quarters of a year" unnoticed, and summarized that as almost a year; Rapid7 dated the exposure from at least November 2012 through August 2013, the roughly nine-month window recorded here. OpenX 2.8.10 was the current open-source release, so administrators who installed or refreshed the package during the window could inherit the backdoor as part of ordinary deployment.
Remediation required more than removing one line. Acunetix and other advisories recommended upgrading to OpenX 2.8.11 or later, auditing the server for prior compromise, rotating credentials and API keys, and considering a clean reinstall if exploitation evidence existed. A compromised ad server could also deliver attacks to site visitors.
Appendix · Affected releases
- Heise reported that the compromised official downloads covered the ZIP, tgz, and tbz2 archives and that the backdoor appeared to have been present for almost a year.
- Acunetix recommends upgrading to OpenX 2.8.11 or later and auditing for prior unauthorized access before trusting an in-place upgrade.
- The MD5 values 6b3459f16238aa717f379565650cb0cf, 558c80e601fb996e5f6bbc99a9ee0051, fa4991d5fd3bf4a947b6ab0b15ce10b2, and 5014c31b479094c0b32221ae1f1473ac identify the embedded plugin archive and its three malicious files, not the outer OpenX release ZIP.
- The previously listed MD5 3cf59a7b8996dcc52370cf918f248ee4 had no supporting source and was removed. The captured malicious release ZIP is MD5 46fbfea4c901de2b168f871eb824875a.
References
- Backdoor Found in OpenX Open Source version 2.8.10 - Some Thoughtsclearmind.cc
- oss-security: CVE request - OpenX 2.8.10 Backdoorseclists.org
- OpenX Releases Security Updatecisa.gov
- Backdoor in popular ad-serving software opens websites to remote hijackingarstechnica.com
- OpenX 2.8.10 Backdoortenable.com
- OpenX Compromise Serving Malwareblog.sucuri.net
- OpenX 2.8.10 backdooracunetix.com
- Achtung: Anzeigen-Server OpenX enthält eine Hintertürheise.de
- OpenX Backdoor PHP Code Executionrapid7.com
- phpAds, OpenAds, and OpenX GPL release archiveopensource.be
- OpenX releases malvertising backdoor fixitnews.com.au
Source record: oss/attacks/openx/meta.yaml