Skip to main content

Seguridad de Snyk con Language Server Protocol

Escrito por
Headshot of Bastian Doetsch

Bastian Doetsch

feature dev challenge

6 de septiembre de 2022

0 minutos de lectura

Snyk ofrece plugins o extensiones para Visual Studio Code, los IDE de JetBrains como IntelliJ, WebStorm, PHPStorm y GoLand, y Visual Studio. Pero ¿alguna vez quisiste integrar Snyk en tu trabajo diario cuando tu editor o IDE favorito es Vim, Emacs, Sublime o Eclipse? Pronto será posible, ya que publicamos nuestro plugin para Eclipse, que incluye el nuevo Snyk Language Server Protocol.

Una gran variedad de editores e IDE

Actualmente, Snyk ofrece plugins para Visual Studio Code, Visual Studio, Eclipse y la plataforma IntelliJ. Estas integraciones son completas, pero sus funcionalidades varían porque cada una se desarrolla y mantiene por separado.

Los cuatro IDE que ya admitimos cubren a la mayoría de los desarrolladores que usan Snyk, pero algunos quieren tener más opciones de IDE o editor y desarrollar en un entorno diferente, sin dejar de disfrutar de integraciones completas con todos los productos de Snyk durante sus tareas de ingeniería. Hasta ahora, no podíamos ofrecer una solución integrada y teníamos que recomendar la CLI, pero eso está cambiando con Language Server.

Presentamos Language Server Protocol

Language Server Protocol (LSP) fue creado por Microsoft y se publicó como código abierto en 2016. VSCode lo usa ampliamente y define estándares de comunicación con un IDE para resaltar y anotar código, ofrecer correcciones y ayuda para programar, e informar sobre problemas. Esto ha permitido disfrutar de una experiencia de programación completa en casi cualquier entorno, ya que hay servidores de lenguaje con muchas funciones para prácticamente todos los lenguajes de programación.

En Snyk, analizamos cómo aprovechar este protocolo para ofrecer análisis de Snyk en distintos IDE y concluimos que LSP podía cubrir nuestra necesidad de mostrar problemas y vulnerabilidades. En lugar de desarrollar integraciones específicas para cada IDE, podemos aprovechar la compatibilidad con LSP que ya existe en una gran variedad de entornos de desarrollo. Muchos incluyen esta funcionalidad de forma predeterminada: Eclipse, VSCode, Visual Studio, Sublime, Vim, Atom y muchos otros editores admiten este protocolo. Incluso el nuevo producto JetBrains Fleet admite LSP.

Además, LSP se amplía cuando se necesitan nuevas capacidades y cada vez más IDE lo admiten.

Snyk Language Server

Diagrama de arquitectura que muestra los complementos de Snyk y los protocolos de servidor de lenguaje en varios IDE que se conectan a través de una red no local a la API, la CLI y S

Cuando comenzamos a trabajar en la integración de los productos de Snyk con Language Server Protocol, decidimos empezar con Eclipse como primer IDE para usarlo con su protocolo de backend de Snyk. Esto se debió a que el plugin de Snyk para Eclipse no tenía tantas funciones como el de otras plataformas y ya había un plugin de Language Server disponible para Eclipse. La integración LSP LSP4e ya funciona con Eclipse; solo tuvimos que ampliarla y configurarla para nuestros propósitos.

Nuestro Snyk Language Server está implementado en Go, lo que nos permite crear binarios independientes para diversas plataformas. Acabamos de ponerlo a disposición general para nuestro plugin de Eclipse y estamos trabajando para incorporarlo a los otros plugins de IDE que admitimos, a fin de implementar mejoras más rápido en todos los entornos de desarrollo.

El nuevo plugin de Eclipse 2.0

El IDE Eclipse muestra código fuente de JavaScript junto a un panel de vulnerabilidades de Snyk con una alerta CWE-770 de gravedad media y sugerencias para corregirla.

