
Prueba de concepto para CVE-2021-26700: ejecución remota de código en la extensión npm-script de VSCode mediante un settings.json malicioso del espacio de trabajo, con guía detallada de explotación y remediación.
Corregido el 10 de febrero de 2021 en https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
La vulnerabilidad de ejecución remota de código en la extensión de VSCode eg2.vscode-npm-script (probada en la versión 0.3.13) significa que un .vscode/settings.json malicioso en un proyecto puede provocar la ejecución remota de código cuando se visualiza un archivo llamado package.json.
Esta vulnerabilidad no estaba cubierta por ningún programa activo de recompensas por errores de Microsoft, pero fue reportada y gestionada por MSRC.
Sin un archivo .vscode/settings.json malicioso en un repositorio, al visualizar un archivo package.json, con la extensión instalada, se ejecutará el comando .
eg2.vscode-npm-scriptnpm ls --depth 0 --jsonAl establecer la clave npm.bin en el settings.json de un proyecto, p. ej. como ./payload.sh, al visualizar el package.json se ejecutará en su lugar ./payload.sh ls --depth 0 --json desde el directorio que contiene el package.json.
Esta vulnerabilidad rompe la suposición de que el código fuente se puede leer de forma segura.
Un ejemplo de cómo un atacante podría usar esto es:
package.jsonpayload.shHe visto dos formas de mitigar un settings.json malicioso del espacio de trabajo de VSCode
Prohibir que la configuración se establezca por espacio de trabajo. Esto ya lo usa VSCode para git.path, terminal.integrated.shell.linux y algunas otras configuraciones.
Esto podría romper la compatibilidad para algunos usuarios, pero tiene precedentes.
Referencia: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
Si esta configuración se establece en un espacio de trabajo, se le debe pedir al usuario que confirme la configuración antes de ejecutar el binario.
Esto no romperá la compatibilidad existente, y es el camino que tomó la extensión ESLint a partir de la versión 2.1.7.
eg2.vscode-npm-scriptlinux-poc como una carpeta en VSCodepackage.json para verlo/tmp/output.txt se creará para demostrar la ejecucióneg2.vscode-npm-scriptwindows-poc como una carpeta en VSCodepackage.json para verlocalc.exeNota: No pude usar una ruta relativa para el binario en Windows, sin embargo, esto puede deberse a mi falta de familiaridad con Windows