Análisis técnico de la vulnerabilidad de ejecución remota de código cliente / servidor SMBv3 de Microsoft (CVE-2020-0796)
El Centro de seguridad de Microsoft lanzó un parche de vulnerabilidad de ejecución remota de código SMBv3 que afecta a los usuarios de Windows 10 y otros sistemas a las 23:00 el 12 de marzo, hora de Beijing. Recomendamos que los usuarios afectados instalen el parche tan pronto como sigan la Guía de información de Microsoft Update: https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796. Al mismo tiempo, el equipo de 360Vulcan realizó un análisis rápido de la vulnerabilidad, que es una vulnerabilidad de ejecución remota de código de toque cero de alto riesgo. El análisis técnico es el siguiente.
Análisis de vulnerabilidad de SMB
Entorno de depuración
Causa raíz
La vulnerabilidad se produjo en srv2.sys. Debido a que SMB no manejó adecuadamente los paquetes de datos comprimidos, al usar la longitud que pasó el cliente para la descompresión al descomprimir el paquete de datos, no verificó si la longitud era legal. Eventualmente causó un desbordamiento de enteros.
Análisis detallado
SMB v3 admite la compresión de datos. Si el ProtocolId en el encabezado SMB es 0x424D53FC, es decir, 0xFC, 'S', 'M', 'B', entonces los datos se comprimen y smb llamará a la función de compresión y descompresión.
Primero, SMB llamará a la función srv2! Srv2ReceiveHandler para recibir paquetes de datos smb y establecerá la función de procesamiento correspondiente de acuerdo con ProtocoIId.
Del código, podemos ver que si se trata de datos comprimidos, llama a la función Srv2DecompressMessageAsync para descomprimirlo. Srv2! Srv2DecompressMessageAsync llamará a la función Srv2DecompressData.
La estructura es la siguiente:
El código que genera la vulnerabilidad de desbordamiento de enteros es el siguiente:
A través del código anterior podemos ver que ambas longitudes en este encabezado no están marcadas. La siguiente es una descripción de estas dos longitudes en la documentación de MS:
- OriginalCompressedSegmentSize (4 bytes) El tamaño, en bytes, del segmento de datos sin comprimir.
- Offset / Length (4 bytes) Si SMB2_COMPRESSION_FLAG_CHAINED está configurado en el campo Flags, este campo DEBE interpretarse como Longitud. La longitud, en bytes, de la carga útil comprimida. De lo contrario, este campo DEBE interpretarse como Offset. El desplazamiento, en bytes, desde el final de esta estructura hasta el inicio del segmento de datos comprimido.
Luego, en la función srv2! Srv2DecompressData, se llama a SmbCompressionDecompress y finalmente se llama a nt! RtlDecompressBufferXpressLz para descomprimir los datos. La ruta de llamada es la siguiente:
nt! RtlDecompressBufferXpressLz analizará los campos en el paquete de datos del protocolo de compresión smb, que contiene el tamaño del búfer de descompresión, y lo comparará con el OriginalCompressedSegmentSize del búfer asignado a través de SrvNetAllocateBuffer antes de confirmar que su tamaño no es mayor que OriginalCompressedSegmentSize, y luego realizará memcpy.
Como se muestra en el pseudocódigo anterior, a1 apunta al UncompressBuffer asignado por SrvNetAllocateBuffer, el valor de a2 es OriginalCompressedSegmentSize y el valor de v21 es el tamaño de los datos descomprimidos analizados desde el paquete smb. Este valor puede ser controlado por el atacante. Si el tamaño es mayor que OriginalCompressedSegmentSize, entonces el tamaño es mayor que OriginalCompressedSegmentSize Se devolverá el error 0xC0000242. Debido a que no hubo una verificación previa de la longitud, si pasamos un OriginalCompressedSegmentSize grande para desencadenar un desbordamiento de entero, v21 puede establecer un valor máximo, y aún puede juzgar el tamaño de descompresión y finalmente llamar a qmemcpy para copiar un Tamaños extremadamente grandes causan desbordamientos del búfer.
Parche
El parche de Microsoft es verificar las dos longitudes anteriores en Srv2DecompressData.
Para ver el documento del protocolo, consulte: SMB2
Fuente: http://blogs.360.cn/post/CVE-2020-0796.html#4-L1
Canal de Youtube: https://www.youtube.com/channel/UCXy8Lg28OuGuI5Z-2EWJaNA?view_as=subscriber
Canal Vimeo: https://vimeo.com/403136547?activityReferer=1
Red Social Twitter: https://twitter.com/HackingTeam1?s=09
Pagina Web: https://elrincondehackingteam.blogspot.com/
Comentarios
Publicar un comentario
Todos sus comentarios seran bienvenidos, no se admiten insultos todo con el debido respeto que se merece cada persona, o de lo contrario seran eliminado cada comentario inrespetuoso hacia los demas. y autores del blog tambien puedes seguirnos en:
Facebook: https://www.facebook.com/groups/HackingTeamCyber/
Grupo de Telegram: https://t.me/TheHackForceOfficial
Canal de Youtube: https://www.youtube.com/channel/UCXy8Lg28OuGuI5Z-2EWJaNA?view_as=subscriber
Canal Vimeo: https://vimeo.com/403136547?activityReferer=1
Red Social Twitter: https://twitter.com/TheHackForce