Código Problema Solución
Está mal en el
documento está
correcto en el
Powerpoint
Ejemplo de no
validación de la
entrada que puede Hay que validar los parámetros
1
ocasionar una de entrada
vulnerabilidad de
inyección SQL
Hay que validar que solo tenga
Ejemplo de violación
caracteres alfanuméricos y
2 Esto no de los límites de
sanear la entrada de status =
sirve de confianza
para evitar inyecciones
nada
Comprobación de la longitud de
3 No aplica
la entrada
El mejor modo de evitar
problemas de desbordamiento de
Comprobación de
un número entero
tipos /
es comprobar toda la entrada de
4 Desbordamiento del
este tipo de datos, tanto contra
entero (Integer
una cota
overflow)
superior como contra una cota
inferior
Código Problema Solución
Prevenir este tipo de ataques es
Inyección de SQL, utilizar consultas
5 que se forma parametrizadas que fuerzan a
concatenando strings la distinción entre estructuras
de control
No està en la Ejemplo de consulta
presentación de SQL construida con el
6 Powerpoint, uso de sentencias
asumo que no parametrizadas y
sale en el concatenadas
exàmen
Falta de validación para enviar
un valor de reportName que
7 Manipulación de rutas incluya secuencias como ../ para
navegar fuera del directorio
permitido y eliminar archivos
Para evitar la inyección de
Inyección de comandos, debes validar y
8 comandos, sanear las entradas del usuario
En btype antes de utilizarlas en comandos
del sistema.
Código Problema Solución
Validar y sanear siempre las
entradas del usuario es una
9 Falsificación de logs
buena práctica para mejorar la
seguridad
Desbordamiento de
buffer - Error de
seguridad de tipos - se Utilizar un lenguaje de
declara un puntero p programación que fuerce la
10 a un número entero comprobación de tipos y de
(int) y luego se utiliza memoria de forma que su
como un puntero a gestión sea segura
una
función
La JVM, en sí misma,
puede ser susceptible
a problemas de
11 Ver siguiente renglón (12)
desbordamiento.
- Llamada a un
método nativo JNI
El código es
vulnerable a buffer
fgets permite especificar el
overflow causada por
12 tamaño del buffer, evitando así el
una llamada ilimitada
desbordamiento.
a
gets()
Código Problema Solución
Ataque de Uso de una Variable de Entorno
desbordamiento de Controlada: Al ejecutar un shell,
13 buffer basado en el asegúrate de que las variables de
stack entorno sean controladas y
- Ejemplo de shellcode seguras.
Para evitar el desbordamiento de
Figura 18. Empleo buffer, se debe utilizar fgets en
incorrecto de gets() lugar de gets.fgets() permite
14 que puede incurrir en especificar un límite de
desbordamiento de caracteres para la entrada,
buffer. evitando sobreescrituras del
búfer.
Read overflow -
Si len es mayor que el
tamaño de buf (100),
No está en el acceso buf[i] puede
el Asegurarse de que len no sea
leer fuera del límite de
document mayor que el tamaño del buffer.
buf, lo que puede
o solo en causar un
el desbordamiento de
PowerPoint buffer.
Código Problema Solución
Liberar la memoria antes de salir
Heap de la función con
overflow - free(a);
15 La memoria asignada Para evitar fugas de memoria, es
con malloc dentro de importante asegurarse de que
function_which_allo cualquier memoria asignada con
cates no se libera malloc se libere adecuadamente
utilizando free
Reserva dinamica de
memória -
Use after free
Un
programa continúa
usando un puntero No usar el puntero ptr después
que ha sido de llamar a free(ptr). Una
previamente liberado. solución es mover la llamada a
16
Si esa logError antes de liberar ptr o
memoria se vuelve a asegurarte de que ptr no se
reservar, un atacante utilice después de ser liberado.
puede lanzar un
ataque de buffer
overflow catalogado
con el CWE-416
Código Problema Solución
Acceso a una variable
después de liberarla
(Dereference After
Free) -
El puntero a char No utilizar un puntero después de
17
buf2R1 es liberado, haberlo liberado
aunque más adelante
se vuelve a
referenciar desde la
función strncpy
Reserva dinâmica de
memoria - double
free Solo liberar la memoria una vez.
Una posible solución es utilizar
18
Liberar la memoria una bandera para controlar la
más de una vez liberación de memoria,
(double free)
El puntero p se
inicializa a NULL y
luego se desreferencia
Para evitar la desreferencia-ción
(null dereference)
de un puntero nulo, primero
en if (*p).
19 verifica si el puntero es NULL
Desreferenciar un
antes de intentar
puntero nulo (NULL)
desreferenciarlo.
generalmente
conduce a un fallo de
segmentación
Código Problema Solución
Llamada insegura a Evitar el uso de la funciòn gets()
gets() similar a la -
20
explotada por el
gusano Morris Nota: este codigo esta repetido
Manipulación de
strings -
Código de w3-msql Evitar el uso de la funciòn
2.0.11 vulnerable a un scanf()
21
desbordamiento de
búfer remoto causada similares: [fscanf(), wscanf()]
por una llamada
insegura a scanf()
Código del programa
php.cgi en PHP / FI
Evitar el uso de la funcion
2.0beta10 vulnerable
strcpy()
a un desbordamiento
22
de buffer remoto
similares: [wcscpy(), lstrcpy
causada por una
()]
llamada insegura para
strcpy()
Código Problema Solución
Código de la Versión
1.0 del daemon de
Telnet Kerberos 5 que Evitar el uso de la función
contiene un sprintf()
23 desbordamiento de
buffer debido a que la similares: [fprintf(), printf(),
longitud variable de swprintf()]
entorno TERM, que
nunca se valida
No està en la
presentación de Función ilimitada,
Powerpoint, Evitar el uso de las funciones
24 vulnerabilidad en
asumo que no strcpy() y strcat()
Kerberos 5.
sale en el
exàmen
Código del programa
php.cgi en PHP / FI
2.0beta10 vulnerable
No está en a un Evitar el uso de la funciòn
el desbordamiento de strcpy()
document búfer remoto
o solo en causada por una
el llamada insegura para
PowerPoint strcpy()
Código Problema Solución
No está en
el
Código de la Versión
document
1.0 del daemonde
o solo en
Telnet Kerberos5 que De nuevo sprintf(), Es mejor
el
contiene un usar snprintf, que permite
PowerPoint
desbordamiento de especificar el tamaño máximo del
búfer buffer y así evitar escribir más
debido a que la datos de los que el buffer puede
longitud de la variable contener.
de entorno TERM, que
nunca se valida.
No está en
el
document
o solo en
el Evitar el uso de las funciones
PowerPoint Desbordamiento de
strcpy() y strcat()
Buffer con strcat y
strcpy
Usar como strncat y strncpy
No està en la
presentación de
Powerpoint, Llamada a strncpy() Evitar el uso de la funciòn
25 asumo que no que podría causar strcpy()
sale en el error de truncado.
exàmen
No està en la
presentación de String no terminado
Es necesario agregar
Powerpoint, en carácter nulo
26 manualmente la terminación
asumo que no producido por
nula.
sale en el readlink()
exàmen
Código Problema Solución
Utilizar un especificador de
No está en El atacante controla la formato en printf
el cadena de formato
document printf(“%s”,texto);
o solo en
el
PowerPoint
Clásica vulnerabilidad
de
No está en format String en
el wuftpd No permitir que el usuario
document 2.6.0 controle la entrada de formato
o solo en fmt
el En vsnprintf, donde
PowerPoint fmt es controlado por
el usuario
Código Problema Solución
27 Integer overflow
28 Error aritmético.
Código Problema Solución
Integer overflow
causado por
29
conversión signo-sin
signo
No se comprueba el
30
código de retorno.
No se comprueba el
31 código de retorno del
método read()
Excepción con el
32
bloque catch relleno
Código Problema Solución
No se libera la
33
memoria de buff.
34 Password hardcoded
Función aleatoria no
35
segura
Código de un simple
36
FTP server
Ejemplo de código con
una vulnerabilidad
37
TOCTOU en el acceso
a un fichero
Código Problema Solución
Código vulnerable a
ataques a su
38
descriptor de ficheros
estándar
Ejemplo de ataque a
39 vulnerabilidad del
ejemplo anterior
Código que soluciona
vulnerabilidades de descriptor de
40 No aplica ficheros asegurando el uso de los
tres primeros descriptores de
ficheros
Clave Tipo Vulnerabilidad
Validación de entrada
Sin validación del contenido de delimiter:
La variable delimiter se asigna directamente del argumento proporcionado por el usuario
(args[i].substring(12)), sin validación o sanitización.
Esto permite que un atacante proporcione un valor malicioso como
delimeter Validación de entrada --delimiter=../../../../etc/passwd, que podría causar un Path Traversal o escribir datos en
ubicaciones no deseadas.
Uso inseguro de fileOutput.write:
Si formatted incluye entradas manipuladas (por ejemplo, con caracteres especiales o comandos
maliciosos), se podrían escribir contenidos no deseados en el archivo de salida.
status = Validación de entrada
Validación de entrada
malloc() Validación de entrada
Clave Tipo Vulnerabilidad
String query = Validación de entrada
Validación de entrada
reportName Validación de entrada
btype Validación de entrada
Clave Tipo Vulnerabilidad
log.info Validación de entrada
Desboramiento del buffer
Desbordamiento del
*p
buffer
Desbordamiento del
native
buffer
gets(), en este
Desbordamiento del
caso
buffer
gets(buf)
Clave Tipo Vulnerabilidad
Desbordamiento del
shellcode
buffer
gets(), en este
Desbordamiento del
caso
buffer
gets(line)
Desbordamiento del
char buf[100]
buffer
Clave Tipo Vulnerabilidad
function_which_a Desbordamiento del
llocates buffer
Desbordamiento del
free(ptr)
buffer
Clave Tipo Vulnerabilidad
BUFSIZER // Desbordamiento del
buf2R1 buffer
Desbordamiento del
free(ab)
buffer
Desbordamiento del
if (*p) k = *p;
buffer
Clave Tipo Vulnerabilidad
gets(), en este
Desbordamiento del
caso
buffer
gets(line)
Desbordamiento del
scanf()
buffer
Desboramiento del
strcpy()
buffer
Clave Tipo Vulnerabilidad
Desboramiento del
sprintf()
buffer
strcat() y Desboramiento del
strcpy() buffer
Desboramiento del
strcpy()
buffer
Clave Tipo Vulnerabilidad
Desboramiento del
TERM
buffer
strcat() y
strcpy()
Desboramiento del
Podrìamos decir buffer
que está
repetido
Desboramiento del
strncpy()
buffer
Desboramiento del
readlink()
buffer
Clave Tipo Vulnerabilidad
Desboramiento del
printf(texto);
buffer
Desboramiento del
vsnprintf
buffer
Capítulo 5
Clave Tipo
Clave Tipo Vulnerabilidad
Clave Tipo Vulnerabilidad
Clave Tipo Vulnerabilidad
Correccion Recomedaciones generales
Validar el argumento --delimiter
Implementar una lista blanca
Escapar o sanitizar entradas
Validar la entrada de usuario
Escapar o codificar las salidas
Implementar listas blancas
Validar el valor de entrada:
Asegúrate de que sz no sea negativo antes de pasarlo a malloc.
2. Usar un tipo compatible:
Cambia el tipo del parámetro sz para que sea size_t, que es el tipo esperado por
malloc.
3. Manejar casos de error:
Si el valor de sz es inválido, maneja el error adecuadamente en lugar de proceder
con la asignación. • Identificar las fuentes de entrada de
todo el programa; es el interfaz
principal de usuario o la conexión de
red.
• Usar una estrategia como la
selección indirecta o whitelisting que
se enfoca en la identificación de la
entrada
que se sabe está bien.
• Seguir la pista de qué valores han
sido validados y qué propiedades
aquella validación comprobó.
• Intentar no violar las fronteras de
confianza construyendo la validación
todo el programa; es el interfaz
principal de usuario o la conexión de
red.
Correccion Recomedaciones
• Usar generales
una estrategia como la
selección indirecta o whitelisting que
se enfoca en la identificación de la
entrada
que se sabe está bien.
• Seguir la pista de qué valores han
sido validados y qué propiedades
aquella validación comprobó.
• Intentar no violar las fronteras de
confianza construyendo la validación
de entrada en el código alrededor de
donde el programa suele mover
datos.
• No dejar pasar por alto el modo en
que los diferentes componentes
interpretan los datos que pasan por el
programa
Correccion Recomedaciones generales
Correccion Recomedaciones generales
Recomedaciones generales
Correccion Recomedaciones generales
Correccion Recomedaciones generales
Correccion Recomedaciones generales