- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章还原 Cloudflare CDN 漏洞被利用的过程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Cloudflare 已修复其免费开源 CDNJS 中的一个严重漏洞,该漏洞可能影响互联网上 12.7% 的网站.
CDNJS为数百万网站提供超过4000个JavaScript和CSS库,这些库公开存储在GitHub上,使其成为第二大JavaScript CDN.
该漏洞利用包括使用 GitHub 和 npm 将数据包发布到 Cloudflare 的 CDNJS,以触发路径遍历漏洞,并最终远程执行代码.
如果被利用,该漏洞将导致 CDNJS 基础设施的完全攻击.
从“ZIP Slip”到远程代码执行 。
本周,安全研究员 RyotaK 解释了他如何在研究供应链攻击的同时找到一种方法来完全攻击 Cloudflare 的 CDNJS 网络.
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。在维护互联网的安全性、完整性和可用性方面发挥着关键作用,因为绝大多数网站都依赖这些服务来加载流行的 JavaScript 库和 CSS 脚本.
CDN 可能成为攻击者的目标选择,因为如果受到攻击,攻击会对许多网站、在线商店及其客户产生深远的影响.
在浏览 cdnjs.com 时,RyotaK 注意到对于 CDNJS 中尚不存在的库,他可以建议通过 CDNJS 的 GitHub 存储库添加一个新库.
用户可以请求将包发布到 CDNJS 的 GitHub 存储库 。
在探索了这个 GitHub 存储库以及共同使 CDNJS 生态系统工作的相邻存储库之后,RyotaK 找到了一种方法来诱使服务器执行任意代码.
特别是,研究人员研究了 cdnjs/bot-ansible 和 cdnjs/tools 中存在的脚本,包括一个自动更新脚本,有助于自动检索库更新.
这些脚本会定期使用其开发者在相应 npm 注册表上发布的较新版本的软件库更新 CDNJS 服务器.
换句话说,对于发布到 CDNJS 的 GitHub 存储库的每个库,其更新版本将从链接的 npm 注册表下载,并且 npm 版本也由库开发者维护.
RyotaK想知道,如果他发布到CDNJS的库在对应的npm版本中包含路径遍历漏洞,会发生什么。注意,npm包是以TGZ (.tar.gz)档案的形式发布的,可以很容易地使用隐藏在其中的路径遍历漏洞来制作.
研究人员首先使用 GitHub 向 CDNJS 发布了一个名为 hey-sven 的测试库,然后开始在 npm 注册表上发布更新版本的“hey-sven”.
在发布到 npm 的较新的“hey-sven”版本中,最终将由 CDNJS 的更新机器人处理,研究人员在看起来很奇怪的路径上注入了 Bash 脚本.
这些不同的路径只不过是隐藏在 ZIP/TGZ 档案中的路径遍历漏洞,这个概念在 2018 年以“ZIP Slip”方式爆发了.
2018 年 6 月 5 日,Snky 安全团队公布了一个名为 Zip Slip 的漏洞。这是一个广泛存在的文件覆盖漏洞,通过这个漏洞,攻击者可以利用一个特制的 Zip 压缩文件,从路径遍历覆盖任意文件,继而远程命令执行,发起攻击。Zip Slip 是以目录遍历的一种形式,通过从存档中提取文件来进行攻击。目录遍历漏洞的前提是攻击者可以访问文件系统中应该驻留的目标文件夹之外的部分文件系统。然后,攻击者可以覆盖可执行文件并远程调用它们,或者等待系统或用户调用它们,从而实现受害者机器上的远程命令执行。此漏洞还可能通过覆盖配置文件或其他敏感资源而造成损害,并且可能会在客户端(用户)机器和服务器上受到攻击.
攻击者主要可以利用保存目录遍历文件名的特制档案文件(例如../../evil.sh)触发 Zip Slip 漏洞。该漏洞已影响许多存档的格式,包括 tar、jar、war、cpio、apk、rar 和 7z 等大量的压缩文件.
目前 Zip Slip 漏洞已经影响了包括阿里巴巴、Google、Oracle、Eclipse、HP、Amazon、Apache、Pivotal、Linkedin 等企业的数千个项目,以及 Java、Ruby、.Net、 Go 等多种语言生态系统,其中 Java 受到的攻击尤为严重,主要是因为它没有中央仓库提供高级别归档(如 Zip)文件处理。缺乏这样的库导致易受攻击的代码片段被手工制作,并在诸如 Stack Overflow 等开发者社区中共享.
“hey-sven”库的 npm 1.0.1 和 1.0.2 版本包含路径遍历漏洞 。
一旦 CDNJS 服务器处理了精心制作的“hey-sven”npm 档案,这些 Bash 脚本的内容将在服务器上执行.
但是,研究人员不想意外覆盖现有脚本,因此在概念验证 (PoC) 测试期间,他首先使用符号链接漏洞读取他即将覆盖的文件的内容.
由于Git在默认情况下支持符号链接,所以可以通过在Git存储库中添加符号链接来从cdnjs库更新服务器中读取任意文件。如果定期执行的脚本文件被覆盖执行任意命令,自动更新功能可能会被攻击,所以研究人员决定先检查任意文件读取.
一旦攻击者精心制作的 PoC击中服务器,RyotaK 就能够意外地将敏感机密(例如 GITHUB_REPO_API_KEY 和 WORKERS_KV_API_TOKEN)转储到 CDN 提供的脚本中,网址为https://cdnjs.cloudflare.com/... 。
初始符号链接 PoC 的输出为研究人员提供了密钥 。
GITHUB_REPO_API_KEY是一个授予写作权限的API密钥,使攻击者能够修改CDNJS上的任何库甚至篡改cdnjs.com网站本身.
另一方面,WORKERS_KV_API_TOKEN 秘密可用于篡改存在于 Cloudflare Workers 缓存中的库.
通过组合这些权限,CDNJS 的核心部分,例如 CDNJS 的原始数据、KV 缓存,甚至 CDNJS 网站,都可以完全被篡改.
Cloudflare 发布了许多修复程序以修复漏洞 。
研究人员于 2021 年 4 月 6 日通过 HackerOne 的漏洞披露计划向 Cloudflare 报告了此漏洞,并看到 Cloudflare 的团队在数小时内应用了间歇性修复.
BleepingComputer 看到的初始修复旨在解决符号链接漏洞:
Cloudflare 的 CDNJS (GitHub) 应用的初始修复 。
然而,根据研究人员的说法,由于 CDNJS 生态系统的复杂性,在接下来的几周内对不同的存储库应用了一系列更具体的修复.
RyotaK与BleepingComputer分享了第一个修复以拒绝Git存储库中的符号链接为中心,但它只修复了部分问题.
修复人员首先试图拒绝符号链接,但注意到机器人当前的设计太危险了。因此他们隔离了最危险的功能.
对于其他功能,修复人员应用了 AppArmors.
Application Armor 或 AppArmor 是一种安全功能,它使用预定义的配置文件限制在基于 Unix 的环境上运行的程序的功能,以便程序不会无意中超出其预期的访问范围.
研究人员还与 Cloudflare 部署的 BleepingComputer 共享了一系列修复程序,以保护自动机器人处理更新的库:
Cloudflare 对 CDNJS 进行了多项更改以解决该漏洞 。
虽然这个漏洞可以在没有任何特殊处理的情况下被利用,但它可能会影响许多网站。鉴于供应链中存在许多漏洞,这些漏洞很容易被利用但影响很大.
正如 BleepingComputer 先前报道的那样,影响数千家在线商店的 Magecart 供应链攻击源于对Volusion 的 CDN 基础设施的攻击.
本文翻译自:
https://www.bleepingcomputer.com/news/security/critical-cloudflare-cdn-flaw-allowed-compromise-of-12-percent-of-all-sites/ 。
原文链接:https://www.4hou.com/posts/q6N3 。
最后此篇关于还原 Cloudflare CDN 漏洞被利用的过程的文章就讲到这里了,如果你想了解更多关于还原 Cloudflare CDN 漏洞被利用的过程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如果我声明了类似的类型 type test(NSIZE) integer, len :: NSIZE real :: dummy(NSIZE) contains procedure,
我知道这是一个不太可能的事情,但是由于“选项私有(private)模块”的限制,甚至更糟糕的“私有(private)子/函数”的限制,有谁知道是否有一种方法可以从 Excel 应用程序隐藏 VBA 过
我有两个表,property 和 component。 component.id_property = property.id。 我正在尝试创建一个过程,该过程对所选属性的组件进行计数,如果所选属性没
我有一份报告,它是在 SSRS 2005 中开发的,我正在使用存储过程从数据库中获取结果。报告输出的结果非常简单,如下图所示。 如果假设我正在寻找不同的成员 例如:- MemberID c108 c
我需要一个通用函数/过程,该函数/过程将根据提供的数据计算出我的淡入淡出时间和值,如下所示: 我将字节值保存在字节数组中:这些是起始值。然后,我在其他数组中存储了一些值:这些将是新值。然后我有时间要提
我想在界面的多个按钮上创建相同的操作。是否只能通过创建单独的操作监听器方法并调用执行操作的方法才可行,还是还有其他方法?是否可以将按钮放在一个组中并执行以下操作:- groupButton.setOn
我有以下情况: procedure Test; begin repeat TryAgain := FALSE; try // Code // Code if this an
我正在尝试执行以下操作;假设我在 Oracle 中创建了一个对象类型 create type test as object( name varchar2(12), member procedure p
问题: 如果可能的话,如何声明一个用于任何类型参数的函数 T其中 T 的唯一约束是它被定义为 1D array如 type T is array ( integer range <> ) of a_r
我正在尝试创建这个 mysql 过程来制作一个包含今年所有日期和所有时间的表(以一小时为间隔。) CREATE TABLE FECHAS ( created_at datetime ); CREA
所以, 我在这里面临一个问题,这让我发疯,我认为这是一个愚蠢的错误,所以我不是 MySQL 的新手,但它并不像我想象的那样工作。 尝试将此语句部署到 MySQL 后,我收到此错误: ERROR 106
我有一个架构,其中包含星球大战中的人物列表、他们出现的电影、他们访问的行星等。这是架构: CREATE DATABASE IF NOT EXISTS `starwarsFINAL` /*!40100
我一直在为一家慈善机构创建一款应用程序,允许家庭在节日期间注册接收礼物。数据库组织有多个表。下面列出了这些表(及其架构/创建语句): CREATE TABLE IF NOT EXISTS ValidD
正如上面标题所解释的,我正在尝试编写一个sql函数来按日期删除表而不删除系统表。我在此消息下方放置了一张图片,以便直观地解释我的问题。任何帮助将不胜感激!感谢您的时间! 最佳答案 您可以通过查询INF
DELIMITER $$ CREATE PROCEDURE INSERT_NONE_HISTORY_CHECKBOX() BEGIN DECLARE note_id bigint(20); F
是否可以编写一个存储过程或触发器,在特定时间在数据库内部自动执行,而无需来自应用程序的任何调用?如果是,那么任何人都可以给我一个例子或链接到一些我可以阅读如何做到这一点的资源。 最佳答案 查看 pgA
我需要创建一个过程:1)从表中的字段中选择一些文本并将其存储在变量中2) 更新相同的记录字段,仅添加 yyyymmdd 格式的日期以及过程中的附加文本输入...类似这样的... delimiter /
好的,这就是我想做的: 如果条目已存在(例如基于字段name),则只需返回其id 如果没有,请添加 这是我迄今为止所管理的(对于“如果不存在,则创建它”部分): INSERT INTO `object
以下是我编写的程序,用于找出每位客户每天购买的前 10 件商品。 这是我尝试过的第一个 PL/SQL 操作。它没有达到我预期的效果。 我使用的逻辑是接受开始日期、结束日期以及我对每个客户感兴趣的前“x
我正在尝试在MySQL中创建一个过程那insert week s(当年)发送至我的 week table 。但存在一个问题,因为在为下一行添加第一行后,我收到错误: number column can
我是一名优秀的程序员,十分优秀!