Actividad 2 Grupal Auditoria de Código

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 24

Asignatura Datos del alumno Fecha

Seguridad en el Software 10/11/2024

Caso grupal: Auditoría de código de una aplicación

Por cada uno de ellos hay que rellenar la siguiente tabla:


pjsip-perf.c:1108
Vulnerabilidad Buffer overflow.
detectada
Valoración Falso Positivo
Explicación del
error

Se ha detectado que se trabaja con un buffer en el que se


introducen los datos por parámetro desde el exterior, esto puede
provocar un buffer overflow si un atacante introduce por
parámetro datos que sobrepasen el tamaño del buffer, pudiendo
escribir en las zonas de memoria adyacentes. Sin embargo, se
trata de un falso positivo, ya que existe un control del tamaño del
buffer, el cual se crea siempre con un carácter más de tamaño
que los datos introducidos y se escribe en el último carácter
sobrante el indicador de fin de cadena ‘\0’.

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Remediación N/A
Código CWE CWE ID 120, CWE ID 129, CWE ID 131, CWE ID 787
Requisitos de Como requisitos de seguridad para evitar este tipo de errores se
seguridad debería validar siempre la entrada de datos, verificando tanto el
tamaño de los datos de entrada como que no sean caracteres
extraños que puedan ocasionar un fallo en el programa. Además,
se deben crear buffers suficientemente grandes para los datos
que van a manejar o usar buffers dinámicos de tamaño variable.

file_io_ansci.c:63
Vulnerabilidad Path Manipulation
detectada
Valoración Positivo verdadero
Explicación del Se hace uso de un fichero en la función fopen() el cual es
error recibido por parámetro desde el exterior y no se ha validado en
ningún momento.
Primero se recibe el fichero por el argumento argv de la función
main, donde no se valida el fichero entrante

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Posteriormente se recibe el fichero por parámetro en la función


pjmedia_wav_player_port_create() donde una vez más, este no
es validado antes de enviarse a otro método.

Por último, el fichero se recibe en la función pj_file_open() por


parámetro donde tampoco se valida y lo usa en la función
fopen().

De esta forma un atacante puede estar introduciendo un path


manipulado al sistema.

Remediación Para evitar la posible introducción de un path manipulado por


un atacante que pueda comprometer el comportamiento del

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

programa, se deben usar paths absolutos en vez de introducirlos


desde el exterior. En el caso de necesitar introducirlos desde el
exterior se deben validar en la entrada antes de ser usados,
comprobando, por ejemplo, que no se utilicen caracteres no
permitidos.
Código CWE CWE ID 22, CWE ID 73
Requisitos de Como requisitos de seguridad se deben validar siempre los datos
seguridad de entrada desde el exterior ya sea con comprobaciones de
caracteres no permitidos o listas blancas de rutas permitidas o
en el caso de no ser necesario recibir rutas desde el exterior usar
rutas absolutas que un atacante no pueda manipular.

transport_srtp.c:897
Vulnerabilidad Buffer Overflow: Off-by-One
detectada
Valoración Mala Práctica
Explicación del
error

Se ha detectado un error donde se introduce un dato (174 bytes)


cuyo tamaño es un carácter más que el tamaño del buffer (173
bytes). Sin embargo, desde la entrada donde podemos introducir

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

ese dato no podemos llegar al buffer, por lo que no llegaría a


producirse ese buffer overflow. De forma que se trata de una
mala práctica.

Remediación N/A
Código CWE CWE ID 129, CWE ID 131, CWE ID 193, CWE ID 787, CWE ID 805
Requisitos de Como requisitos de seguridad para evitar este tipo de errores se
seguridad debería validar siempre la entrada de datos, verificando tanto el
tamaño de los datos de entrada como que no sean caracteres
extraños que puedan ocasionar un fallo en el programa. Además,
se deben crear buffers suficientemente grandes para los datos
que van a manejar o usar buffers dinámicos de tamaño variable.

http_client.c:270
Vulnerabilidad Password Management: Empty Password
detectada
Valoración Falso Positivo

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Explicación del
error

