
Informe técnico y prueba de concepto para CVE-2020-15778, una vulnerabilidad de inyección de comandos autenticada en OpenSSH scp (<=8.3p1) que permite la ejecución remota de código mediante payloads con backticks en rutas de archivo.
Dirección de correo electrónico: [email protected]
LinkedIn: www.linkedin.com/in/chinmay-pandya
Producto: Openssh
Componente afectado: SCP
Versión vulnerable: <=openssh-8.3p1
Versión corregida: -
Número de CVE: CVE-2020-15778
Línea vulnerable: https://github.com/openssh/openssh-portable/blob/a2855c048b3f4b17d8787bd3f24232ec0cd79abe/scp.c#L989
Tipo de vulnerabilidad: Inyección de comandos / Inyección de eval (Autenticado)
Tipo de ataque: Ataque remoto
Cronología del divulgador:
- Problema descubierto - 9 Jun 2020
- CVE obtenido - 16 Jul 2020
- Proveedor notificado - 9 Jun 2020
- Acuse de recibo del proveedor - 9 Jun 2020
- Divulgación pública 18 Jul 2020
scp es un programa para copiar archivos entre computadoras. Utiliza el protocolo SSH. Está incluido por defecto en la mayoría de las distribuciones de Linux y Unix.
Al copiar archivos a un servidor remoto, la ruta del archivo se agrega al final del comando scp local. Por ejemplo, si ejecuta el siguiente comando
scp SourceFile user@host:directory/TargetFile
ejecutará un comando local
scp -t directory/TargetFile
Al momento de crear el comando scp local, no sanitiza el nombre del archivo. Un atacante puede pasar un payload con comillas invertidas como nombre de archivo y cuando se ejecuta el comando scp local, el shell local también ejecutará el payload con comillas invertidas.
Ejecute el siguiente comando con scp
scp /sourcefile remoteserver:'`touch /tmp/exploit.sh`/targetfile'
Después de ejecutar este comando, vaya al servidor remoto y verá en el directorio /tmp/ que el archivo exploit.sh está presente. Es importante poner comillas simples en el nombre del archivo para evitar la ejecución del payload en el shell local, o usar caracteres de escape como comillas simples en el nombre del archivo puede evitar la ejecución del payload en el shell local.
ESTO ES UN EXPLOIT AUTENTICADO Y REQUIERE CREDENCIALES SSH / SCP VÁLIDAS PARA EJECUTAR COMANDOS EN EL SERVIDOR REMOTO
El comando scp es un protocolo histórico (llamado rcp) que depende de ese estilo de paso de argumentos y encuentra problemas de expansión. Ha resultado muy difícil agregar "seguridad" al modelo scp. Todos los intentos de "detectar" y "prevenir" transferencias de argumentos anómalas tienen una gran probabilidad de romper flujos de trabajo existentes. Sí, reconocemos que la situación es pésima. Pero no queremos romper los patrones fáciles para los que la gente usa scp, hasta que haya un reemplazo común. Las personas deberían usar rsync u otra alternativa si les preocupa.
Código de SCP - https://github.com/openssh/openssh-portable/blob/master/scp.c