Skip to main content

Cómo resolver desafíos de seguridad con Snyk Code e IA simbólica

Escrito por
blog feature ai pink

27 de febrero de 2025

0 minutos de lectura

¿Qué tan buena es la IA simbólica como sistema experto automatizado para analizar rutas de código y detectar vulnerabilidades de seguridad? Snyk Code se pone a prueba y demuestra las ventajas de los sistemas algorítmicos basados en reglas.

¿Qué es el motor de seguridad de IA simbólica de Snyk?

El motor de SAST de Snyk, que realiza análisis de seguridad estático en bases de código, se basa en un sistema de IA simbólica que ofrece mayor precisión y una ejecución más rápida. Además, aprovecha en profundidad la experiencia de investigadores de seguridad para ofrecer un sistema experto en seguridad basado en reglas de vulnerabilidades.

Estas características de Snyk Code le dan superioridad tecnológica frente a la búsqueda tradicional de patrones (búsquedas de expresiones regulares similares a grep) para detectar vulnerabilidades en tu código.

SAST gana desafíos de seguridad de código

Florin Walter es un profesional de seguridad y tester de penetración que, durante los últimos meses, ha compartido desafíos de seguridad y publicaciones de cuestionarios sobre código seguro en LinkedIn.

Me dio curiosidad saber si Snyk detectaría vulnerabilidades en el código en distintos lenguajes, así que importé el repositorio de código de Florin. En el resto de este artículo revisaremos los hallazgos.

Redirección abierta en una aplicación Flask de Python

Flask es un framework popular para aplicaciones web en Python. El siguiente código de Python usa distintas rutas para mostrar una página de inicio y una página de inicio de sesión.

from flask import Flask, request, redirect, url_for
import logging

app = Flask(__name__)

logging.basicConfig(level=logging.INFO)

def is_authenticated_user():
    # This function checks if the user is authenticated and is omitted for brevity
   pass

@app.route('/')
def home():
    if not is_authenticated_user():
        logging.info('Unauthorized access attempt.')
        return redirect(url_for('login'))

    redirect_url = request.args.get('redirect_url')
    if redirect_url:
        logging.info(f'Redirecting to: {redirect_url}')
        return redirect(redirect_url)

    return 'Welcome to the home page!'

@app.route('/login')
def login():
    # Simulated login page
    return 'Login Page - User authentication goes here.'

if __name__ == '__main__':
    app.run(debug=False)

Por desgracia, al permitir que los usuarios y otros sistemas especifiquen una URL de redirección, también se incorpora una vulnerabilidad de redirección abierta.

Como desarrollador, quizá no la hayas notado porque tenías que enfocarte principalmente en las tareas relacionadas con el producto del backlog. Aun así, Snyk ejecuta una prueba estática de seguridad de aplicaciones para analizar este código de Python y detectar la vulnerabilidad de redirección abierta:

Snyk Code detecta una vulnerabilidad de redirección abierta en una aplicación Flask de Python

Snyk va más allá de detectar código inseguro. Gracias a su motor de aprendizaje automático, que analiza defectos de seguridad y sus correcciones provenientes de la comunidad de código abierto, puede deducir y sugerir la solución de seguridad que los desarrolladores podrían aplicar a su código para corregir esta vulnerabilidad de redirección abierta.

A continuación se muestra una captura de pantalla de una de las tres correcciones de código sugeridas por Snyk, junto con prácticas recomendadas para prevenir el problema e información contextual sobre este tipo de vulnerabilidad de seguridad:

El análisis de correcciones de Snyk sugiere soluciones en el código para corregir la vulnerabilidad de seguridad

SSRF y XSS en código JavaScript para una aplicación Node.js

El siguiente desafío de seguridad está escrito en JavaScript y se basa en una aplicación web del lado del servidor creada con Node.js y Express:

const express = require('express');
const axios = require('axios');

const app = express();

app.get('/profile', (req, res) => {
    console.log('Received request for /profile');

    // Simulated profile data
    const profileData = {
        name: 'John Doe',
        role: 'Developer'
    };

    res.json(profileData);
    console.log('Sent profile data response');
});

