Cómo fortiedr detecta printnightmare CVE-2021-34527

Consulta técnica sobre FortiEDR

Descripción

La Agencia de Seguridad de Infraestructura y Ciberseguridad (CISA) emitió una alerta luego de la divulgación de un exploit de prueba de concepto (PoC) para una vulnerabilidad de día cero en el servicio Windows Print Spooler. Esta vulnerabilidad crítica se ha denominado PrintNightMare y se le asigna un CVE (CVE-2021-34527) En este artículo,  mostraremos cómo usar FortiEDR para detectar y mitigar la explotación de esta vulnerabilidad.


Cómo la vulnerabilidad PrintNightmare conduce a LPE y RPE


La vulnerabilidad en el método RpcAddPrinterDriver() conduce a la escalada de privilegios locales (LPE) y la ejecución remota de código (RCE). La escalada de privilegios local permite que un usuario con privilegios más bajos obtenga acceso a nivel del sistema, mientras que RCE permite que un usuario remoto ejecute código en el contexto del sistema.


El método RpcAddPrinterDriverEx() se usa para instalar un controlador de impresora en un sistema y se define de la siguiente manera.

 

 

 

 

DWORD RpcAddPrinterDriverEx(

   [en, cadena, único] STRING_HANDLE pName,

   [en] DRIVER_CONTAINER* pDriverContainer,

   [en] DWORD dwFileCopyFlags

 );

 

 

 

 

 

 

 

 

 

 

pName:  puntero a una cadena que especifica el nombre del  servidor de impresión en  el que opera el método

dwFileCopyFlags:  un campo de bit que especifica opciones para copiar archivos de controlador de impresora de reemplazo.

pDriverContainer: un puntero a una  estructura DRIVER_CONTAINER 


El objeto CONTENEDOR DE CONTROLADOR es uno de los parámetros de RpcAddPrinterDriverEx() y contiene información sobre qué controlador utilizará la impresora agregada. La estructura DRIVER_CONTAINER proporciona esta información  mediante estructuras DRIVER_INFO. El miembro DriverInfo que se proporciona a continuación define las propiedades de un controlador de impresora.

 
 estructura typedef _DRIVER_INFO_2 {

   DWORD versión c;

   [cadena] wchar_t* pNombre;

   [cadena] wchar_t* pEntorno;

   [cadena] wchar_t* pDriverPath;

   [cadena] wchar_t* pDataFile;

   [cadena] wchar_t* pConfigFile;

 } INFORMACIÓN_CONDUCTOR_2;


pDataFile : un puntero a una cadena que especifica un nombre de archivo o una ruta completa que contiene datos del controlador de impresora. 

Artículos relacionados  Comandos de parámetros del instalador de fortiedr

pConfigFile : un puntero a una cadena que especifica un nombre de archivo o una ruta completa al módulo de configuración del controlador de impresora.

pDriverPath : un puntero a una cadena que especifica un nombre de archivo o una ruta completa al archivo del controlador de la impresora.

 

El código de explotación llama al método RpcAddPrinterDriverEX() dos veces. La dll de explotación en la ruta del servidor remoto se pasa al parámetro pDataFile en la primera llamada a RpcAddPrinterDriverEX (que se muestra a continuación). Esto hará que la dll del atacante se copie en la ruta » C:WindowsSystem32spooldriversx643old» dentro del sistema del controlador de dominio .



RpcAddPrinterDriverEX() se invoca nuevamente después de modificar pConfigFile para que apunte a la ubicación («» C:WindowsSystem32spooldriversx643old»»)  donde está escrita la dll del atacante. Ahora

¡Déjanos cualquier duda sobre FortiEDR aquí abajo!

¿Te ha resultado útil??

0 / 0

Deja una respuesta 0

Your email address will not be published. Required fields are marked *