Sin embargo, debido a su arquitectura y edad, CGI presenta varias vulnerabilidades web significativas:
* Inyección de comando: Si un script CGI no desinfecta correctamente la entrada del usuario antes de usarla en comandos de shell (por ejemplo, usando `system ()` o funciones similares en idiomas como Perl, Python o C), un atacante puede inyectar comandos maliciosos. Por ejemplo, si un script construye un comando como `ls /tmp /` + `$ _get ['FileName']`, un atacante podría elaborar un parámetro 'FileName` para ejecutar comandos arbitrarios en el servidor, potencialmente ganando el control total.
* traversal de ruta: Similar a la inyección de comandos, si el script no valida las rutas proporcionadas por el usuario, un atacante podría acceder a archivos fuera del directorio previsto. Por ejemplo, si un script permite a los usuarios ver archivos utilizando un parámetro como `ver? File =/etc/passwd`, un atacante podría intentar` ver? File =../../../etc/passwd` para leer archivos del sistema confidenciales.
* Scripting de sitio cruzado (XSS): Si un script CGI no desinfecta correctamente los datos suministrados por el usuario que se incluyen en la salida HTML, puede conducir a vulnerabilidades XSS reflejadas o almacenadas. Un atacante puede inyectar un código de JavaScript malicioso que se ejecutará en el navegador de la víctima, lo que potencialmente roba cookies u otra información confidencial.
* desbordamiento del búfer: Los scripts CGI mal escritos pueden ser susceptibles a las vulnerabilidades de desbordamiento del amortiguador. Si un atacante envía más datos de los que el búfer del script puede manejar, puede causar un bloqueo o permitir que el atacante ejecute código arbitrario.
* Denegación de servicio (DOS): Los scripts CGI escritos ineficientemente pueden ser atacados por ataques DOS. Una gran cantidad de solicitudes pueden abrumar el script o los recursos del servidor, lo que hace que el sitio web no esté disponible.
* Fugas de información: Un script CGI puede exponer inadvertidamente información confidencial a través de mensajes de error, archivos de registro o la forma en que maneja las excepciones.
* Configuración errónea de seguridad: Los scripts CGI configurados incorrectamente o sus archivos asociados (por ejemplo, permisos incorrectos) pueden conducir a varias vulnerabilidades.
Por qué CGI es menos común ahora:
Las vulnerabilidades y las limitaciones de rendimiento de CGI han llevado a su disminución de la popularidad. Los marcos web modernos como PHP, Django/Flask de Python, Ruby on Rails, Node.js, etc., ofrecen una seguridad y rendimiento mucho mejor a través de características como desinfección de entrada incorporada, manejo mejorado de errores y prácticas de seguridad más robustas. Estos marcos manejan la interacción entre el servidor web y la lógica de la aplicación de una manera mucho más segura y eficiente que CGI.
En resumen, si bien CGI era históricamente importante, sus vulnerabilidades inherentes lo convierten en una elección arriesgada para las aplicaciones web modernas. Usar marcos seguros, bien mantenidos y actualizados regularmente es crucial para proteger contra estos ataques.