Probamos Language Server internamente sin integraciones personalizadas para NeoVim, Sublime y otros editores, pero el plugin de Snyk para Eclipse es la primera integración que Snyk admite oficialmente y que ofrece esta funcionalidad.

El nuevo plugin de Eclipse no solo cubre Snyk Open Source, sino también Snyk IaC (infraestructura como código) y los hallazgos de Snyk Code, además de ofrecer opciones de configuración ampliadas. Antes, solo admitía Snyk Open Source.

Autenticación y descarga

Ahora, la autenticación y la descarga de los binarios necesarios se inician a pedido, y se muestra el progreso del análisis y las notificaciones para el usuario. Si no quieres que los binarios se administren automáticamente, puedes desactivar esta opción y seleccionar rutas personalizadas para mantener el control total.

Ventana de preferencias de Eclipse que muestra la configuración de Snyk, las funciones beta habilitadas, las rutas del servidor de lenguaje y la CLI, y las opciones de telemetría

Además, la integración ahora es mucho más completa. El plugin de Snyk para Eclipse resalta los problemas en el editor de código, marca los archivos que presentan problemas en las vistas Project Explorer y Package Explorer, y también los elementos en la vista Outline. Además, los problemas de Snyk aparecen en la vista Problems de Eclipse, donde puedes filtrarlos.

Los análisis se inician automáticamente cuando se abre el plugin y al abrir o guardar documentos. También puedes iniciarlos manualmente desde el menú contextual del proyecto.

Anotaciones y resaltado

Si Snyk detecta un problema, se resalta la línea correspondiente en el editor: se subraya y se marca en el margen izquierdo, junto a los números de línea.

Fragmento de código que muestra dependencias JSON de adm-zip versión 0.4.7 y body-parser versión 1.17.1

Vista Problems

La vista Problems de Eclipse muestra una lista de todos los problemas.

Resultados de Snyk en un editor de código que muestra vulnerabilidades de ejecución de código arbitrario, inyección de código e inyección de comandos en paquetes.

Project Explorer

Los archivos que presentan problemas también se resaltan en las vistas Project Explorer y Package Explorer:

Árbol de archivos que muestra una carpeta routes con un archivo index.js

Información al pasar el cursor

Al pasar el cursor sobre un problema —en este caso, uno detectado por Snyk Code—, se muestra información adicional para entenderlo y corregirlo.

Análisis de Snyk Code que muestra una vulnerabilidad CWE-770 de gravedad media causada por una operación de archivo sin límite de velocidad.

Code Lenses

Code Lenses permite interactuar con el código desde el editor y enviar comandos al servidor de lenguaje. Se muestran sobre las líneas de código que tienen una lente asociada. En nuestro caso, mostramos el flujo de datos de Snyk Code mediante Code Lenses para que puedas navegar con un solo clic por las distintas ubicaciones del flujo de datos.

Editor de código que muestra una declaración de la función exports.import con un indicador de advertencia en la línea 241.

Acciones de código

Para Snyk Open Source y Snyk IaC, el plugin permite abrir en el navegador descripciones detalladas de los problemas resaltados:

Editor de código que muestra una versión de la dependencia adm-zip y ventanas emergentes con sugerencias de seguridad sobre vulnerabilidades de recorrido de directorios y escritura arbitraria de archivos.

A partir de ahora, Eclipse admitirá automáticamente todos los productos de Snyk que ofrece Snyk Language Server.

Snyk a tu alcance, para que trabajes como quieras

Con LSP, la compatibilidad con Snyk se integra en muchos IDE y editores nuevos. Con Eclipse, incorporamos otra herramienta importante, pero prácticamente todos los entornos de desarrollo más usados admiten LSP. Prueba Snyk gratis hoy mismo en tu entorno favorito: haz clic aquí e instala el plugin que más te convenga. Mantente protegido.

Empieza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.