Hemos analizado que define un array de structs “test_data”,


donde en uno de ellos introduce contraseñas vacías. Sin embargo,
al estar contenidos en un array de test (test_data) donde se
tienen structs con distintas configuraciones “usr + password, usr
sin password, password sin usr, etc.” Vemos que se trata de un
falso positivo, ya que estos structs en los que usa password vacías
los está usando para pruebas en la aplicación, por eso, hemos
llegado a la conclusión de que al ser información no real (solo
usada para pruebas) no compromete el sistema ni la posible
información.

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Remediación N/A
Código CWE CWE ID 259
Requisitos de Como requisitos de seguridad para evitar este tipo de errores, se
seguridad debe mantener un aislamiento entre los datos de prueba y el
entorno de producción, asegurando que los datos de prueba
(como contraseñas vacías) no se utilicen en producción. Además,
es importante identificar y etiquetar los datos de prueba en el
código para evitar confusiones, imponer políticas estrictas de
contraseñas en producción, y limitar el acceso a estos datos solo a
personal autorizado. Finalmente, se deben excluir los datos de
prueba de los logs de producción y de las auditorías de seguridad
para reducir falsos positivos y garantizar la seguridad en el
entorno productivo.

http_client.c:270
Vulnerabilidad Password Management: Hardcoded Password
detectada
Valoración Falso Positivo
Explicación del
error

El error consiste en que se están almacenando contraseñas en el

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

propio código de la aplicación, por lo que si un atacante obtiene


acceso al código podría acceder a las contraseñas. Sin embargo,
en este caso al tratarse de un Struct definido para test, se usa
únicamente para pruebas de funcionamiento de la aplicación y
por lo tanto las contraseñas son solo para test. Se trata de un
falso positivo, ya que no hay contraseñas reales comprometidas.

Remediación N/A
Código CWE CWE ID 259, CWE ID 798
Requisitos de Como requisitos de seguridad para evitar este tipo de errores, se
seguridad debe asegurar que las contraseñas hardcoded sólo se utilicen en
entornos de prueba y no se incluyan en producción. Además, es
importante marcar claramente los datos de prueba en el código
para evitar confusiones y limitar el acceso al código fuente con
estas contraseñas solo a personal autorizado. Finalmente, estos
datos de prueba deben excluirse de los logs de producción y de
las auditorías de seguridad, asegurando que no se marquen falsos
positivos en entornos operativos.

http_client.c:126

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Vulnerabilidad String Termination Error


detectada
Valoración Positivo verdadero
Explicación del
error

La vulnerabilidad está relacionada con la llamada a la función


strlen() en http_client.c en la línea 126. Esta función calcula la
longitud de una cadena, asumiendo que la cadena está
correctamente terminada con un carácter nulo (\0). Sin
embargo, si la cadena no tiene este delimitador, strlen()
continuará leyendo en memoria más allá del final de la cadena,
lo que puede llevar a un buffer overflow.

Remediación Una de las mejores formas de manejar cadenas y evitar


problemas de terminación es utilizar funciones que gestionen

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

automáticamente la longitud y la terminación nula. Aquí se


recomienda reemplazar strlen() con StringCbLength() de la
biblioteca strsafe.h, que verifica la longitud de la cadena y
asegura que no se lea más allá del final.
Código CWE CWE ID 170, CWE ID 665
Requisitos de Como requisitos de seguridad para evitar esta vulnerabilidad, se
seguridad debe asegurar que todas las cadenas estén adecuadamente
terminadas en nulo antes de procesarlas. Además, es
recomendable usar funciones seguras para la manipulación de
cadenas que limiten el acceso a memoria solo dentro de los
límites de la cadena y gestionen automáticamente la
terminación, evitando así el uso directo de strlen() en casos
críticos. Implementar revisiones de límites y validaciones de
tamaño previas al procesamiento de datos también reduce el
riesgo de desbordamiento de buffer y accesos indebidos a la
memoria.

ice_test.c:1122
Vulnerabilidad Buffer Overflow: Format String
detectada
Valoración Positivo verdadero

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Explicación del
error

