¿En qué condiciones en las instalaciones de Apache se necesita la aplicación AddHandler / x-httpd-php .php?

Soy un investigador de security que se ha estado ejecutando en múltiples casos donde se pueden explotar los formularios de carga de files, lo que permite que el código PHP controlado por el atacante sea interpretado por el server, lo que lleva a la ejecución remota de código. La causa raíz de esta vulnerabilidad parece ser una configuration henetworkingada que está habilitada de forma pnetworkingeterminada en la configuration de Apache de las siguientes distribuciones de Linux:

  • CentOS 5.8
  • CentOS 6.5
  • RedHat 5.10
  • RedHat 6.5

y posiblemente otros. El escenario es:

AddHandler application/x-httpd-php .php 

El efecto de esta configuration que es preocupante es que le dice al server que los files con nombres que coincidan con \ .php deben ser interpretados como código PHP. Si un atacante sube una image con el nombre shell.php.jpg con el código php embedded en él y navega a la página, el server ejecutará el script como el usuario del server.

Mi solución recomendada es desactivar esta configuration comentándola. Mi razonamiento es que los files .php ya tienen un controller implícito incorporado a Apache, que le dice al server que interprete el código como php, por lo que esta configuration parece a mis ojos ser networkingundante. Tengo la sensación de que se trata de un legado de configuration llevado adelante por las versiones antiguas de CentOS y RedHat, y las versiones más recientes no tienen esta configuration.

Mi pregunta es: ¿En qué circunstancias inhabilitará esta configuration romperá la funcionalidad?

Mi razonamiento es que los files .php ya tienen un controller implícito incorporado a Apache, que le dice al server que interprete el código como php

Por lo que sé, no hay gestor implícito, este command AddHandler es lo que le dice a apache pasar files con una extensión .php al controller application/x-httpd-php (mod_php)

Sin embargo, en general, usted es correcto. Es (aparentemente) una característica poco conocida de mod_mime que los files con extensiones múltiples tienen TODAS sus extensiones examinadas para manejadores y otra información. La documentation de Apache sugiere que dicha directiva debe ser reemplazada por:

 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> 

para pasar solamente los files que terminen en .php a ese manejador.

La mejor solución, sin embargo, sería almacenar files de usuario descargados por el usuario fuera de DocumentRoot donde los browseres no pueden solicitar script.php.jpg (o enviar enlaces a http://www.example.com/uploads/thisisreallyyourbank.html )