Veiligheidslek Timthumb op WordPress

Timthumb is een script dat afbeeldingen ‘on the fly’ kan herschalen naar een andere grootte. Deze vorm van ‘image resizing’-scripts is erg populair en Timthumb kent zijn populariteit voornamelijk in de WordPress-wereld. Heel veel WordPress-themes maken daarom gebruik van deze software om aan image resizing te doen.
Helaas stellen wij vast dat nog steeds heel veel WordPress-sites een theme hebben met een oude, lekke versie van Timthumb.
Veiligheidslek
Al in 2011 werd het lek gerapporteerd en de auteur van het script schreef er een uitgebreide blog post over.
Voor alle duidelijkheid: dit lek heeft niets te maken met de veiligheid en stabiliteit van WordPress zelf. Timthumb vormt geen onderdeel van de WordPress-core. Het is een onafhankelijk script dat vaak gebruikt wordt in WordPress-themes die door externe partijen ontwikkeld worden.
Het lek laat toe om zomaar bestanden te includen, te uploaden naar de server en uit te voeren. Op die manier kunnen hackers scripts uploaden die uw hostingpakket kunnen compromitteren en veel schade kunnen berokkenen.
Oorzaak
De oorzaak van de vulnerability ligt bij het feit dat het script externe bestandsinclusies ondersteunt. Met andere woorden zijn het niet enkel lokale afbeeldingen die verwerkt kunnen worden, maar ook externe.
Onderstaande URL is een voorbeeld van hoe Timthumb normaalgezien aangeroepen wordt:
http://www.domeinnaam.be/wp-content/themes/uw-theme/lib/scripts/timthumb.php?src=http://farm9.staticflickr.com/8204/8211249708_14b486b010.jpg
De inputcontrole is vrij oppervlakkig en controleert enkel stukken van de URL en niet de volledige URL. Het script gaat na of de domeinnaam van de externe afbeelding in de veilige lijst zit. Deze lijst bevat onder andere volgende veilige domeinnamen:
- Flickr.com
- Picasa.com
- Img.youtube.com
- Blogger.com
- WordPress.com
Wanneer u echter een URL construeert die één van deze veilige domeinnamen bevat, dan kan u erg eenvoudig de controle passeren. Volgende URL is een hypothetisch voorbeeld van een schijnbaar veilige URL:
http://flickr.com.evilsite.com/hack.php
Misbruik
De inhoud van het externe bestand (in dit geval ‘hack.php’) wordt niet meteen uitgevoerd, maar wordt in de bijhorende cachemap geplaatst. Wanneer het doorgegeven bestand een afbeelding is, wordt het vanuit de cache meteen afgebeeld. Wanneer het bestand geen afbeelding is, dan krijgt men een fout te zien met de locatie van het bestand. De foutmelding kan er als volgt uitzien:
Unable to open image : /var/www/wp-content/themes/uw-theme/lib/scripts/cache/07ae62439acc0e284d9d706b55fabb36.php
Het feit dat het script de locatie van het bestand zomaar afbeeldt, maakt het erg makkelijk om de hack.php script uit te voeren. Het is een kwestie van onderstaande URL uit te voeren om het pakket effectief te misbruiken.
http://www.domeinnaam.be/wp-content/themes/uw-theme/lib/scripts/cache/07ae62439acc0e284d9d706b55fabb36.php
Gevolgen
De gevolgen van het lek kunnen enorm groot zijn. Wanneer hackers PHP-scripts uploaden, kunnen zij makkelijk de controle overnemen en uw bestanden inkijken of wijzigen. Ook de achterliggende database is niet langer veilig aangezien de databasegegevens zomaar uit het configuratiebestand kunnen gehaald worden.
Wat doen hackers dan meestal?
- Ofwel wijzigen ze de inhoud van uw site of blog om hun eigen politieke boodschappen te verspreiden.
- Vaak gebruiken ze de gehackte sites als opslagplaats om malafide bestanden te verspreiden.
- Gehackte sites kunnen ook prima gebruikt worden om spam mee uit te sturen
- Ze injecteren stiekem code in uw site die telkens uitgevoerd wordt wanneer bezoekers langskomen
- Ze vallen andere sites of servers aan vanaf uw pakket.
Vaststellen en oplossen
Niet alle WordPress-installaties zijn kwetsbaar. Enkel installaties met themes die een oude versie van Timthumb gebruiken.
Alle versies van Timthumb ouder dan 2.8.2 zijn lek en dienen zo snel mogelijk geüpgraded te worden. Op http://code.google.com/p/timthumb/ vindt u de nodig uitleg. De meest recente versie van het Timthumb-script vindt u op http://timthumb.googlecode.com/svn/trunk/timthumb.php
Om het u makkelijker te maken is er een WordPress-plugin die uw installatie afloopt en op zoek gaat naar het lek. Er wordt niet enkel gezocht naar oudere versies van Timthumb, maar ook naar bestanden in de cache map die daar mogelijks door hackers geplaatst zijn.
Een andere mogelijke fix is om de lijst van veilige externe sites leeg te maken. Deze lijst ziet er als volgt uit:
$allowedSites = array (
'flickr.com',
'picasa.com',
'img.youtube.com',
);
Dit stukje code vervangt u gewoon door het volgende:
$allowedSites = array ();
Hoewel het leegmaken van de lijst met veilige sites een makkelijke oplossing kan zijn, is het upgraden naar de meest recente versie van Timthumb ontzettend belangrijk. De makers van de WordPress themes die hiervan gebruik maken, zullen ongetwijfeld zelf een update vrijgegeven hebben en de recentste versie van het script meenemen. Een update van uw themes kan dus ook helpen.
Conclusie
Hoewel dit eigenlijk oud nieuws is, stellen we toch vast dat heel wat sites nog steeds gebruik maken van themes met een oude versie van TimThumb. En hoewel dit lek niets met WordPress zelf te maken heeft, zijn het hoofdzakelijk WordPress-installaties die hierdoor gehackt worden. Ons advies is om uw themes zo snel mogelijk te upgraden en na te gaan of ze een oude versie van Timthumb gebruiken. Zorg ervoor dat u een versie staan hebt die recenter is dan 2.8.2.