深度挖掘:查找并修复高严重性 libcurl/curl 漏洞
就在不久前,curl项目的首席开发者丹尼尔-斯滕伯格(Daniel Stenberg)向安全和开发界发出了警告,他发布了一份不幸的邮件,称10月11日发布的新版curl解决了两个影响巨大的安全漏洞,其中一个被他称为 "可能是长期以来最严重的curl安全漏洞"。
斯滕伯格博客上的一份报告指出,受影响版本的 curl 库容易出现基于堆的缓冲区溢出漏洞,这与 2002 年以来使用的 SOCKS5 代理协议的遗留问题有关。
作为一种命令行工具,curl 的使用可以追溯到 1998 年,它被广泛视为互联网的基础支柱。它的历史如此悠久,使用范围如此广泛,如果被发现存在漏洞,将对整个网络安全产生持续影响。
这一事件与Log4j 中发生的破坏性 Log4Shell 攻击事件有相似之处,后者是另一个在近两年后仍在被利用的脆弱依赖项。
>>>现在就通过我们的 curl 任务测试你的知识!
漏洞缓冲区溢出
该漏洞在CVE-2023-38545 下有详细说明,影响 curl 7.69.0 至 8.3.0(包括 8.3.0)版本。主要漏洞是一个基于堆的缓冲区溢出漏洞,初步报告指出,成功利用该漏洞可能会导致更具破坏性的远程代码执行(RCE)攻击。虽然这对威胁行为者来说是一个可能的工作流程,但这只是一个罕见的使用案例,而不是必然的。
也许唯一可以降低风险的是,恶意通信必须通过 SOCKS5 代理,而这种部署相对来说并不常见。
与 curl 漏洞利用类似,让我们看看这个缓冲区溢出解释器:
当curl被告知使用SOCKS5代理时,它会传递主机名并由代理解析。然而,如果主机名超过了255字节的限制,curl就会在本地解析主机名(如下面的代码片段所示:源代码)。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e1015305_6532549b9043a95244d8ac8a_curlsnip1.png)
如果客户端和代理之间的握手速度较慢,则有可能将长主机名复制到内存缓冲区,而不是(较短的)解析地址。分配的内存部分只允许 255 字节的值,因此如果接收到的值超过这个限制,数据就会溢出内存缓冲区的边界。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e10152fa_653254d90d2c29a6dc2f7834_curlsnip2.png)
>>> 在这个可玩任务中亲身体验一下吧 游戏任务!
缓冲区溢出是一种强大的攻击载体,在许多传统编程语言中普遍存在。在这种特殊情况下,利用缓冲区溢出会在某些情况下以 RCE 的形式造成更严重和更具破坏性的攻击,尽管这种途径仍不常见,也不太可能出现。
如何降低缓冲区溢出风险?
在此阶段,最优先的补救措施是为所有易受攻击的实例打上补丁,同时提醒您,curl 的使用非常普遍,您的系统组件在使用中是否包含该依赖关系不一定很明显,也不一定会做广告。在这种情况下,需要进行审计和后续修补。
一般来说,缓冲区溢出缺陷可以通过使用Rust这样的内存安全语言来缓解,但对于像curl这样的庞大项目来说,移植到其他语言或临时重写并不现实。正如斯滕伯格(Stenberg)在讨论使用和支持更多内存安全语言编写的依赖项的可能性时所指出的那样,或者说逐步替换curl部分内容的替代方案,"......开发工作......目前正在以近乎冰川般的速度进行,这清楚地表明了所面临的挑战。在可预见的未来,curl仍将使用C语言编写。这不是一项小工程,其安全影响是巨大的。
安全错误可能会发生,也一定会发生,不可能总是依靠扫描仪和测试来发现所有可能的攻击向量。因此,我们对抗这些漏洞的最大武器就是不断提高安全意识和技能。
想进一步了解如何编写安全代码和降低风险?
试试我们的 堆溢出免费挑战.
如果您有兴趣获得更多免费的编码指南,请查看 安全代码教练来帮助您掌握安全编码的最佳实践。
![](https://cdn.prod.website-files.com/5fec9210c1841a81c9c6ce7d/66d0b4fa43284a440c24b591_learn-more.avif)
Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。
预定一个演示Laura Verheyde 是Secure Code Warrior 的一名软件开发人员,主要负责研究漏洞并为Missions 和编码实验室创建内容。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/6532538764183f7218a0f49f_Generic%20blog%20images%20-%20abstract%20geo%20(1).webp)
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/6532538764183f7218a0f49f_Generic%20blog%20images%20-%20abstract%20geo%20(1).webp)
就在不久前,curl项目的首席开发者丹尼尔-斯滕伯格(Daniel Stenberg)向安全和开发界发出了警告,他发布了一份不幸的邮件,称10月11日发布的新版curl解决了两个影响巨大的安全漏洞,其中一个被他称为 "可能是长期以来最严重的curl安全漏洞"。
斯滕伯格博客上的一份报告指出,受影响版本的 curl 库容易出现基于堆的缓冲区溢出漏洞,这与 2002 年以来使用的 SOCKS5 代理协议的遗留问题有关。
作为一种命令行工具,curl 的使用可以追溯到 1998 年,它被广泛视为互联网的基础支柱。它的历史如此悠久,使用范围如此广泛,如果被发现存在漏洞,将对整个网络安全产生持续影响。
这一事件与Log4j 中发生的破坏性 Log4Shell 攻击事件有相似之处,后者是另一个在近两年后仍在被利用的脆弱依赖项。
>>>现在就通过我们的 curl 任务测试你的知识!
漏洞缓冲区溢出
该漏洞在CVE-2023-38545 下有详细说明,影响 curl 7.69.0 至 8.3.0(包括 8.3.0)版本。主要漏洞是一个基于堆的缓冲区溢出漏洞,初步报告指出,成功利用该漏洞可能会导致更具破坏性的远程代码执行(RCE)攻击。虽然这对威胁行为者来说是一个可能的工作流程,但这只是一个罕见的使用案例,而不是必然的。
也许唯一可以降低风险的是,恶意通信必须通过 SOCKS5 代理,而这种部署相对来说并不常见。
与 curl 漏洞利用类似,让我们看看这个缓冲区溢出解释器:
当curl被告知使用SOCKS5代理时,它会传递主机名并由代理解析。然而,如果主机名超过了255字节的限制,curl就会在本地解析主机名(如下面的代码片段所示:源代码)。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e1015305_6532549b9043a95244d8ac8a_curlsnip1.png)
如果客户端和代理之间的握手速度较慢,则有可能将长主机名复制到内存缓冲区,而不是(较短的)解析地址。分配的内存部分只允许 255 字节的值,因此如果接收到的值超过这个限制,数据就会溢出内存缓冲区的边界。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e10152fa_653254d90d2c29a6dc2f7834_curlsnip2.png)
>>> 在这个可玩任务中亲身体验一下吧 游戏任务!
缓冲区溢出是一种强大的攻击载体,在许多传统编程语言中普遍存在。在这种特殊情况下,利用缓冲区溢出会在某些情况下以 RCE 的形式造成更严重和更具破坏性的攻击,尽管这种途径仍不常见,也不太可能出现。
如何降低缓冲区溢出风险?
在此阶段,最优先的补救措施是为所有易受攻击的实例打上补丁,同时提醒您,curl 的使用非常普遍,您的系统组件在使用中是否包含该依赖关系不一定很明显,也不一定会做广告。在这种情况下,需要进行审计和后续修补。
一般来说,缓冲区溢出缺陷可以通过使用Rust这样的内存安全语言来缓解,但对于像curl这样的庞大项目来说,移植到其他语言或临时重写并不现实。正如斯滕伯格(Stenberg)在讨论使用和支持更多内存安全语言编写的依赖项的可能性时所指出的那样,或者说逐步替换curl部分内容的替代方案,"......开发工作......目前正在以近乎冰川般的速度进行,这清楚地表明了所面临的挑战。在可预见的未来,curl仍将使用C语言编写。这不是一项小工程,其安全影响是巨大的。
安全错误可能会发生,也一定会发生,不可能总是依靠扫描仪和测试来发现所有可能的攻击向量。因此,我们对抗这些漏洞的最大武器就是不断提高安全意识和技能。
想进一步了解如何编写安全代码和降低风险?
试试我们的 堆溢出免费挑战.
如果您有兴趣获得更多免费的编码指南,请查看 安全代码教练来帮助您掌握安全编码的最佳实践。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/6532538764183f7218a0f49f_Generic%20blog%20images%20-%20abstract%20geo%20(1).webp)
就在不久前,curl项目的首席开发者丹尼尔-斯滕伯格(Daniel Stenberg)向安全和开发界发出了警告,他发布了一份不幸的邮件,称10月11日发布的新版curl解决了两个影响巨大的安全漏洞,其中一个被他称为 "可能是长期以来最严重的curl安全漏洞"。
斯滕伯格博客上的一份报告指出,受影响版本的 curl 库容易出现基于堆的缓冲区溢出漏洞,这与 2002 年以来使用的 SOCKS5 代理协议的遗留问题有关。
作为一种命令行工具,curl 的使用可以追溯到 1998 年,它被广泛视为互联网的基础支柱。它的历史如此悠久,使用范围如此广泛,如果被发现存在漏洞,将对整个网络安全产生持续影响。
这一事件与Log4j 中发生的破坏性 Log4Shell 攻击事件有相似之处,后者是另一个在近两年后仍在被利用的脆弱依赖项。
>>>现在就通过我们的 curl 任务测试你的知识!
漏洞缓冲区溢出
该漏洞在CVE-2023-38545 下有详细说明,影响 curl 7.69.0 至 8.3.0(包括 8.3.0)版本。主要漏洞是一个基于堆的缓冲区溢出漏洞,初步报告指出,成功利用该漏洞可能会导致更具破坏性的远程代码执行(RCE)攻击。虽然这对威胁行为者来说是一个可能的工作流程,但这只是一个罕见的使用案例,而不是必然的。
也许唯一可以降低风险的是,恶意通信必须通过 SOCKS5 代理,而这种部署相对来说并不常见。
与 curl 漏洞利用类似,让我们看看这个缓冲区溢出解释器:
当curl被告知使用SOCKS5代理时,它会传递主机名并由代理解析。然而,如果主机名超过了255字节的限制,curl就会在本地解析主机名(如下面的代码片段所示:源代码)。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e1015305_6532549b9043a95244d8ac8a_curlsnip1.png)
如果客户端和代理之间的握手速度较慢,则有可能将长主机名复制到内存缓冲区,而不是(较短的)解析地址。分配的内存部分只允许 255 字节的值,因此如果接收到的值超过这个限制,数据就会溢出内存缓冲区的边界。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e10152fa_653254d90d2c29a6dc2f7834_curlsnip2.png)
>>> 在这个可玩任务中亲身体验一下吧 游戏任务!
缓冲区溢出是一种强大的攻击载体,在许多传统编程语言中普遍存在。在这种特殊情况下,利用缓冲区溢出会在某些情况下以 RCE 的形式造成更严重和更具破坏性的攻击,尽管这种途径仍不常见,也不太可能出现。
如何降低缓冲区溢出风险?
在此阶段,最优先的补救措施是为所有易受攻击的实例打上补丁,同时提醒您,curl 的使用非常普遍,您的系统组件在使用中是否包含该依赖关系不一定很明显,也不一定会做广告。在这种情况下,需要进行审计和后续修补。
一般来说,缓冲区溢出缺陷可以通过使用Rust这样的内存安全语言来缓解,但对于像curl这样的庞大项目来说,移植到其他语言或临时重写并不现实。正如斯滕伯格(Stenberg)在讨论使用和支持更多内存安全语言编写的依赖项的可能性时所指出的那样,或者说逐步替换curl部分内容的替代方案,"......开发工作......目前正在以近乎冰川般的速度进行,这清楚地表明了所面临的挑战。在可预见的未来,curl仍将使用C语言编写。这不是一项小工程,其安全影响是巨大的。
安全错误可能会发生,也一定会发生,不可能总是依靠扫描仪和测试来发现所有可能的攻击向量。因此,我们对抗这些漏洞的最大武器就是不断提高安全意识和技能。
想进一步了解如何编写安全代码和降低风险?
试试我们的 堆溢出免费挑战.
如果您有兴趣获得更多免费的编码指南,请查看 安全代码教练来帮助您掌握安全编码的最佳实践。
就在不久前,curl项目的首席开发者丹尼尔-斯滕伯格(Daniel Stenberg)向安全和开发界发出了警告,他发布了一份不幸的邮件,称10月11日发布的新版curl解决了两个影响巨大的安全漏洞,其中一个被他称为 "可能是长期以来最严重的curl安全漏洞"。
斯滕伯格博客上的一份报告指出,受影响版本的 curl 库容易出现基于堆的缓冲区溢出漏洞,这与 2002 年以来使用的 SOCKS5 代理协议的遗留问题有关。
作为一种命令行工具,curl 的使用可以追溯到 1998 年,它被广泛视为互联网的基础支柱。它的历史如此悠久,使用范围如此广泛,如果被发现存在漏洞,将对整个网络安全产生持续影响。
这一事件与Log4j 中发生的破坏性 Log4Shell 攻击事件有相似之处,后者是另一个在近两年后仍在被利用的脆弱依赖项。
>>>现在就通过我们的 curl 任务测试你的知识!
漏洞缓冲区溢出
该漏洞在CVE-2023-38545 下有详细说明,影响 curl 7.69.0 至 8.3.0(包括 8.3.0)版本。主要漏洞是一个基于堆的缓冲区溢出漏洞,初步报告指出,成功利用该漏洞可能会导致更具破坏性的远程代码执行(RCE)攻击。虽然这对威胁行为者来说是一个可能的工作流程,但这只是一个罕见的使用案例,而不是必然的。
也许唯一可以降低风险的是,恶意通信必须通过 SOCKS5 代理,而这种部署相对来说并不常见。
与 curl 漏洞利用类似,让我们看看这个缓冲区溢出解释器:
当curl被告知使用SOCKS5代理时,它会传递主机名并由代理解析。然而,如果主机名超过了255字节的限制,curl就会在本地解析主机名(如下面的代码片段所示:源代码)。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e1015305_6532549b9043a95244d8ac8a_curlsnip1.png)
如果客户端和代理之间的握手速度较慢,则有可能将长主机名复制到内存缓冲区,而不是(较短的)解析地址。分配的内存部分只允许 255 字节的值,因此如果接收到的值超过这个限制,数据就会溢出内存缓冲区的边界。
![](https://cdn.prod.website-files.com/5fec9210c1841a6c20c6ce81/66d0934ed2f09291e10152fa_653254d90d2c29a6dc2f7834_curlsnip2.png)
>>> 在这个可玩任务中亲身体验一下吧 游戏任务!
缓冲区溢出是一种强大的攻击载体,在许多传统编程语言中普遍存在。在这种特殊情况下,利用缓冲区溢出会在某些情况下以 RCE 的形式造成更严重和更具破坏性的攻击,尽管这种途径仍不常见,也不太可能出现。
如何降低缓冲区溢出风险?
在此阶段,最优先的补救措施是为所有易受攻击的实例打上补丁,同时提醒您,curl 的使用非常普遍,您的系统组件在使用中是否包含该依赖关系不一定很明显,也不一定会做广告。在这种情况下,需要进行审计和后续修补。
一般来说,缓冲区溢出缺陷可以通过使用Rust这样的内存安全语言来缓解,但对于像curl这样的庞大项目来说,移植到其他语言或临时重写并不现实。正如斯滕伯格(Stenberg)在讨论使用和支持更多内存安全语言编写的依赖项的可能性时所指出的那样,或者说逐步替换curl部分内容的替代方案,"......开发工作......目前正在以近乎冰川般的速度进行,这清楚地表明了所面临的挑战。在可预见的未来,curl仍将使用C语言编写。这不是一项小工程,其安全影响是巨大的。
安全错误可能会发生,也一定会发生,不可能总是依靠扫描仪和测试来发现所有可能的攻击向量。因此,我们对抗这些漏洞的最大武器就是不断提高安全意识和技能。
想进一步了解如何编写安全代码和降低风险?
试试我们的 堆溢出免费挑战.
如果您有兴趣获得更多免费的编码指南,请查看 安全代码教练来帮助您掌握安全编码的最佳实践。