Vulnerabilidades comunes en código PHP – Parte 2

PHP OBJECT INJECTION - (Inyección de objetos PHP)

Esta vulnerabilidad aprovecha la llamada a la función unserialize() a través de un input sin sanitizar para inyectar objetos PHP en la memoria. Estos objetos pueden activarse en una aplicación que implemente métodos mágicos de PHP como __wakeup() o __destruct() en alguna de sus clases.
Si se consigue hacer una inyección de objetos PHP exitosa, esto puede conducir a más ataques, como inyección SQL, inyección de código, recorrer las distintas rutas e incluso tirar completamente la aplicación web.
En el siguiente ejemplo podemos ver una clase con un método __destruct() explotable:
En este ejemplo, el atacante podría eliminar un archivo a través de ataque de directorio transversal, por ejemplo haciendo una petición a la siguiente URL:

MITIGAR PHP OBJECT INJECTION

No usar la función unserialize() con las entrada de usuario. Usar en su lugar funciones JSON.

AUTHENTICATION BYPASS - (Omisión de autenticación)

Esta vulnerabilidad se debe a un error del desarrollador en el que una aplicación no valida correctamente las credenciales de un usuario, por lo que da privilegios de acceso elevado al usuario.
Usar métodos que no hacen lo que parecen:
Por ejemplo, algunos desarrolladores novatos de WordPress usan la función is_admin() para comprobar si el usuario tiene acceso de nivel de administrador, sin entender que el uso real de esta función es para confirmar si alguien está viendo una página de administración y no si ese usuario tiene privilegios de administrador. Por lo que si se está usando en una algún lugar de la aplicación desarrollado y restringido para administradores, cualquiera realmente podría tener acceso.
Modificación de parámetros:
También se puede dar el caso de que debido a errores de diseño de autenticación, la aplicación verifique el inicio de sesión exitoso a través de parámetros de valor fijo. Un usuario puede modificar estos parámetros para acceder a las áreas protegidas sin proporcionar credenciales válidas. Por ejemplo:
Bastaría con modificar el parámetro a authenticated=yes.
Predecir el ID de sesión:
Muchas aplicaciones gestionan la autenticación mediante el uso de identificadores de sesión. Si la generación de estos IDs son predecibles, un usuario malintencionado podría encontrar una ID de sesión válida y obtener acceso no autorizado a la aplicación.

MITIGAR AUTHENTICATION BYPASS

Esto requiere un trabajo laborioso por parte de los desarrolladores más experimentados en los que haya una continua revisión del código para garantizar que no existan errores lógicos en los procesos de autenticación y tokenización.

STREAM INJECTION ATTACK (LOCAL/REMOTE FILE INCLUSION)

Estos ataques abusan de la capacidad de sitios web que aceptan la subida de archivos, como documentos e imágenes. A través de la inclusión remota de archivos, un atacante podría intentar engañar al código PHP para que acepte una URL en otro sitio como entrada válida. Esta acción podría usarse para ejecutar código malicioso, como por ejemplo listar contenidos de archivos locales del servidor.
Por ejemplo a través de la siguiente url:
Como podemos observar, en el parámetros se retrocede hacia atrás en los directorios hasta encontrar el etc y posteriormente llamar al archivo passwd.
Se puede hacer también inclusión de archivos remotos. Esto ocurre cuando una pagina recibe como entrada la ruta del archivo que debe incluirse y esta entrada no está sanitizada correctamente, lo que permite inyectar una URL externa. Aunque la mayoría se usan para código PHP, también es posible que se pueda usar con JSP, ASP y otras.
Un ejemplo de ello sería el siguiente código:
En este caso la ruta se está obteniendo de la petición HTTP y no se está realizando ningún tipo de validación de entrada, por lo que imagina que el atacante inyecta la siguiente url:

MITIGAR STREAM INJECTION ATTACK

Aparte de como hemos mencionado en la mayoría de los casos que hay que validar correctamente cualquier entrada de usuario, también debemos buscar en nuestro código que no haya implementaciones inseguras de las funciones include, include_once, fopen, file_get_contents, require y require_once.

CONCLUSIÓN

Hay que verificar, validar y confirmar todo, ya que la mayoría de los problemas de seguridad web son originados por no realizar correctamente funciones de autenticación, validación y administración de sesión adecuadas. Las validaciones habrá que hacerla tanto en el lado del cliente como también y las más importantes, en el lado del servidor.

Compartir este artículo

¡Me gusta este artículo!

1

Artículos relacionados

    Deja un comentario

    ¡Gracias por dejar tu comentario!

    Entradas recientes