在本周的摘要中,我们将讨论:
- 缺少适当的状态、nonce和PKCE检查,用于OAuth 认证;
- Apache HTTP服务器:mod_proxy_uwsgi HTTP响应分割;
- 由于CODE_SIGNING_INJECT_BASE_ENTITLEMENTS,ShadowsocksX-NG用com.apple.security.get-task-allow entitlements签名;和
- runc中的一个访问控制问题,允许攻击者在容器中提升权限。
CVE-2023-27490:缺少正确的状态、nonce和PKCE检查,用于OAuth 认证
背景介绍
OAuth (Open Authorization)是一个开放的标准协议,允许第三方应用程序代表用户访问资源,而不需要知道用户的凭证,如用户名和密码。OAuth ,其工作原理是让用户通过向资源所有者(如社交媒体平台)验证自己的身份并获得一个访问令牌,然后用来代表用户访问资源。这个访问令牌是由资源所有者签发的,第三方应用程序可以使用它来访问用户的资源,而不需要知道用户的登录凭证。
脆弱性
漏洞CVE-2023-27490,存在于Next-auth软件包中,它与OAuth 认证流程有关。具体来说,它发生在OAuth 会话期间,当授权URL被拦截并被攻击者操纵时。这个漏洞可以让攻击者以受害者的身份登录,并绕过通常的CSRF保护。在OAuth 流程中,授权URL被用来启动认证过程并请求访问用户的资源。该URL包含重要的参数,如状态、pkce和nonce,这些参数用于防止CSRF、重放攻击和令牌盗窃等攻击。然而,如果授权URL被攻击者截获并操纵,这些保护措施就会被绕过,导致Next-auth包中描述的漏洞。
该漏洞的根本原因是在被破坏的OAuth 会话中发生的部分故障。具体来说,一个会话代码被错误地生成,这使得攻击者可以绕过CSRF保护并作为受害者登录。
缓解
- 该漏洞已在next-auth v4.20.1版本中得到解决,升级到最新版本是修复该问题的推荐方法。
- 然而,通过使用高级初始化,开发人员可以手动检查回调请求的状态、pkce和nonce与提供者的配置,如果有不匹配,就中止签到过程。
CVE-2023-27522:Apache HTTP服务器: mod_proxy_uwsgi HTTP响应分割
背景介绍
HTTP请求偷渡是一个网络应用程序漏洞,当攻击者可以操纵应用程序或网络服务器处理客户端发送的HTTP请求的方式时,就会发生这种情况。这个漏洞可以让攻击者绕过安全控制,执行未经授权的操作,或窃取敏感数据。
这种攻击通常涉及利用前端网络服务器和后端服务器或应用程序在处理HTTP请求时的不一致,例如对内容长度头的解释或对分块编码的处理。通过操纵这些不一致,攻击者可以制作一个被两个服务器解释为不同的请求,导致请求被不适当地处理,或者前端服务器作为攻击者的代理,代表攻击者执行恶意请求。
脆弱性
漏洞CVE-2023-27522影响到Apache HTTP服务器2.4.30至2.4.55版本,特别是通过mod_proxy_uwsgi模块。该漏洞发生在原服务器发送一个特制的HTTP响应头,其中包含某些特殊字符,如空格或制表符,后面是 "Content-Length "头。
Apache HTTP服务器中的mod_proxy_uwsgi模块可能会误解这个头,并将带有截断或分割的 "Content-Length "头的响应转发给客户端。这可能导致客户端收到不完整或不正确的响应,可能允许攻击者进行各种类型的攻击,如数据泄漏、服务器端请求伪造(SSRF)、跨站点脚本(XSS)和远程代码执行(RCE)。
缓解
- 建议升级到最新版本的Apache HTTP服务器或应用任何可用的补丁。
- 此外,网络应用防火墙和入侵检测系统可用于检测和防止HTTP响应偷渡攻击。
- 确保使用适当的输入验证和输出编码技术以防止在HTTP响应中注入特殊字符也很重要。
cve-2023-27574:ShadowsocksX-NG与com.apple.security.get-task-allow签约
背景介绍
ShadowsocksX-NG是一个免费和开源的应用程序,通过创建一个安全的socks5代理,帮助用户绕过互联网审查,通过它可以访问互联网。
当一个应用程序被开发并准备发布时,它需要用有效的证书进行签名,以确保它是合法的,没有被篡改过。这个过程被称为代码签名。
代码签名的要求之一是包括权利,这是一个应用程序正常运行所需的权限。权限规定了应用程序被允许访问哪些资源和行动,如网络、文件系统或硬件。
脆弱性
漏洞CVE-2023-27574存在于ShadowsocksX-NG1.10.0版本的应用程序中,该应用程序使用名为com.apple.security.get-task-allow的权利签名。该权限允许开发工具(如Xcode)对应用程序进行调试和检查,即使它在用户的设备上运行。
包括这个权利的原因是由于一个叫做CODE_SIGNING_INJECT_BASE_ENTITLEMENTS的功能。这个功能是代码签名过程的一部分,它允许开发者在应用程序的权利文件中明确指定的权利之外,还包括额外的权利。换句话说,当CODE_SIGNING_INJECT_BASE_ENTITLEMENTS功能被启用时,Xcode将自动在应用程序的签名中注入一组默认的权利。这些权限是基于开发者的账户和项目设置的。它们默认包括 com.apple.security.get-task-allow 权限。
这种方法的问题是,com.apple.security.get-task-allow权限可以被攻击者滥用,以从应用程序的内存中获取敏感信息,如加密密钥或其他敏感数据。这可以通过利用应用程序的漏洞或使用第三方工具读取应用程序的内存来实现。
缓解
- 建议ShadowsocksX-NG 1.10.0版本的用户升级到不包括com.apple.security.get-task-allow权限的更高版本,或从应用程序的代码签名中手动删除该权限。
- 此外,用户在使用VPN/代理软件时应谨慎,并确保他们使用的是可信的安全版本的软件。
CVE-2019-5736: runc中的访问控制问题
背景介绍
runc是一个命令行工具,用于根据开放容器倡议(OCI)的规范催生和运行容器。它通常用于容器运行环境,如Docker、Kubernetes和其他。
脆弱性
该漏洞CVE-2019-5736是一个访问控制问题,允许攻击者在容器内提升权限。具体而言,该问题与runc版本到1.1.4在启动容器时处理根文件系统(rootfs)的方式有关。
在libcontainer/rootfs_linux.go中,runc设置了一个容器的rootfs,将其挂载为只读,然后在其上面覆盖一个可写层。这个过程被用来创建容器的文件系统,并将其与主机系统隔离。
然而,该代码的一个缺陷允许攻击者覆盖主机系统的 /proc/self/exe文件,该文件是runc二进制文件本身的一个符号链接。通过这样做,攻击者可以以更高的权限执行任意代码,有效地逃离容器并获得对主机系统的控制。
缓解
- 升级到有补丁的版本:升级到有补丁的 runc 版本是对该漏洞最有效的缓解措施。runc 1.0.0-rc6 及以后的版本包括对该漏洞的修复。
- 升级容器运行时间:如果你使用的是容器运行环境,如Docker或Kubernetes,请确保升级到包括有补丁的runc版本。
- 实施访问控制:为了减轻这个漏洞的风险,应该实施访问控制,以限制攻击者用自定义卷轴安装配置生成容器和运行自定义镜像的能力。
- 尽量减少容器的权限:最小化容器的权限可以帮助限制潜在攻击的范围。这可以通过以非root用户身份运行容器、限制容器能力和限制对敏感主机资源的访问来实现。
注释