(música suave) Las vulnerabilidades de software son fallas no intencionales o debilidades encontradas en software que puede ser explotado por un atacante. Algunas vulnerabilidades se crean porque de configuraciones de seguridad inadecuadas o errores de programación. Una vulnerabilidad de día cero es una falla de seguridad del software que es conocido por el proveedor de software pero no tiene un parche para corregir la falla. El proveedor generalmente proporciona recomendaciones de mitigación. para prevenir una explotación de la vulnerabilidad hasta que se desarrolle un parche. La inyección SQL es una vulnerabilidad que permite a un atacante para realizar consultas SQL no autorizadas que una aplicación hace a su base de datos. Esto resulta en el acceso no autorizado a información confidencial. Aquí hay un ejemplo de una consulta SQL normal. La cadena del número de cuenta se pasa a una instrucción SQL. Se busca en la base de datos para recuperar el número de cuenta que coincide con el número ingresado y devuelve todos los datos asociados almacenados en la base de datos sobre la cuenta. El código podría ser algo como esto. Si un usuario ingresa un número de cuenta en el formulario de la página web etiquetado, "Por favor ingrese su número de cuenta," la consulta SQL resultante se verá así. Este comando SQL devolverá todos los datos asociados con el número de cuenta ingresado. Esto funciona como se esperaba. Aquí hay un ejemplo de una consulta de inyección SQL. Un atacante ingresa un comando de consulta SQL en el campo de entrada. Esta vez, en lugar de buscar el número de cuenta, la consulta busca un número de cuenta o uno es igual a uno. Uno igual siempre será verdadero, por lo que todos los datos de la cuenta de la tabla de números de cuenta será devuelto. Para evitar ataques de inyección SQL, considere estas prácticas recomendadas. Realice la validación de entrada. Usa una lista blanca o lista de permitidos que incluye valores permitidos específicos aceptados por el campo de entrada. Valide la entrada contra un conjunto seguro conocido de caracteres y longitud y uso de declaraciones preparadas para que la entrada del usuario no se trata como una instrucción SQL. Otro tipo de ataque de vulnerabilidad de software común es una inyección de comando del sistema operativo. Esto ocurre cuando un atacante es capaz para ejecutar comandos del sistema en el sistema operativo del dispositivo a través de una aplicación vulnerable. Estos ataques son causados por una validación de entrada insuficiente. Aquí hay un ejemplo de una inyección de comando del sistema operativo publicada en la enumeración de debilidad común o lista CWE, una lista desarrollada por la comunidad de debilidades de software y hardware. En este ejemplo, el valor de entrada proporcionado en la variable de nombre de usuario no está validado. Cualquier comando del sistema proporcionado en la entrada del nombre de usuario sería aceptado y el comando RM se ejecutaría para eliminar los archivos en el directorio de inicio. Otra práctica recomendada para prevenir ataques es para evitar errores de configuración dentro de las funciones del software. Configuraciones inseguras de la configuración del software puede dejar al usuario vulnerable a los ataques que explotan esa aplicación específica. Ejemplos de errores de configuración de software ¿Hay características innecesarias habilitadas o instaladas? como puertos innecesarios, servicios, páginas, cuentas o privilegios, cuentas predeterminadas con sus contraseñas aún habilitadas y sin cambios, características de seguridad que no se implementaron, software desactualizado y sin soporte por parte del proveedor. En agosto de 2021, configuración incorrecta de Microsoft Power Apps expuso 38 millones de registros de datos. Según UpGuard, los datos confidenciales incluidos los estados de vacunación de COVID-19, los números de seguridad social y las direcciones de correo electrónico quedaron expuestos debido a configuraciones predeterminadas débiles para Microsoft Power Apps que son herramientas de código bajo utilizadas para diseñar aplicaciones y crear sitios web públicos y privados. La vulnerabilidad afectó a American Airlines, agencias gubernamentales, y otros clientes en numerosas industrias. Como resultado de la exposición, Microsoft actualizó el software tener permisos de mesa habilitados por defecto, eliminando la configuración por defecto que permitía el acceso anónimo. Un último tipo de ataque de vulnerabilidad de software es el desbordamiento de búfer. Un búfer es un espacio de retención temporal en la memoria para almacenar datos. El desbordamiento de búfer es una vulnerabilidad de programación que ocurre cuando una aplicación almacena más datos en la memoria intermedia que el tamaño de la memoria definida. Por ejemplo, digamos un campo en una página web requiere un número de cuenta. El campo espera ocho caracteres pero ingresa 10 caracteres en su lugar, dos bytes más de lo esperado. La aplicación acepta la entrada. y escribe el valor de 10 caracteres en la memoria que supera el tamaño de búfer esperado de ocho. La aplicación no asigna un espacio de búfer de tamaño apropiado y no realiza una verificación de validación para confirmar el tamaño de campo esperado por lo que se produce el desbordamiento del búfer. Algunos lenguajes de programación como C o C++ son más susceptibles al desbordamiento del búfer porque no tienen protección contra desbordamiento incorporada. Java y JavaScript son menos vulnerables para las vulnerabilidades de desbordamiento de búfer. La mayoría de las vulnerabilidades de desbordamiento de búfer se deben a por codificación insegura. Para evitar vulnerabilidades de desbordamiento de búfer, Considere la posibilidad de implementar comprobaciones de codificación seguras. realizado por los desarrolladores. Las consideraciones para los desarrolladores incluyen, evitando funciones de programación riesgosas como STRCPY cuando sea posible en lenguajes de programación que son susceptibles para amortiguar los desbordamientos, definir el tamaño de búfer apropiado esperado, realizar comprobaciones de validación de entrada para confirmar la longitud esperada del campo y prestando atención a las advertencias del compilador y recomendaciones para utilizar alternativas seguras de funciones de programación utilizadas.