!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.