app.get('/fetch-data', async (req, res) => {
    const url = req.query.url;
    console.log(`Received request for /fetch-data with URL: ${url}`);

    try {
        const response = await axios.get(url);
        res.send(response.data);
        console.log(`Data fetched and sent for URL: ${url}`);
    } catch (error) {
        console.error(`Error fetching data from URL: ${url}`, error);
        res.status(500).send('Error fetching data');
    }
});

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

Dedica un momento a revisar el código e identificar las vulnerabilidades de seguridad.

También importé este desafío a Snyk y estos son algunos de los hallazgos que detectó.

Falsificación de solicitudes del lado del servidor (SSRF) con Axios

Snyk detectó que una entrada sin sanitizar de un parámetro HTTP (req.query.url) llega a la biblioteca cliente HTTP axios en la línea 24. Esta variable url especifica la dirección URL remota a la que se enviará una solicitud HTTP.

Como el usuario puede controlar la URL completa, podría abusar de esto y especificar una dirección interna, como http://localhost, u otras direcciones IP internas y reservadas desde las que podría recopilar datos y extraer información.

Snyk identificó el siguiente código inseguro y muestra todas las rutas de código y las líneas pertinentes afectadas por la vulnerabilidad:

Snyk detecta una vulnerabilidad SSRF en código que usa axios

Vulnerabilidad de scripting entre sitios en una respuesta HTTP de Express

Como continuación del código anterior, vulnerable a SSRF debido a una solicitud HTTP realizada con una variable de URL completa controlada por el usuario, Snyk detectó otra vulnerabilidad.

Vulnerabilidad de scripting entre sitios en la respuesta HTTP de Express

Esta otra vulnerabilidad es sutil; no se trata solo de un problema de seguridad SSRF. Si prestas mucha atención al código resaltado en la línea 25 por el análisis de Snyk, verás que la respuesta HTTP se envía tal cual al navegador:

res.send(response.data)

De forma predeterminada, Express establece los encabezados de respuesta HTTP en application/html. Esto significa que, si el atacante controla el servidor remoto, puede insertar código JavaScript malicioso para activar un XSS en el cliente, ya que el navegador interpreta la respuesta HTML completa.

Otro hallazgo de código inseguro que detecta Snyk es una posible inyección CRLF. Observa esta parte del código de la aplicación web Express que vimos antes:

    try {
        const response = await axios.get(url);
        res.send(response.data);
        console.log(`Data fetched and sent for URL: ${url}`);
    } catch (error) {
        console.error(`Error fetching data from URL: ${url}`, error);
        res.status(500).send('Error fetching data');
    }

El SAST de Snyk detecta fácilmente esta posible inyección CRLF como parte de los hallazgos de vulnerabilidades:

Inyección CRLF debido a una entrada controlada por el usuario

¿Cómo puede Snyk proteger mi código de las vulnerabilidades de seguridad?

La herramienta de pruebas estáticas de seguridad de aplicaciones de Snyk, llamada Snyk Code, ayuda a los desarrolladores a encontrar vulnerabilidades en su código en tiempo real, ya que muestra los hallazgos de código inseguro directamente en su IDE.

Comenzar es gratis: instala la extensión Snyk para VS Code y elimina esos errores de seguridad.

Captura de pantalla de la extensión de Snyk para VS Code

Herramienta gratuita en línea para revisar código

Protege tu código antes de tu próximo commit.

Leer más

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad que sigue el ritmo del desarrollo con IA

El desarrollo impulsado por IA avanza más rápido que los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas establecen el nivel.

blog feature ai violet
Blog

VulnBump: ¿Pueden los agentes de IA corregir dependencias vulnerables sin romper la compilación?

VulnBump prueba agentes de IA con 307 actualizaciones reales de dependencias. Una corrección cuenta solo si elimina la vulnerabilidad y la compilación y las pruebas siguen pasando.

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.