
Artigo técnico e prova de conceito para CVE-2020-15778, uma vulnerabilidade de injeção de comandos autenticada no OpenSSH scp (<=8.3p1) permitindo execução remota de código através de payloads com crases em caminhos de arquivos.
Endereço de e-mail : [email protected]
Linkedin : www.linkedin.com/in/chinmay-pandya
Produto: Openssh
Componente afetado: SCP
Versão vulnerável: <=openssh-8.3p1
Versão corrigida: -
Número CVE: CVE-2020-15778
Linha vulnerável: https://github.com/openssh/openssh-portable/blob/a2855c048b3f4b17d8787bd3f24232ec0cd79abe/scp.c#L989
Tipo de vulnerabilidade: Injeção de comando / Injeção de eval (Autenticado)
Tipo de ataque: Ataque remoto
Linha do tempo do divulgador:
- Problema descoberto - 9 Jun 2020
- CVE obtido - 16 Jul 2020
- Fornecedor notificado - 9 Jun 2020
- Reconhecimento do fornecedor recebido - 9 Jun 2020
- Divulgação pública 18 Jul 2020
scp é um programa para copiar arquivos entre computadores. Ele usa o protocolo SSH. Está incluído por padrão na maioria das distribuições Linux e Unix.
Ao copiar arquivos para um servidor remoto, o caminho do arquivo é anexado ao final do comando scp local. Por exemplo, se você executar o seguinte comando
scp SourceFile user@host:directory/TargetFile
ele executará um comando local
scp -t directory/TargetFile
No momento de criar o comando scp local, ele não sanitiza o nome do arquivo. Um atacante pode passar um payload habilitado por crase como nome de arquivo e, quando o comando scp local é executado, o shell local também executará o payload habilitado por crase.
Execute o seguinte comando com scp
scp /sourcefile remoteserver:'`touch /tmp/exploit.sh`/targetfile'
Após executar este comando, vá para o servidor remoto e você verá no diretório /tmp/ que o arquivo exploit.sh está presente. Colocar aspas simples no nome do arquivo é importante para evitar a execução do payload no shell local; usar caracteres de escape como aspas simples no nome do arquivo pode impedir a execução do payload no shell local
ISTO É UM EXPLOIT AUTENTICADO E REQUER CREDENCIAIS SSH / SCP VÁLIDAS PARA EXECUTAR COMANDO NO SERVIDOR REMOTO
O comando scp é um protocolo histórico (chamado rcp) que depende desse estilo de passagem de argumentos e encontra problemas de expansão. Tem se mostrado muito difícil adicionar "segurança" ao modelo scp. Todas as tentativas de "detectar" e "prevenir" transferências anômalas de argumentos têm uma grande chance de quebrar fluxos de trabalho existentes. Sim, reconhecemos que a situação é ruim. Mas não queremos quebrar os padrões fáceis que as pessoas usam com scp, até que haja uma substituição comum. As pessoas deveriam usar rsync ou algo diferente se estiverem preocupadas.
Código para SCP - https://github.com/openssh/openssh-portable/blob/master/scp.c