CWE Common Weakness Enumeration. CWE-20: Improper Input Validation Un programa no valida correctamente la entrada de datos Un atacante puede “crear” entradas.

Slides:



Advertisements
Presentaciones similares
Presentación de Visual Web Developer 2005 Express Edition Alfonso Goyeneche Torres Presidencia Nacional Comunidad Académica Microsoft Junta Directiva Nacional.
Advertisements

Curso de java básico (scjp)
Métodos y parámetros.
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
CI-2413 Desarrollo de Aplicaciones para Internet
Estructuras de Decisión I IF - THEN - ELSE
Desarrollo de Aplicaciones para Internet
SESION 3 VALIDACIÓN. Septiembre 2010 SESION 3: VALIDACIÓN Qué propiedad de los controles podemos validar Control Propiedad de Validación HtmlInputText.
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
INFORMATICA I Funciones CLASE 13.
1.2 Sintaxis del lenguaje Java.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
ESTRUCTURAS DE SECUENCIA
Academia: Informática Tema: Validación de datos Profesor (a): Baños García Yesenia, Lic. Comp. Periodo: Julio – Diciembre 2014.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
POO Java Módulo 3 Elementos de programas Identificadores
L ISTAS E NLAZADAS No son mas que un conjunto o lista de objetos que a diferencia de los vectores, estas poseen la capacidad de crecer o decrecer. Por.
Archivos y Búsqueda Secuencial
Archivos Programación.
Características de “C”
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
Clase Teórica No. 4 Programación IV
El lenguaje de programación Java
Tema 2: Los tipos de datos
CI TEORIA semana 4 Estructura Algorítmica: SELECCIÓN
Capítulo 1 “Elementos de Programación”
FUNCIONES O PROCEDIMIENTOS
Valor X Valor Y Punto (0,0) Coordenadas.
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Top 25 errores de la programación
Resumen Fundamentos de Programación/ Programación I
Manejo de Punteros y objetos en memoria dinámica en C++
TEORIA DE LA INFORMACION INGENIERO ANYELO QUINTERO.
Elementos básicos del lenguaje
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Alto Nivel. Y Es un compilador. YContiene un conjunto de palabras.
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
 Un lenguaje se puede definir como un conjunto de palabras y formas de expresión por medio de las cuales se comunican y relacionan miembros de una comunidad.
Empleando apuntadores una función puede entregar múltiples resultados / /Esta función no funciona #include void intercambiaValores(float a, float b) {
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
ETAPAS DESARROLLO DE SOFTWARE DE APLICACION
ESTRUCTURAS DE DECISION MULTIPLE
ARREGLOS. La sintaxis para declarar e inicializar un array será: Tipo_de_variable[ ] Nombre_del_array = new Tipo_de_variable[dimensión]; También podemos.
Características de “C” Esta conformado por un Ambiente Integrado. Es un Lenguaje de Nivel medio.Es un compilador. Contiene un conjunto de palabras reservadas.
Visual Basic Prof.: Carol Briones García. Uso de Archivos  Definición  Es un conjunto de información que se almacena en algún medio de escritura que.
Repaso C Ficheros, memoria dinámica, … Pablo San Segundo (C-206)
Tema 1. Estructuras de datos Objetivo: Objetivo: El alumno resolverá problemas de almacenamiento, recuperación y ordenamiento de datos y las técnicas de.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Trabajar con módulosTrabajar con variables públicasCrear procedimientos Pasar argumentos por valor y por referencia Referencia rápida.
Programación II Sesión 3. TABLA DE CONTENIDO  Tipos de Datos en C  Delimitadores  Tipo Char  Tipo Int  Tipo Float  Tipo Double  Constantes  Operadores.
Control, adquisición y monitoreo con Arduino y Visual Basic .net
Taller de Java Universidad de los Andes
¿Cómo almacenar datos dentro del computador?
Tipos de datos en MYSQL YEAR: Año. “YYYY” o “YY”
Polimorfismo y Funciones Virtuales
MANEJO DE ARRELOGS EN C Clase 8: Arreglos.
Diseño y Programación Orientada a Objetos
Unidad 1: Introduccion Leccion 3: Input.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Unidad 3. Introducción a la programación
Manejo de Punteros y objetos en memoria dinámica en C++
Introducción al Visual Basic  Un programa en sentido informático está constituido en un sentido general por variables que contienen los datos con los.
Características de “C”
M.C Alejandro Castellanos Lopez
PROGRAMACIÓN (2).
Arreglos en Java.
Manejo de Punteros y objetos en memoria dinámica en C++
Leyendo strings de la línea de comandos
Asignación Dinámica de Memoria
Transcripción de la presentación:

