Programación segura en PHP: descubre vulnerabilidades en las dependencias de tus proyectos vía Composer y PHP Security Advisories Database

Los proyectos PHP están expuestos, como toda tecnología informática, a la presencia de vulnerabilidades en su base tecnológica. La rama y versión de PHP empleada es un importante referente pero no el único. También es necesario conocer que vulnerabilidades  han sido descubiertas en los paquetes y librerías utilizadas.

Los editores de Cybersecurity VenturesHerjavec Group reportaban el año pasado que el 90% de los incidentes de seguridad informática tuvieron lugar por la presencia de software con vulnerabilidades conocidas. Herjavec Group, ocupa el segundo puesto, en lo que va del 2017, en la lista de las 500 compañías más importantes de ciberseguridad a nivel mundial. En esa lista, empresas como Symantec ocupan el noveno lugar y Kaspersky Lab el 28. Por tanto, es un referente a tener en cuenta.

vulnerabilidades-php

Figura 1. Número de vulnerabilidades descubiertas por año en PHP hasta junio del 2017. Tomado de https://www.cvedetails.com.

La PHP Security Advisories Database es un proyecto abierto que tiene como objetivo centralizar la información referente a problemas de seguridad en proyectos y librerías de PHP, aportando el valor añadido de brindar mecanismos simples de consultas.

Manualmente puede revisarse el contenido de la base de datos en https://security.sensiolabs.org/database.  Por supuesto, esto no es lo más óptimo, por eso, existe un servicio para que los desarrolladores puedan subir el archivo composer.lock de su proyecto y obtengan una evaluación de seguridad de los componentes empleados. De más está decir que esto solo es posible si el proyecto PHP gestiona las dependencias mediante Composer, cuestión que desde hace tiempo ya es de uso obligatorio para los desarrolladores de Laravel, Sympony y otros frameworks.

Para hacer la evaluación, primero localice el archivo composer.lock dentro de su proyecto PHP. Luego, según sus preferencias puede hacerlo siguiente:

Obtener los resultados de la evaluación mediante una página web.

  1. Ir a la página https://security.sensiolabs.org/check
  2. Suba el archivo composer.lock mediante el botón Select a composer.lock. Al concluir realice clic en el botón Check (figura 2).
  3. Obtener el informe con las vulnerabilidades encontradas (figura 3).
opcion-web.png

Figura 2. Pasos para subir un archivo composer.lock en https://security.sensiolabs.org/check

reporte-web.png

Figura 3. Reporte obtenido.

Obtener los resultados de la evaluación directamente en la shell

  1. Tener instalada la aplicación curl, de la cual habíamos mencionado las opciones más frecuentes en el blog.
  2. Ejecutar curl con la siguiente opción:

curl -H “Accept: text/plain” https://security.sensiolabs.org/check_lock -F lock=@/ruta/composer.lock

Donde /ruta representa la ubicación del archivo composer.lock. Esto es lo único que hay que establecer pues el resto de las opciones se mantienen igual. En la figura 4 se muestra el resultado obtenido con el mismo composer.lock de la opción anterior. En este caso, curl se ejecutó en el  directorio donde se encontraba el composer.lock.

opcion-shell.png

Figura 4. Resultado obtenido mediante el uso de curl.

Obtener los resultados de la evaluación en JSON

Si quieres obtener los resultados en formato JSON (JavaScript Object Notation), solo tienes que establecer el valor application/json en el campo de encabezado de petición HTTP Accept y mantener todo lo demás igual que el ejemplo anterior (figura 5).

opcion-shell-json.png

Figura 5. Resultado obtenido en formato JSON mediante curl.

Conclusiones

Antes de escribir un código que ayude a garantizar la seguridad de nuestras aplicaciones web, es importante comprobar que  la base tecnológica no tiene librerías y otros componentes con vulnerabilidades conocidas. Es una mala práctica de programación segura también, desarrollar un proyecto sin tener en cuenta que los componentes que utilicemos deberán ser actualizados por nosotros o nuestros clientes en un futuro cercano.  Las estadísticas de consulta de PHP Security Advisories Database (figura 6) exponen que de cada 10 proyectos que han realizado consultas, 1 tenía componentes con vulnerabilidades conocidas.

estadisticas.png

Figura 6. Estadísticas de PHP Security Advisories Database.

La mejor forma de enfrentar un problema de seguridad es previniéndolo. PHP Security Advisories Database parece ser útil en este empeño. Espero que este artículo que te haya sido útil para mejorar la seguridad de tus aplicación web programadas en PHP.

S4lud0s y h4st4 el próx1m0 p0st!!!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s