Mediante Sprintf() se escribe en el array title que se ha declarado


con un tamaño fijo de 120 caracteres. Sin embargo, no hay
ningún tipo de control sobre la cantidad de caracteres que se van
a escribir en el buffer, ya que Sprintf() no limita la cantidad de
caracteres que se van a escribir. Además, en los valores que se
pasan por parámetro tampoco se controla el tamaño, por lo que
se puede producir un Buffer Overflow sobrescribiéndose en la
memoria adyacente a title.

Remediación
Código CWE CWE ID 134, CWE ID 787
Requisitos de Como requisitos de seguridad para evitar esta vulnerabilidad, se
seguridad debe utilizar funciones de escritura seguras, como snprintf, que
permitan especificar el límite de caracteres a escribir en el
buffer, evitando así sobreescrituras accidentales. Además, se

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

recomienda validar y limitar el tamaño de los datos que se pasan


como parámetros, asegurándose de que no excedan el tamaño
definido del buffer. Implementar estas verificaciones ayuda a
prevenir desbordamientos de buffer y protege la memoria
adyacente a la variable de destino.

cipher.c:379
Vulnerabilid Type Mismatch: Signed to Unsigned
ad
detectada
Valoración Positivo Verdadero
Explicación Esta vulnerabilidad está relacionada con un desajuste de tipos entre
del error enteros signed y unsigned en la línea 379 del archivo cipher.c. En la
siguiente imagen se puede ver la definición de la variable len como
un entero unsigned.

Posteriormente, dentro del método srtp_cipher_type_test(), a la


variable len se le asigna el valor de test_case-
>ciphertext_length_octets, lo que provoca una conversión implícita
de un entero signed a un entero unsigned (len). Este desajuste
puede provocar un comportamiento inesperado, como
desbordamientos de enteros o valores negativos que se interpretan
como valores positivos grandes al ser tratados como unsigned.

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Remediación Para evitar problemas con la conversión implícita, hay que


asegurarse de que ciphertext_length_octets y len usen tipos
compatibles. Si es necesario mantener ciphertext_length_octets
como con signo, hay que incluir una validación antes de la
asignación para garantizar que el valor no sea negativo.
El programador también tiene que prestar atención a las
advertencias del compilador para evitar este tipo de conversiones.
Código CWE CWE ID 195
Requisitos Asegurarse de que todas las variables relacionadas con cálculos de
de tamaño o longitud tengan un tipo definido para evitar desajustes de
seguridad signos como ocurre en la vulnerabilidad expuesta.

mips_test.c:490
Vulnerabilidad Use After Free
detectada
Valoración Positivo Verdadero
Explicación del error En la línea 490 del método init_conf_port() presente en
el archivo mips_test.c se está haciendo referencia a una
ubicación de memoria que ha sido previamente liberada

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

en la línea 479 de ese mismo archivo. Esto puede llevar a


corrupción de memoria, pérdida de datos sensibles y
reasignación de memoria.

Remediación Para evitar la reutilización accidental de memoria, como


ocurre en este caso, se puede utilizar una macro que
invalide el puntero inmediatamente después de liberar
la memoria. Habría que reemplazar la llamada a
free(ptr) por FREE(ptr).

Otra remediación sería verificar que un puntero (antes

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

de usarlo) no sea NULL para evitar el acceso a memoria


previamente liberada.
Código CWE CWE ID 416
Requisitos de Establecer prácticas claras para asegurarse de que cada
seguridad bloque de memoria asignado se libere una sola vez.
Convertir cualquier referencia posterior a memoria
liberada en un error evidente estableciendo el puntero a
NULL.

cli_console.c65
Vulnerabilidad Privacy Violation
detectada
Valoración Positivo Verdadero
Explicación del En la línea 65, dentro de la función console_write_log() que se
error encuentra en el archivo cli_console.c se ha detectado una
vulnerabilidad que consiste en una violación de información
confidencial de los usuarios. El problema se encuentra en que
esta información se escribe dentro de un printf(), exponiendo así
los datos privados y comprometiendo la privacidad del usuario.

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Remediación Para remediar la vulnerabilidad se podría encriptar la información


