Se explica una vulnerabilidad para EternalBlue en Metasploit aquí :
Hay una operación memmove de desbordamiento de búfer en Srv! SrvOs2FeaToNt. El tamaño se calcula en Srv! SrvOs2FeaListSizeToNt, con un error matemático donde se resta un DWORD en una PALABRA. La agrupación del kernel está preparada para que el desbordamiento esté bien diseñado para sobrescribir un búfer SMBv1. El secuestro real de RIP se completa más tarde en srvnet! SrvNetWskReceiveComplete.
No soy un experto y no entiendo muy bien a Ruby, pero por lo que entiendo, DWORD tiene el doble de tiempo que WORD, lo que te permitiría escribir en la memoria enviando un búfer grande. La memoria del kernel se organiza (se acicala) mientras se escriben los datos, de modo que la carga útil que se está transmitiendo tiene sentido una vez que el puntero RIP se secuestra y apunta a la memoria sobrescrita, que luego se lee y ejecuta.
Puede ver el código fuente aquí .
En cuanto a lo que se hizo mal, debería haber una resta de DWORD a DWORD o de WORD a WORD. Tener la diferencia en tamaños es lo que permitió que la memoria se sobrescribiera.
EDITAR: Checkpoint hizo un asombroso artículo explicando los 3 errores relacionados con esta vulnerabilidad, lo que entendido por el código ruby que leí es solo el error 1/3 (error A en la redacción de Checkpoint), si quieres profundizar mucho más, échale un vistazo.