# CVE-2021-22908 Pulse Connect Secure 任意代碼執行漏洞/es
== Descripción de la vulnerabilidad ==
Debido a que PCS admite la conexión al uso compartido de archivos de Windows (SMB), la función la proporcionan los scripts CGI basados en las bibliotecas y aplicaciones auxiliares de Samba 4.5.10. Al especificar un nombre de servidor largo para ciertas operaciones SMB, la aplicación smbclt puede fallar debido al desbordamiento del búfer, dependiendo de la longitud del nombre de servidor especificado.
Se ha confirmado que el sistema PCS 9.1R11.4 tiene esta vulnerabilidad. El punto final CGI de destino es /dana/fb/smb/wnf.cgi. Otros puntos finales CGI también pueden desencadenar esta vulnerabilidad.
Si un atacante no puede limpiar después de aprovechar con éxito esta vulnerabilidad, especificar un nombre de servidor largo puede resultar en las siguientes entradas de registro de eventos de PCS:
Critical ERR31093 2021-05-24 14:05:37 - ive - [127.0.0.1] Root::System()[] - Program smbclt recently failed.
Pero para aprovechar esta vulnerabilidad, el servidor PCS debe tener una política de acceso a archivos de Windows que permita \\ * u otra política que permita a un atacante conectarse a cualquier servidor. Puede ver la política SMB actual en Usuario-> Política de recursos-> Política de acceso a archivos de Windows en la página de administración de PCS. 9.1R2 y los dispositivos PCS anteriores utilizan la política predeterminada de permitir conexiones a cualquier host SMB. A partir de 9.1R3, esta política se ha cambiado del permiso predeterminado al rechazo predeterminado.
== Alcance de influencia ==
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
== Referencia ==
https://short.pwnwiki.org/?c=1NiPen
https://short.pwnwiki.org/?c=2Um6Rb













请登录后查看评论内容