sensible siempre y cuando sea absolutamente necesario el
almacenamiento de datos sensibles.
Código CWE CWE ID 359
Requisitos de Minimizar la exposición de datos sensibles
seguridad Educar a los desarrolladores con el objetivo de que empleen las
mejores prácticas para el manejo de información sensible
Utilizar herramientas para realizar análisis periódicos de
seguridad.

siptypes.cpp376
Vulnerabilidad Memory Leak
detectada
Valoración Positivo verdadero
Explicación del En la línea 376 dentro de la función fromPj() ubicada en el archivo
error siptypes.cpp se ha encontrado una vulnerabilidad identificada
como fuga de memoria (memory leak). Este error se produce
porque la memoria asignada dinámicamente utilizando malloc()
no se libera, lo que resulta en una fuga de memoria si no se
manejan bien las excepciones. La memoria se asigna
dinámicamente mediante malloc() para la variable buf, y en
varios puntos del flujo del programa, como cuando se encuentran
errores (PJ_ENOMEM, PJ_EINVALIDHDR), la memoria asignada no

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

siempre se libera antes de generar la excepción.

Remediación Para remediar la vulnerabilidad hay que asegurarse siempre de


liberar la memoria asignada antes de salir de la función.
Código CWE CWE ID 401
Requisitos de Establecer patrones para la asignación y liberación de la memoria
seguridad que impidan este tipo de vulnerabilidades.

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Evitar el uso de malloc() y usar alternativas como smart pointers

addr_resolv_sock.c45
Vulnerabilidad Often Misused Authentication
detectada
Valoración Positivo Verdadero
Explicación del En la línea 45 en el archivo addr_resolv_sock.c45 se ha detectado
error un problema de seguridad que consiste en que la información
obtenida mediante la función gethostbyname() no es confiable,
ya que los atacantes pueden manipular los registros DNS
(mediante técnicas como DNS Spoofing o Cache Poisoning) para
redirigir tráfico o engañar al programa haciéndose pasar por un
servidor legítimo.

Remediación Para remediar esta vulnerabilidad se pueden implementar


búsquedas DNS mediante canales cifrados para prevenir ataques

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

de interceptación (DNS sobre TLS o HTTPS).


Código CWE CWE ID 247, CWE ID 292, CWE ID 558, CWE ID 807
Requisitos de Uso de certificados digitales para verificar los servidores con los
seguridad que se comunica la aplicación

aes_icm_ossl.c251
Vulnerabilidad detectada Weak Encryption Insecure Initialization Vector
Valoración Positivo Verdadero
Explicación del error En la línea 251 de la clase aes_icm_ossl.c se está
haciendo uso del método EVP_EncryptInit_ex() que
en este caso recibe como vector de inicialización
(IV) el valor NULL (último parámetro). De esta
forma, al no utilizar un IV proporcionado por un
generador de números criptográficos
pseudoaleatorios, provoca que el texto cifrado sea
más predecible y susceptible a ataques de
diccionario.

Remediación Para remediar esta vulnerabilidad el programador


tendrá que utilizar un generador de números
criptográficos pseudoaleatorios para obtener el IV

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

que posteriormente utilizará en el método de


cifrado. Además, es importante asegurarse de que
el tamaño de la clave y del IV sean los apropiados
para el algoritmo de cifrado que se va a utilizar.
Código CWE CWE ID 329
Requisitos de seguridad Como requisitos de seguridad para evitar esta
vulnerabilidad, es fundamental utilizar un vector de
inicialización (IV) seguro generado mediante un
generador de números pseudoaleatorios
criptográficamente seguro (CSPRNG). Además, se
debe validar que el tamaño del IV y de la clave sea
el adecuado para el algoritmo de cifrado en uso,
garantizando así la robustez de la encriptación y
minimizando el riesgo de predicción o ataques de
diccionario.