CWE Common Weakness Enumeration

CWE-20: Improper Input Validation Un programa no valida correctamente la entrada de datos Un atacante puede “crear” entradas específicas que: Afecten el flujo de control y/o datos Ejecución arbitraria de código Control arbitrario de algún recurso Es el error más común que ocasiona software con debilidades

CWE-20: Improper Input Validation

Soluciones Si esperas números.....asegúrate de que la entrada de los usuarios sean números! Usar Struts Usar ESAPI de OWASP Suponer que toda entrada es maliciosa, usar “whitelist”, no solamente “blacklist” Validar por: longitud, tipo, sintaxis, y “reglas del negocio” (“lógica del negocio”) Verificar en cliente..... y en servidor!

Ejemplo... public static final double price = 20.00; int quantity = currentUser.getAttribute("quantity"); double total = price * quantity; chargeUser(total);... total puede adquirior un valor negativo ya que no se verifica quantity que es dato dado por el usuario total puede adquirior un valor negativo ya que no se verifica quantity que es dato dado por el usuario

Ejemplo... #define MAX_DIM /* board dimensions */ int m,n, error; board_square_t *board; printf("Please specify the board height: \n"); error = scanf("%d", &m); if ( EOF == error ) die("No integer passed: Die evil hacker!\n"); printf("Please specify the board width: \n"); error = scanf("%d", &n); if ( EOF == error ) die("No integer passed: Die evil hacker!\n"); if ( m > MAX_DIM || n > MAX_DIM ) die("Value too large: Die evil hacker!\n"); board = (board_square_t*) malloc( m * n * sizeof(board_square_t));... A pesar de que se verifica que m y n sean enteros y no excedan un límite.... Se puede asignar demasiada memoria a board si m y n son negativos que al multiplicarse dan un positivo muy grande CWE-400: Uncontrolled Resource Consumption ('Resource Exhaustion') CWE-789: Uncontrolled Memory Allocation A pesar de que se verifica que m y n sean enteros y no excedan un límite.... Se puede asignar demasiada memoria a board si m y n son negativos que al multiplicarse dan un positivo muy grande CWE-400: Uncontrolled Resource Consumption ('Resource Exhaustion') CWE-789: Uncontrolled Memory Allocation

Ejemplo private void buildList ( int untrustedListSize ){ if ( 0 > untrustedListSize ) die("Negative value supplied for list size, die evil hacker!"); Widget[] list = new Widget [ untrustedListSize ]; list[0] = new Widget(); } A pesar de que se verifica que la longitud ( untrustedListSize ) de la lista a crear ( Widget ) no sea negativa, se puede dar una longitud igual a 0, arrojando una excepción.... A pesar de que se verifica que la longitud ( untrustedListSize ) de la lista a crear ( Widget ) no sea negativa, se puede dar una longitud igual a 0, arrojando una excepción....

Ejemplo void parse_data(char *untrusted_input){ int m, n, error; error = sscanf(untrusted_input, "%d:%d", &m, &n); if ( EOF == error ){ die("Did not specify integer value. Die evil hacker!\n"); } /* proceed assuming n and m are initialized correctly */ } A pesar de que se trata de verificar que los datos leidos sean enteros, se puede dar una Entrada como: 123: Y la variable n quedaría indefinida o no inicializada... CWE-457: Use of Uninitialized Variable A pesar de que se trata de verificar que los datos leidos sean enteros, se puede dar una Entrada como: 123: Y la variable n quedaría indefinida o no inicializada... CWE-457: Use of Uninitialized Variable

Ejemplo $birthday = $_GET['birthday']; $homepage = $_GET['homepage']; echo "Birthday: $birthday Homepage: click here " El programador supone que birthday será dado en un formato válido de fecha y homepage En un formato válido de URL pero no hace ninguna verificación, esto permitiría que la persona Que ingresa los datos pueda dar El programador supone que birthday será dado en un formato válido de fecha y homepage En un formato válido de URL pero no hace ninguna verificación, esto permitiría que la persona Que ingresa los datos pueda dar