Apache mod_headers Mass Defacement

Posted on 15:46 by Xianur0

Autor: Xianur0 (Oscar García López)
CCAT Research Labs
Versiones afectadas: de momento se ha probado y todas las apache2 son afectadas, probablemente tambien la 1.3 pero no se ha realizado la prueba.
Parche: de momento ninguno, pero luego programamos uno :)...

Bueno este bug/detalle viene siendo algo muy simple, pero tiene bastante utilidad, es local, se requiere permisos para crear un .htaccess, y lo siguiente va de la siguiente forma:

Apache habia restringido las cabeceras que se pueden rescribir, por ejemplo Content-Length quedo bloqueada para basicamente todas las funciones, de modo que no se puede falsificar facilmente un content-length, pero pasa lo siguiente, mod_headers no filtra correctamente los CRLF, y apache no detecta que cabeceras se crean mediante el CRLF/LF, entonces tenemos lo siguiente:

Header set Last-Modified "Xianur0 Was Here\nContent-Length: 25"
Header set xianur0 "Xianur0 Was Here\nContent-Length: 25\n\n<h1>Xianur0 Was Here</h1>"


este .htaccess lo que haria seria rescribir la cabecera Last-Modified (esta cabecera es de las primeras en crearse), de modo que nuestra cabecera quedara antes que el content-length real, ahora hay diferencia entre el manejo de cabeceras que tienen los navegadores, por ejemplo google chrome, lee solo la primera cabecera y las siguientes repetidas son ignoradas, por el contrario firefox hace basicamente lo mismo que apache, va leyendo las cabeceras repetidas y remplazando el valor anterior por el de la cabecera mas reciente, de modo que nuestro .htaccess ya contempla esos detalles, primero edita Last-Modified (para que quede antes que el content-length real), y luego crea una cabecera "xianur0", con valor "Xianur0 Was Here", y en cada una pone un salto de linea ("\n"), y seguido de eso crea las cabeceras Content-Length que sustituiran a la real, luego en la ultima cabecera que se escribe, se insertan otros dos saltos de linea, y tenemos que lo siguiente queda en la seccion de html, los navegadores comunes, leen unicamente la cantidad de caracteres especificados en el content-length, de modo que todo lo siguiente despues de eso 25 que se especificaron, es ignorado.

y listo, tenemos un deface automatico de todas las paginas, nada se editar, solo se crea el .htaccess, pero a la vista de cualquier navegador la web estaria completamente defaceada :)...

HTTP/1.1 200 OK
Date: Wed, 05 May 2010 22:36:17 GMT
Server: Apache/2.3.5 (Unix)
Last-Modified: Xianur0 Was Here
Content-Length: 25
ETag: "1a4558-2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
xianur0: Xianur0 Was Here
Content-Length: 25

<h1>Xianur0 Was Here</h1>
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>



En resumen, apache bloquea la rescritura del Content-Length y otras cabeceras, pero no se requiere rescribirlas, unicamente crear otras en diferentes lugares y el funcionamiento interno de los navegadores y la inestabilidad del protocolo HTTP completan el proceso :)...


Bytez...

1 comentarios:

Unknown dijo...

Hola xianur0 como siempre información de la mejor calidad jeje, para poner en practica esta técnica con solo crear un .htaccess como lo explicas ahi y montarlo en mi localhost (en el path donde esta el contenido publico)por ejemplo quedaría afectado el servidor apache?

salu2