¿Puede la función 'sistema' plantear amenazas de seguridad severas en un servidor de alojamiento compartido?

2

Hace poco compré una cuenta de una empresa de alojamiento compartido y necesitaba que la función php system estuviera habilitada para uno de mis proyectos.
Así que creé un ticket y les pedí que lo habilitaran. Esto es lo que respondieron:

  

La activación de la función system plantea amenazas de seguridad graves en todo el servidor. Por lo tanto, no se puede habilitar.

Ahora tengo esta pregunta. ¿Tienen razón? ¿Puedo hacer algún daño de alguna manera mediante el uso de funciones como system , exec , pssthru , etc.? El sistema operativo es Linux.

    
pregunta Hamed Momeni 22.08.2012 - 17:37
fuente

2 respuestas

7

La llamada al sistema PHP simplemente transmite los comandos a la línea de comandos del sistema operativo. Si no tiene acceso de línea de comando al servidor que está rentando, entonces puede ver la obvia preocupación de permitir ese comando, ya que ahora, como desarrollador, tiene acceso al indicador de comandos.

Sin embargo, incluso si tiene acceso a la línea de comandos, la incorporación de la llamada del 'sistema' al código PHP puede hacer aún más daño, ya que expone la línea de comandos a cualquier inseguridad que pueda tener su aplicación web. Supongamos que soy capaz de llevar a cabo una inyección o un ataque XSS en su aplicación web. Si puedo llevar a cabo con éxito una explotación de este tipo, la probabilidad de que pueda enviar comandos directamente a su servidor web es extremadamente alta. Una vez que estoy allí, he comprometido por completo su servidor web individual.

Entonces, en una cáscara de nuez, sí, la llamada del sistema puede ser increíblemente insegura sin las entradas debidamente saneadas.

    
respondido por el Univ426 22.08.2012 - 17:48
fuente
3

Otro problema con las llamadas al sistema en un entorno de alojamiento compartido es que el procesador PHP (apache / mod_php) probablemente sea ejecutado por un usuario con permisos diferentes / más que su cuenta (por ejemplo, puede vincularse para escuchar los mensajes TCP entrantes en el puerto 80, leer los archivos de cada usuario de host compartido).

Cuando inicia sesión en un alojamiento compartido y tiene acceso a la línea de comandos, es un usuario con privilegios mínimos (solo edite sus propios archivos e inicie / detenga a sus trabajadores de MPM de Apache). Por lo tanto, se podría usar system llamado desde php como una forma de escalada de privilegios (por ejemplo, espiar a otros usuarios en el alojamiento compartido).

Además, es una práctica insegura utilizar las llamadas eval / system en programas seguros, especialmente cuando el comando para eval / system se construye a partir del procesamiento de cadenas que es fácilmente inyectable. Por ejemplo, podría tener un comando eval("mkdir $user_input"); , pero un atacante podría cambiar $user_input="blank; rm -rf *" , lo que posiblemente podría eliminar algunos archivos importantes. Las llamadas existen para simplificar la vida cuando la seguridad no es un problema (por ejemplo, es un script local ejecutado por usted solo en su propio ordenador).

Casi siempre hay una mejor manera de realizar la misma tarea. Tal vez su idioma tenga comandos personalizados que solo pueden ejecutar llamadas específicas del sistema; por ejemplo, python tiene os.mkdir (no estoy familiarizado con PHP). O tal vez el lenguaje tiene una forma de evaluación más segura que no tiene una forma inyectable (de manera análoga a cómo los parámetros enlazados vencen a la inyección de SQL). Por ejemplo, python tiene subprocess donde subprocess.call(['mkdir', new_dir_name]) no es susceptible a la inyección de shell (incluso con espacios dentro de new_dir_name todavía será tratado como un solo argumento de mkdir por el shell).

Quizás necesite una operación compleja del sistema de archivos cada vez que un usuario realice una acción. En ese caso, configuré un script que escucha los trabajos que se agregan a una cola en una base de datos y luego ejecuta esas tareas desde su cuenta de usuario. Asegúrese de desinfectar la entrada que ingresa a su base de datos (para que sus tareas no sean de inyección de concha).     

respondido por el dr jimbob 23.08.2012 - 23:00
fuente

Lea otras preguntas en las etiquetas