cipher.c180
Vulnerabilidad detectada Insecure Randomness
Valoración Positivo Verdadero
Explicación del error En la línea 180 de la clase cipher.c se hace uso de la
función rand() de C++. El problema es que esta
función no proporciona valores lo suficientemente
aleatorios para que se puedan utilizar en un contexto
de criptografía, como es el caso.

Cabe destacar, que, tras realizar nuestro análisis,

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

hemos detectado que la aplicación tiene un


parámetro de configuración (HAVE_RAND_S) que si
se encuentra activado pasa a utilizar la función
rand_s(). Aunque esto quiere decir que cuando se
hace uso de rand_s() es como si se hiciera uso del
método rand() con mejoras de seguridad, no
podemos pasar por alto la vulnerabilidad expuesta al
principio. Por esta razón, no podemos dar esta
vulnerabilidad como falso positivo.

Remediación Como no hay forma de saber si siempre se hace uso


del método rand_s(), está claro que hay un problema
en el diseño de la aplicación. Habría que sustituir el
método rand() por el método rand_s() para
garantizar la generación de números
pseudoaleatorios en este contexto de seguridad.
Código CWE CWE ID 338
Requisitos de seguridad Es obligatorio el uso de generadores de números
aleatorios criptográficamente seguros en todos los
métodos en los que se requieran números aleatorios.

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Realización de auditorías periódicas para garantizar


que no se usa el método rand(), y en caso de ser así,
sustituirlo por una función segura.

ssl_sock_ossl.c819
Vulnerabilidad detectada Insecure Transport Weak SSL Protocol
Valoración Positivo Verdadero
Explicación del error En este caso, se está haciendo uso del protocolo
SSLv3, lo que supone un riesgo para la aplicación.
Las versiones antiguas del protocolo SSL como
SSLv3 pueden comprometer el sistema al tener
vulnerabilidades conocidas que pueden ser
explotadas por un atacante, por ello, es
importante hacer uso de las versiones más
recientes del protocolo TLS con el objetivo de
proteger los datos.
En la imagen se puede apreciar el uso del
protocolo SSLv3.

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Remediación Es importante asegurarse de que el sistema solo


permite el uso de protocolos de comunicación
seguros como TLSv1.2 o versiones superiores. Las
versiones antiguas, como es el caso, pueden ser
comprometidas, por lo que siempre hay que
utilizar las versiones más actuales.
Código CWE CWE ID 326
Requisitos de seguridad Configurar la aplicación para que solo acepte
protocolos seguros como TLSv1.2 o versiones
superiores.
Establecer políticas de seguridad que prohíban el
uso de protocolos de transporte con versiones
antiguas.

conclusión acerca de su desempeño.


Resumen valoración final de las vulnerabilidades
Vulnerabilidad 1 (pjsip-perf.c:1108) Falso Positivo
Vulnerabilidad 2 (file_io_ansci.c:63) Positivo Verdadero
Vulnerabilidad 3 (transport_srtp.c:897) Mala Práctica
Vulnerabilidad 4 (http_client.c:270) Falso Positivo
Vulnerabilidad 5 (http_client.c:270) Falso Positivo

Actividades
Asignatura Datos del alumno Fecha
Seguridad en el Software 10/11/2024

Vulnerabilidad 6 (http_client.c:126) Positivo Verdadero


Vulnerabilidad 7 (ice_test.c:1122) Positivo Verdadero
Vulnerabilidad 8 (cipher.c:379) Positivo Verdadero
Vulnerabilidad 9 (mips_test.c:490) Positivo Verdadero
Vulnerabilidad 10 (cli_console.c65) Positivo Verdadero
Vulnerabilidad 11 (siptypes.cpp376) Positivo Verdadero
Vulnerabilidad 12 Positivo Verdadero
(addr_resolv_sock.c45)
Vulnerabilidad 13 (aes_icm_ossl.c251) Positivo Verdadero
Vulnerabilidad 14 (cipher.c180) Positivo Verdadero
Vulnerabilidad 15 (ssl_sock_ossl.c819) Positivo Verdadero

Tabla 1. Resumen valoración final de las vulnerabilidades

Actividades

También podría gustarte