ClickCease Vulnerabilidades: Los errores que las provocan - Parte 4

Tabla de contenidos

Únase a nuestro popular boletín

Únase a más de 4.500 profesionales de Linux y el código abierto.

2 veces al mes. Sin spam.

Los errores detrás de las vulnerabilidades - Parte 4

Joao Correia

21 de abril de 2023 - Evangelista técnico

Bienvenido a la cuarta parte de la serie de cinco partes en la que analizamos los errores de código que explican los numerosos exploits de los que se informa con regularidad. Examinaremos los Mitre CWE Top 25 de Mitre para 2022, y repasaremos las entradas #10 a #6 de la lista. Una entrada destacada en esta parte es "Use After Free", un nombre familiar para una ocurrencia muy común.

Puede encontrar parte 1 aquí, la parte 2 aquíy la parte 3 aquí.

Vayamos al grano.

 

10. Carga ilimitada de archivos de tipo peligroso

 

La carga de archivos sin restricciones se produce cuando una aplicación permite a los usuarios cargar archivos sin la validación adecuada, lo que les permite cargar archivos con contenido o tipos peligrosos. Los atacantes pueden aprovechar esta vulnerabilidad para ejecutar código malicioso o explotar otras debilidades de seguridad dentro de la aplicación o el servidor.

 

# Example of unrestricted file upload in Python

@app.route('/upload', methods=['POST'])

def upload_file():

    file = request.files['file']

    file.save(os.path.join('uploads', file.filename))

    return 'File uploaded successfully'

 

Para evitar que se suban archivos sin restricciones, los desarrolladores deben implantar mecanismos sólidos de validación de archivos, restringir los tipos de archivo a una lista segura conocida y realizar comprobaciones en el servidor para garantizar que sólo se aceptan archivos seguros.

 

9. Falsificación de petición en sitios cruzados (CSRF)

 

Cross-Site Request Forgery (CSRF) es un tipo de ataque que engaña a los usuarios para que ejecuten acciones no deseadas en una aplicación web en la que están autenticados. Esto ocurre cuando un sitio web, correo electrónico o programa malicioso hace que el navegador de un usuario realice una acción en otro sitio sin el conocimiento o consentimiento del usuario.

 

<!-- Example of CSRF attack in an HTML form -->

<form action="http://example.com/transfer_funds" method="POST">

  <input type="hidden" name="amount" value="1000" />

  <input type="hidden" name="destination_account" value="attackers_account" />

  <input type="submit" value="Click here for a free gift!" />

</form>

 

Para mitigar los ataques CSRF, los desarrolladores deben implantar tokens anti-CSRF, utilizar prácticas de codificación seguras, como seguir el atributo SameSite en las cookies, y garantizar comprobaciones adecuadas de autenticación y autorización para las acciones sensibles.

 

8. Limitación indebida de un nombre de ruta a un directorio restringido (también conocido como "Path Traversal")

 

Path traversal es una vulnerabilidad que se produce cuando una aplicación utiliza entradas externas para construir rutas de archivos o directorios sin neutralizar adecuadamente los elementos especiales. Esto puede permitir a los atacantes acceder a archivos o directorios fuera de la ubicación restringida prevista, lo que puede conducir a un acceso no autorizado, modificación o divulgación de información confidencial.

 

// Example of a path traversal vulnerability in PHP

$filename = $_GET['file'];

$content = file_get_contents("/restricted_directory/$filename");

echo $content;

 

Para evitar los ataques a través de rutas, los desarrolladores deben validar la entrada del usuario, utilizar funciones o bibliotecas seguras para la manipulación de rutas y aplicar controles de acceso adecuados en el lado del servidor para limitar el acceso a archivos y directorios confidenciales.

 

7. Uso después de libre

 

"Use after free" es un problema de corrupción de memoria que surge cuando un programa sigue utilizando un puntero después de haberlo liberado. Esto puede dar lugar a la corrupción de datos, bloqueos o incluso la ejecución de código arbitrario, dependiendo del momento y la instanciación del fallo.


// Example of a use after free error in C

char *ptr = (char *)malloc(SIZE);

if (err) {

    abrt = 1;

    free(ptr);

}

...

if (abrt) {

    logError("operation aborted before commit", ptr);

}



Para evitar problemas de uso después de la liberación, los desarrolladores deben seguir prácticas de codificación seguras, como la gestión adecuada de la memoria, el uso de punteros inteligentes en lenguajes como C++, y garantizar una gestión adecuada de los errores para evitar punteros colgantes.

 

6. Neutralización indebida de elementos especiales utilizados en un comando OS ("inyección de comandos OS").

 

La inyección de comandos del sistema operativo se produce cuando una aplicación construye un comando del sistema operativo utilizando una entrada influenciada externamente sin neutralizar adecuadamente los elementos especiales. Esto puede permitir a los atacantes ejecutar comandos o código arbitrarios en el sistema objetivo, lo que puede conducir a un acceso no autorizado o al control del sistema.

 

import os

user_input = input("Enter the name of the file to search: ")

command = f"find / -name {user_input}"

os.system(command)

 

Para evitar la inyección de comandos del sistema operativo, los desarrolladores deben validar y desinfectar la entrada del usuario, utilizar API parametrizadas o funciones que no permitan separadores de comandos, y aplicar el principio de mínimo privilegio para minimizar el impacto potencial de un ataque exitoso.

 

En conclusión, ser consciente de estas vulnerabilidades comunes y comprender cómo mitigarlas es crucial tanto para los desarrolladores como para los administradores de sistemas. Siguiendo prácticas de codificación seguras e implementando las salvaguardas adecuadas, puedes reducir significativamente el riesgo de explotación y proteger tus aplicaciones y sistemas de posibles amenazas.

Resumen
Los errores detrás de las vulnerabilidades - Parte 4
Nombre del artículo
Los errores detrás de las vulnerabilidades - Parte 4
Descripción
Siga leyendo hasta la cuarta parte de esta serie de cinco partes, en la que analizaremos los errores de código que explican las numerosas vulnerabilidades de las que se informa con regularidad.
Autor
Nombre del editor
TuxCare
Logotipo de la editorial

¿Desea automatizar la aplicación de parches de vulnerabilidad sin reiniciar el núcleo, dejar el sistema fuera de servicio o programar ventanas de mantenimiento?

Más información sobre Live Patching con TuxCare

Conviértete en escritor invitado de TuxCare

Empezar

Correo

Únete a

4,500

Profesionales de Linux y código abierto

Suscríbase a
nuestro boletín