!Hola a todos! La inteligencia artificial ya estaba con nosotros desde hace tiempo pero ChatGPT nos ha abierto los ojos un mundo nuevo por descubrir y a una posible era de Internet. Pocos ámbitos profesionales escapan a los que IA nos pueda ayudar. Numerosos blogs y foros han dejado patente la ayuda que nos puede ofrecer ChatGPT en el campo de la seguridad informática creando payloads, ofuscando código, creando textos de ingenieria social y mucho más. El otro día leyendo un artículo de Chema Alonso en su blog "El lado del mal", Chema expuso como pedirle a ChatGPT que generara un código en cualquier lenguaje de programación y luego decirle que te lo devuelva validado ysin posibles fallos de seguridad y "limpito", algo que es realmente fantástico. Dándole la vuelta a la tortilla, pensé: ¿Y si el que le envía un código a ChatGPT soy yo.. ¿Me hará una revisión de código buscando vulnerabilidades? Esta es una tarea en los que los profesionales de ciberseguridad tienen que realizar a menudo. Así que le mandé un código en PHP vulnerable para probar: $usuario = $_REQUEST["usuario"]; $contraseña = $_REQUEST["contraseña"]; $consulta = "SELECT COUNT(*) FROM $dbTabla WHERE campo1='$usuario' AND campo2='$contraseña'"; $result = sqlite_exec($db, $consulta); if (!$result) { print "<p>Error en la consulta.</p>\n"; } elseif ($result[0][0] > 0) { print "<p>Nombre de usuario y contraseña correctos.</p>\n"; } else { ... ChatGPT nos contestó que este código es vulnerable a ataques de inyección de SQL. La inyección de SQL es una técnica utilizada por los atacantes para enviar comandos malintencionados a la base de datos a través de una consulta, con el fin de acceder o modificar información de manera no autorizada. En este caso, el código concatena directamente las variables de usuario y contraseña en la consulta SQL, lo que significa que un atacante podría enviar un nombre de usuario o contraseña que contenga código malintencionado. Por ejemplo, un atacante podría enviar un nombre de usuario como ' OR 1=1 -- lo que haría que la consulta se convierta en: SELECT COUNT(*) FROM $dbTabla WHERE campo1='' OR 1=1 --' AND campo2='$contraseña' La adición de ' OR 1=1 -- hace que la condición campo1='' OR 1=1 siempre sea verdadera, por lo que el atacante podría iniciar sesión sin conocer el nombre de usuario o la contraseña correctos. También nos respondió que para protegerse contra la inyección de SQL, es importante utilizar sentencias preparadas y parámetros en lugar de concatenar directamente variables en las consultas SQL. Probamos de nuevo a ChatGPT con el siquiente ejemplo en Javascript, si un usuario ingresa código HTML o JavaScript en el campo de entrada de formulario, se mostrará directamente en la página web, lo que puede provocar una infección por XSS: let userInput = req.body.userInput; res.send(`<p>${userInput}</p>`); En este caso ChatGPT nos responde que este código es vulnerable a ataques de inyección de HTML/JavaScript. Cuando se envía la entrada del usuario sin procesar a la página web, un atacante podría enviar código malintencionado como entrada. Por ejemplo, un atacante podría enviar el siguiente código como entrada del usuario: <script> alert('¡Hola, soy un atacante!'); </script> Cuando se envía esta entrada a la página web, se ejecutaría una alerta de JavaScript en la página web del usuario. Esto podría ser utilizado por un atacante para llevar a cabo una variedad de ataques, como el robo de información del usuario o la redirección del usuario a otra página web malintencionada. Para protegerse contra estos ataques, es importante sanear la entrada del usuario para eliminar cualquier código malintencionado antes de enviarla a la página web. Esto se puede hacer mediante la utilización de funciones especializadas para eliminar o escapar ciertos caracteres de la entrada del usuario. Realmente ChatGPT nos puede ayudar en la revisión de código y análisis de vulnerabilidades en el código fuente. Un saludo.