fallo de seguridad en componente timthumb afecta a wordpress

Estamos encontrando instalaciones infectadas con wordpress. El punto de entrada es la galería de imágenes timthumb.php que se usa muy frecuentemente en wordpress tanto en themes como en plugins.
Además no se le suele prestar atención a este fichero y pasa por alto en las revisiones. Si no tenemos desactivado allow_url_fopen en php y la version es vieja, seguramente nos habrán colado en alguna ocasión algún script en php.

Para chequear nuestra instalación hemos creado un sencillo script en perl que puedes descargar aqui timthumb-checker.pl

#!/usr/bin/perl -w 

# timthumb.php vulnerability checker 
# search for vulnerable files and suspect  files
# http://www.exploit-db.com/exploits/17602/
#
# http://www.hostingaldescubierto.com 
# contact : jorge@senin.org
#

sub searchFiles  {
    my ( $VHOST_DIR ) = shift  ||  "/var/www/vhosts";
    
print "Searching at $VHOST_DIR...n";

my @files = qx{find ${VHOST_DIR} -name "*thumb.php"};

return @files ;

}



sub checkVersions {
            
    my @files = @_  ;
    
foreach $file (@files) {
    chop( $file );
    # search for version at file 
    @versions = qx{ grep "VERSION" ${file} };
    foreach my$version ( @versions ) {
        # extract version info
        
        if ( my ( $mayor, $minor, $revision )  = ( $version =~ /'(d{1,2}).(d{1,2}).(d{1,2})'/m )) {

            if ( $mayor < 2 ) {
                if ( $minor < 33 ) {
                    print "WARNING VULNERABLE !  version ($mayor.$minor.$revision) at $filen ";
                }
                else {
                    print "WARNING! seems not vulnerable but obsolete: version ($mayor.$minor.$revision) at $filen ";
                }
            }
            else {
                print "not vulnerable version ($mayor.$minor.$revision) at $filen";
            }
        }

    }
}

}

sub searchInfected {
    
    my ( $VHOST_DIR ) = shift  ||  "/var/www/vhosts";
    
    @files = qx{find ${VHOST_DIR} -path "*/cache/*php"};
    foreach my $file ( @files ) {
        chop( $file );
        print "Warning ! $file must not to be there!!!!n";
    }
    
}

  
my $path = $ARGV[0];
my @files = searchFiles($path);
checkVersions(@files);
searchInfected( $path );

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.