Act Grupal Auditoria Codigo
Act Grupal Auditoria Codigo
1- Icedemo.c:533
Vulnerabilidad detectada Buffer overflow
Valoración Verdadero positivo - Explotable
Explicación del error Diagrama:
Analysis trace
La función fgets() se utiliza correctamente para leer datos desde stdin a linebuf, limitando la lectura al
tamaño del búfer.
Posteriormente se eliminan los caracteres \r y \n y se garantiza la terminación nula (\0), lo cual es adecuado
y seguro.
Se emplea strtok() para extraer un token desde line+2 usando delimitadores como : \t\r\n.
Si el atributo (attr) coincide con "ice-ufrag" o "ice-pwd", se realiza la operación:
Actividades
Asignatura Datos del alumno Fecha
strcpy(icedemo.rem.ufrag, attr+strlen(attr)+1);
o Problema: attr + strlen(attr) + 1 apunta fuera de los límites de la cadena attr, lo que puede
causar lectura de memoria no válida y desbordamiento en la copia con strcpy().
o Esta operación asume incorrectamente que strtok() devuelve una cadena con un
delimitador (:) seguido de un valor separado, y que ese valor está inmediatamente
después de attr + strlen(attr) + 1, sin verificar su existencia ni su tamaño.
Definición
En este apartado del código tampoco se evidencia buffer overflow, tanto en el llamado como en la
definición de la función se puede ver cómo se maneja el caso de que el puntero se vaya una posición más
allá de la longitud del bufer, además la función de imprimir está basada en snprintf que es una función
segura en comparación con algunas otras funciones de manipulación de cadenas en C, como sprintf, porque
toma un argumento adicional que especifica el tamaño máximo del búfer de destino. Esta función garantiza
que no se escribirán más caracteres en el búfer de destino de lo que el tamaño especificado puede
contener, lo que ayuda a prevenir buffer overflow.
Remediación Evitar uso inseguro de strcpy:
• Utilizar strncpy() o mejor aún, snprintf(), que limita explícitamente el tamaño de escritura:
snprintf(icedemo.rem.ufrag, sizeof(icedemo.rem.ufrag), "%s", attr_value);
Donde attr_value es el segundo token extraído tras strtok().
Extraer valor de forma explícita y segura:
• Separar la clave (attr) y su valor (value) mediante dos llamadas a strtok():
char *attr = strtok(line + 2, ": \t\r\n");
Actividades
Asignatura Datos del alumno Fecha
Código CWE CWE ID 120: "Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')", CWE ID 129:
"Improper Validation of Array Index", CWE ID 131: "Incorrect Calculation of Buffer Size", CWE ID 787: "Out-
of-bounds Write"
Requisitos de seguridad - Validación de entrada: todas las entradas de datos que provienen de fuentes externas, como
archivos, redes o entradas de usuario. Es necesario analizar que los datos sean del tipo y tamaño
esperado antes de procesarlos.
- Limitación del tamaño de los búferes: Disposición de buffers suficientemente grandes para
contener los datos que se esperan, pero no más grandes de lo necesario. Es importante evitar el
uso de búferes de tamaño fijo.
- Uso de funciones seguras: Utilización de funciones seguras que verifiquen los límites de los
búferes, como strncpy, snprintf, fgets, strncat.
2- Confsample.c:496
Vulnerabilidad detectada Buffer Overflow: Format String
Valoración Explotable – verdadero positivo
Explicación del error Diagrama
Analysis trace:
Se encuentra en confsample.c:496
Actividades
Asignatura Datos del alumno Fecha
En la línea vulnerable:
char s[10];
pj_ansi_sprintf(s, "#%d ", port_info->listener_slots[j]);
1. Se declara un buffer de 10 caracteres char s[10];.
2. Luego se utiliza pj_ansi_sprintf, equivalente a sprintf, para escribir el contenido formateado en el
buffer.
3. El formato "#%d " escribe el carácter #, un número entero y un espacio.
Riesgo: Si el valor de port_info->listener_slots[j] tiene más dígitos de los esperados (por ejemplo, un
número muy grande o negativo con muchos caracteres), la cadena resultante puede exceder los 10 bytes
asignados en s, provocando una escritura fuera de límites (overflow del stack buffer).
3- dns.c:234
Vulnerabilidad detectada Buffer overflow
Valoración Verdadero positivo - Explotable
Explicación del error Diagrama:
Analysis trace
Actividades
Asignatura Datos del alumno Fecha
Actividades
Asignatura Datos del alumno Fecha
pj_memcpy(&rr->type, p, 2); // si p está cerca del final del buffer, puede causar acceso fuera de límites
• Aunque hay una verificación previa if (p + 10 > max), esta condición debe mantenerse
estrictamente antes de cualquier uso del puntero p.
Definición
En este apartado del código tampoco se evidencia buffer overflow, pero existe una posibilidad de
desbordamiento de bufer en la line que sigue después de la verificación del tamaño del bufer
pj_memcpy(&rr->type, p, 2); Ya que podría ocurrir el desbordamiento de bufer si la posición p apunta a
una posición cerca del final del bufer es posible que p + 2 este fuera de los límites del buffer
Remediación 1. Validación estricta de límites antes de copiar
Antes de realizar la copia:
if (name->slen + label_len >= MAX_PTR_SIZE)
return ERROR_NAME_TOO_LONG;
2. Reemplazo con funciones seguras
Si está disponible, usar funciones con verificación de tamaño:
pj_memcpy_s(name->ptr + name->slen, MAX_PTR_SIZE - name->slen, p + 1, label_len);
O alternativamente, usar memcpy() precedido por una validación explícita de tamaño.
3. Centralizar la validación de espacio disponible
Encapsular en función reutilizable:
int is_buffer_space_available(char *base, size_t current_len, size_t add_len, size_t max_size) {
return (current_len + add_len <= max_size);
}
Código CWE CWE 119: Improper Restriction of Operations within the Bounds of a Memory Buffer"
Requisitos de seguridad - Validación de Entrada: Asegúrate de que todas las entradas del usuario sean validadas
adecuadamente para evitar inyecciones de código y desbordamientos de búfer.
- Manejo de Errores: Implementa un manejo robusto de errores para garantizar que los errores se
manejen de manera adecuada y no permitan condiciones de carrera, fugas de memoria u otros
problemas de seguridad.
- Uso de funciones seguras: Funciones de Copia Segura:
- memcpy_s(): Copia de memoria con verificación de límites.
- strcpy_s(), strncpy_s(): Copia de cadenas con verificación de límites.
- sprintf_s(), snprintf_s(): Formateo seguro de cadenas con verificación de límites.
Actividades
Asignatura Datos del alumno Fecha
4- .- json.cpp:159
Vulnerabilidad detectada String Termination Error
Valoración Mala práctica
Explicación del error Diagrama
Analysis trace:
Se encuentra en http_client.c:140
En la linea 162 el uso de goto para manejar errores puede hacer que el código sea difícil de entender y dar
lugar a errores sutiles, especialmente en proyectos más grandes. En general, el uso de goto se considera
una mala práctica de programación y puede hacer que el código sea menos legible y mantenible.
Remediación Evitar el uso de goto: En lugar de usar goto para manejar errores, se puede implementar un manejo de
errores más estructurado utilizando excepciones o retornando códigos de error adecuados.
Código CWE CWE ID 480: Uso Incorrecto de 'goto' , CWE ID 20: Uso Incorrecto de la Función 'snprintf' CWE ID 690: Uso
de Expresiones de Llamada a Funciones Peligrosas
Requisitos de seguridad Además de las recomendaciones previas en las otras dos vulnerabilidades relacionadas con buffer
overflow, se recomienda:
- Manejo seguro de errores: Implementar un manejo seguro y consistente de errores en todo el
código, evitando el uso de goto y utilizando estructuras de control más legibles y seguras, como
excepciones o retornos de función.
- Gestión segura de la memoria: Utilizar técnicas seguras de gestión de memoria para evitar
desbordamientos de búfer, fugas de memoria y desreferenciaciones de punteros nulos. Esto
Actividades
Asignatura Datos del alumno Fecha
5- mix.c_171
Vulnerabilidad detectada Race Condition: File System Access
Valoración Verdadero positivo - Explotable
Explicación del error Diagrama:
Se encuentra en mix.c:171:
es un fragmento de un programa que utiliza la biblioteca PJSIP para realizar operaciones de manipulación
y reproducción de audio
Específicamente en la línea 576:
• out_fname: representa el nombre del archivo WAV de salida. Si este nombre proviene de una
fuente externa o no se valida adecuadamente, puede ser vulnerable a:
o Race Condition: Si múltiples procesos o hilos acceden simultáneamente al mismo archivo
o directorio sin control.
o File overwrite attacks: Un atacante podría proporcionar un nombre de archivo que
sobrescriba archivos críticos del sistema o de otros usuarios.
o Symbolic link attacks (TOCTOU): Si out_fname es un enlace simbólico, puede redirigir la
escritura hacia recursos no previstos entre la validación y la apertura del archivo (Time-
of-check to time-of-use).
Actividades
Asignatura Datos del alumno Fecha
Remediación Asegúrate de que los nombres de archivos (out_fname y wav_input[i].fname) provengan de fuentes
confiables y de que se realice una validación adecuada para evitar la inyección de código. Puedes usar
funciones de biblioteca que ayuden a sanitizar la entrada de datos o restringir el acceso a archivos solo a
rutas específicas.
Código CWE CWE ID 20: Improper Input Validation, CWE ID 119: Improper Restriction of Operations within the Bounds of a
Memory Buffer CWE ID 416: Use After Free CWE ID 732: Incorrect Permission Assignment for Critical Resource:.
CWE ID 773: Missing Reference to Active Allocated Resource
Requisitos de seguridad Validación de entrada de datos: Asegúrate de que los nombres de archivos (out_fname y
wav_input[i].fname) provengan de fuentes confiables y de que se realice una validación adecuada para
evitar la inyección de código. Puedes usar funciones de biblioteca que ayuden a sanitizar la entrada de
datos o restringir el acceso a archivos solo a rutas específicas.
Control de tamaño de búfer: Asegúrate de que los nombres de archivos no puedan exceder un tamaño
máximo predefinido. Esto evitará desbordamientos de búfer si los nombres de archivos son demasiado
largos. Utiliza funciones seguras de manipulación de cadenas para manejar los nombres de archivos de
manera adecuada.
6- conference.c:510
Vulnerabilidad detectada Use After Free
Valoración Mala práctica
Explicación del error Diagrama:
Se encuentra en conference.c:510:
El código verifica únicamente si el valor de status es igual a PJ_SUCCESS, pero no contempla ni maneja
otros posibles valores que status podría tomar. Esto puede derivar en un manejo inadecuado de errores
en situaciones donde el estado no sea exitoso, dejando al sistema vulnerable ante fallos no controlados.
Actividades
Asignatura Datos del alumno Fecha
Requisitos de seguridad - Manejo de errores robusto: Es fundamental que todas las operaciones críticas —como la
obtención de información del dispositivo de audio o la asignación de memoria— estén
respaldadas por un manejo de errores adecuado. Esto implica verificar siempre los códigos de
estado devueltos por las funciones y actuar en consecuencia ante cualquier fallo, ya sea
registrando el error, liberando recursos, o deteniendo la ejecución de forma controlada para
evitar comportamientos indeseados o vulnerabilidades.
7- file_io_ansi.c:63
Vulnerabilidad detectada Shared Slink
Valoración Mala práctica
Explicación del error Diagrama:
Analysis trace:
Actividades
Asignatura Datos del alumno Fecha
Es crucial validar adecuadamente los parámetros de entrada, como pathname y mode, para prevenir
ataques de inyección de código o manipulación de archivos. Aunque el código gestiona correctamente los
errores mediante la verificación de los valores de retorno de funciones como fopen() y fclose(), también
es necesario considerar posibles condiciones de carrera u otras situaciones inesperadas que puedan
comprometer la seguridad o estabilidad del sistema. Implementar controles adicionales puede ayudar a
mitigar estos riesgos.
Remediación Es fundamental implementar una validación exhaustiva de los parámetros de entrada, especialmente
pathname y mode, para evitar ataques de inyección de código o manipulación maliciosa de archivos. Se
recomienda utilizar funciones como realpath() para verificar que el valor de pathname corresponde a una
ruta absoluta válida y no incluye referencias a directorios no deseados (como .. o enlaces simbólicos
peligrosos).
Además, se debe evitar el uso de asignaciones directas de punteros para copiar cadenas. En su lugar, es
preferible utilizar funciones seguras como strncpy() u otras variantes que controlen los límites de memoria,
con el fin de mitigar riesgos de desbordamientos de búfer y otras vulnerabilidades relacionadas con la
manipulación de cadenas
Código CWE CWE ID 78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') ,
CWE ID 377: Insecure Temporary File, CWE ID 732: Incorrect Permission Assignment for Critical Resource
Requisitos de seguridad - Validación de entradas:
Todos los datos suministrados por el usuario —como nombres de archivo o modos de
apertura— deben ser validados rigurosamente. Esto previene posibles inyecciones de código
malicioso o manipulaciones no autorizadas de archivos, reduciendo así la superficie de ataque.
- Gestión segura de la memoria:
Es esencial evitar desbordamientos de búfer, fugas de memoria y otras vulnerabilidades
relacionadas con el uso inseguro de memoria. Una gestión adecuada no solo protege la
integridad del sistema, sino que también dificulta que un atacante pueda tomar el control o
provocar fallos inesperados.
- Registro y monitoreo de actividad:
Se recomienda implementar mecanismos de logging y monitoreo que permitan detectar
comportamientos sospechosos o intentos de comprometer la seguridad. Los registros deben ser
lo suficientemente detallados para facilitar la trazabilidad y el análisis forense en caso de
incidentes.
8- siptypes.cpp:376
Vulnerabilidad detectada Memory Leak
Valoración Mala práctica
Explicación del error Diagrama:
Actividades
Asignatura Datos del alumno Fecha
Analysis trace:
En la línea 384, existe un posible riesgo de fuga de memoria si el búfer no se libera cuando el bucle finaliza
al alcanzar el tamaño máximo del paquete SIP (PJSIP_MAX_PKT_LEN) y no por un error de impresión. En
este escenario, la memoria previamente asignada no se libera, lo que puede derivar en pérdidas de
memoria. Es recomendable asegurarse de liberar el búfer en todos los casos, independientemente de
cómo termine el bucle.
Por otro lado, la estrategia utilizada para duplicar el tamaño del búfer en cada iteración (buf_size <<= 1)
puede resultar eficiente en algunos contextos, pero también representa un riesgo si PJSIP_MAX_PKT_LEN
es muy elevado. Este enfoque podría llevar a un consumo excesivo de memoria, por lo que se recomienda
establecer límites razonables y monitorear el uso de recursos para evitar impactos negativos en el
rendimiento o en la estabilidad del sistema.
Remediación Es fundamental añadir la liberación del búfer en caso de que el bucle finalice por alcanzar el tamaño
máximo del paquete SIP (PJSIP_MAX_PKT_LEN). Esto garantiza que no se produzcan pérdidas de memoria
en escenarios donde no se detecta un error explícito, pero tampoco se logra completar la operación.
Asimismo, se debe asegurar que la memoria se libere correctamente en caso de que ocurra un error
durante la impresión del encabezado SIP. Implementar una gestión de recursos coherente y defensiva
contribuye a mantener la estabilidad del sistema y previene fugas de memoria en situaciones inesperadas.
Código CWE CWE ID 131: Incorrect Calculation of Buffer Size , CWE ID 401: Missing Release of Memory after Effective Lifetime,
CWE ID 404: Improper Resource Shutdown or Release CWE ID 690: Unchecked Return Value to NULL Pointer
Dereference
Requisitos de seguridad - Validación de entradas:
Es imprescindible validar y sanear todas las entradas de datos —como el encabezado SIP (hdr)—
para prevenir inyecciones de código, manipulaciones maliciosas y otros ataques relacionados
con datos no confiables.
Actividades
Asignatura Datos del alumno Fecha
Analysis trace:
Actividades
Asignatura Datos del alumno Fecha
Remediación Es esencial validar de forma rigurosa cualquier dato de entrada antes de procesarlo. Esto incluye la
verificación de los límites de los arreglos para evitar accesos fuera de rango, así como la confirmación de
que los datos cumplen con el formato esperado.
Además, se debe evitar ejecutar cualquier código o lógica basada en datos no confiables, ya que esto
podría introducir vulnerabilidades de seguridad, fallos en la ejecución o comportamientos inesperados del
sistema.
Código CWE CWE ID 119 (Improper Restriction of Operations within the Bounds of a Memory Buffer) , CWE ID 131 (Incorrect
Calculation of Buffer Size) , CWE ID 476 (NULL Pointer Dereference):
Requisitos de seguridad - Validación de entradas:
Es fundamental implementar controles exhaustivos para validar y sanear todas las entradas de
datos, especialmente aquellas que provienen de fuentes externas. Esto permite prevenir
vulnerabilidades comunes como la inyección de código, el desbordamiento de búfer y otras
formas de manipulación maliciosa.
- Gestión segura de memoria:
La asignación y liberación de memoria dinámica deben realizarse de forma controlada y segura.
Una mala gestión de la memoria puede provocar fugas, corrupción de datos o accesos inválidos,
lo que podría comprometer la estabilidad y seguridad del sistema.
- Prevención de desbordamientos:
Para evitar desbordamientos de búfer, aritméticos o de enteros, es necesario validar
correctamente los límites de los datos y utilizar tipos de datos apropiados. La implementación
de chequeos explícitos y buenas prácticas de programación contribuye a mitigar estos riesgos de
manera efectiva.
10- listener_udp.c:237
Vulnerabilidad detectada Type Mismatch:Signed to Unsign
Valoración Mala practica
Explicación del error Diagrama:
Analysis trace:
Actividades
Asignatura Datos del alumno Fecha
En la línea 238, las funciones pj_gettimeofday y pj_turn_srv_on_rx_pkt no validan sus valores de retorno,
lo que puede provocar que se pasen por alto errores en tiempo de ejecución. Esta omisión compromete la
confiabilidad del sistema, ya que errores no controlados podrían propagarse y generar comportamientos
impredecibles.
Además, no se realiza una verificación explícita de que bytes_read <= read_op->pkt.pkt, lo que puede
conducir a accesos fuera de límites o corrupción de datos si los valores no son coherentes.
También se observa la ausencia de comprobaciones de punteros nulos, como read_op (línea 237) o udp,
lo que podría provocar fallos por desreferenciación nula. Es fundamental incorporar estas validaciones
para garantizar una ejecución segura y estable del sistema.
Remediación Antes de utilizar las variables read_op y udp, es imprescindible verificar que no sean nulas para evitar
desreferenciaciones de punteros nulos, que podrían provocar fallos críticos en tiempo de ejecución.
Además, se recomienda añadir mensajes de error dirigidos a stderr en caso de detectar valores nulos u
otros fallos. Esto facilitará el diagnóstico de errores durante el desarrollo, pruebas o en entornos de
producción, permitiendo una identificación más rápida y eficaz de los problemas.
Código CWE: CWE-252: Unchecked Return Value, CWE-476: NULL Pointer Dereference, CWE-416: Use After Free, CWE-20:
Improper Input Validation & CWE-362: Race Condition:
Requisitos de seguridad: - Validación de entradas:
Todas las entradas provenientes del usuario o de fuentes externas deben ser validadas
rigurosamente para garantizar que se ajustan al formato y rango esperado. Esto ayuda a
prevenir comportamientos inesperados y vulnerabilidades de seguridad.
- Comprobación de errores:
Es fundamental verificar los valores de retorno de todas las funciones críticas. Ignorar errores
puede llevar a fallos silenciosos, pérdida de datos o condiciones inseguras de ejecución.
- Manejo seguro de punteros:
Antes de utilizar cualquier puntero, se debe comprobar que no sea null. Esta verificación evita
desreferenciaciones inválidas, que pueden provocar fallos del programa o vulnerabilidades
explotables.
- Sincronización en entornos multihilo:
En contextos concurrentes, se deben proteger adecuadamente las secciones críticas utilizando
mecanismos de sincronización (como mutexes o semáforos) para evitar condiciones de carrera y
garantizar la coherencia de los datos.
Actividades
Asignatura Datos del alumno Fecha
Actividades