sansecio/magevulndb
GitHub: sansecio/magevulndb
一个收录 Magento 1/2 第三方扩展已知安全漏洞的数据库,帮助商家和开发者快速识别代码库中存在风险的不安全插件。
Stars: 211 | Forks: 36
# Magento 漏洞数据库
已知存在安全问题的 Magento 1 和 2 扩展列表。**目标:轻松识别你的 Magento 代码库中不安全的第三方软件。** 有关其基本原理,请参阅我们的博客:[糟糕的扩展现在已成为 Magento 被黑客攻击的主要来源及解决方案](https://sansec.io/research/magento-module-blacklist)

# [Magento 1 列表](magento1-vulnerable-extensions.csv) / [Magento 2 列表](magento2-vulnerable-extensions.csv)
该列表包含以下列:
1. 模块的 `Vendor_Name`
- 在 M1 下,可以使用 `n98-magerun dev:module:list` 或 `Mage::getConfig()->getNode()->modules` 查看
- 在 M2 下,可以使用 `bin/magento module:status` 查看
2. 可安全使用的最低版本。低于此版本的条目被视为不安全。
3. 攻击者利用此模块时所使用的部分 URL。可用于在日志文件中搜索恶意活动。(可选)
4. 描述该问题的参考 URL。如果没有公开声明,则填发现该问题的研究员姓名。
5. 包含升级说明的 URL(可选)
# 背景
Magento 是支付窃取者的主要攻击目标,自 2015 年以来,攻击次数稳步增加。在 2018 年,攻击者从利用 Magento 核心漏洞(例如 Shoplift、对管理员密码的暴力破解)转向了[第三方软件组件](https://gwillem.gitlab.io/2018/10/23/magecart-extension-0days/)。这就带来了一个实际问题:目前没有一个中心平台可以让人(以编程方式)查到某个特定的模块版本是否存在已知的安全问题。本仓库正是为了解决这个问题!
# 用法
你可以使用 Magerun 模块或单行命令,快速根据本仓库扫描你的网站。这两种方式都需要通过命令行或 SSH 访问服务器。推荐使用 Magerun,因为它易于安排定期执行或进行持续监控,并且提供更好的输出效果。这两种方式在每次运行时都会加载最新的漏洞数据。
### Magerun 模块(推荐)
1. 为 Magento 1 或 Magento 2 [安装 n98-magerun](https://github.com/netz98/n98-magerun)。
2. 安装 Magento 漏洞数据库插件:
对于 Magento 1:
```
mkdir -p ~/.n98-magerun/modules
cd ~/.n98-magerun/modules
git clone https://github.com/gwillem/magevulndb.git
```
对于 Magento 2:
```
mkdir -p ~/.n98-magerun2/modules
cd ~/.n98-magerun2/modules
git clone https://github.com/gwillem/magevulndb.git
```
3. 扫描你的 Magento 安装:
```
n98-magerun.phar dev:module:security
```
你也可以使用 `-q` 标志,将输出限制为仅显示发现的漏洞。
```
n98-magerun.phar dev:module:security -q
```
你可以检查退出代码,例如在检测到易受攻击的模块时让构建失败:
* 退出代码 `0`:未发现已知漏洞
* 退出代码 `1`:发现已知漏洞
* 退出代码 `2`:无法加载漏洞数据
### Magento 1 下没有安装 magerun?
要快速检查 Magento 安装中是否存在易受攻击的模块,请通过 SSH **在你的 Magento 1 网站根目录下**运行以下命令:
```
php -r 'require_once("app/Mage.php");Mage::app();$config=Mage::getConfig()->getNode()->modules;$found=array();$list=fopen("https://raw.githubusercontent.com/gwillem/magevulndb/master/magento1-vulnerable-extensions.csv","r");while($list&&list($name,$version)=list($row["module"],$row["fixed_in"],,$row["reference"],$row["update"])=fgetcsv($list)){if(isset($name,$version,$config->{$name},$config->{$name}->version)&&(empty($version)||version_compare($config->{$name}->version,$version,"<"))){$found[]=$row;}}if($found){echo "Found possible vulnerable modules: ".print_r($found,1);}else{echo "No known vulnerable modules detected.";}'
```
你可以检查退出代码,例如在检测到易受攻击的模块时让构建失败:
* 退出代码 `0`:未发现已知漏洞
* 退出代码 `1`:发现已知漏洞
此脚本仅适用于 Magento 1。对于 Magento 2,请改用 Magerun。
# 常见问题
### 为什么建立一个新仓库?
目前已经有很多不错的倡议,但它们要么缺少简单的网页 GUI,要么维护起来过于复杂,要么没有涵盖所有的扩展。对于 Magento 2,已经有通过 composer 实现的优秀支持,请参阅 [Roave 的 SecurityAdvisories](https://github.com/Roave/SecurityAdvisories) 了解自动化 composer 集成。尽管如此,Roave 的方案仍然需要你运行 composer 命令来检查新的更新。而使用这个 Magerun 命令,你可以保持 composer 文件不变。显然,它也适用于那些根本没有使用 composer 管理的 Magento 1 和 2 安装环境。
### 如果一个模块随着时间推移出现了多个安全问题怎么办?
我们只记录最新的问题,并建议所有人升级到最新版本。如果人们想坚持使用旧版本(可能是不安全的),他们应该仔细研究相关的更新日志(changelogs)。
### 那些有多个已知名称的模块怎么办?
以在代码中注册的名称(并由 `n98-magerun dev:module:list` 输出)为准。如果一个模块有多个(代码)名称,那么我们应该创建重复条目,以便自动化工具不会忽略这样的条目。
### 如果我不知道模块名称怎么办?
如果你有一个正在受到攻击的 URL 但不知道它属于哪个模块,请提交它并将名称留为 "`?`"。当确定了实际所属的模块时,它会被自动补充完善。
### 有多个信息来源,我应该使用哪一个?
如果供应商发布了安全声明,则应以该声明为准。否则,可以使用安全研究员(博客/Twitter)发布的声明。如果供应商发布的声明虚假或具有误导性,则应以独立声明为准。
### 我们可以添加更多信息 X 吗?
确实可以,但一个只包含少数几列的简单 CSV 的主要优势在于它易于浏览、维护和扩展。其他项目就是因为漏洞管理方面的开销过大而停滞不前。本仓库的主要目的是支持 n98-magerun 命令。如果人们想了解更多信息,可以通过引用的来源自行查找。
### 相关 URI (Relevant URI) 列是用来做什么的?
工具可以使用此列从日志中过滤出“可疑的”网络流量,例如检查恶意活动是否已经发生。如果可能的话,该 URI 应足以唯一匹配该模块存在漏洞的 URL。
### 如果有多个相关的 URL 怎么办?
请使用 ";" 将它们分隔开。
### 如果一个模块没有版本号怎么办?
请使用修复日期,格式为 YYYY-MM-DD。
### 如果供应商提供了修复但未更新版本号怎么办?
一些 Magento 1 模块(例如 Mirasvit,[相关讨论](https://github.com/gwillem/magevulndb/pull/40))不使用标准的版本编号方式,因此无法自动检测出易受攻击的版本。为了消除误报,所有此类模块都带有下划线前缀,因此自动模块解析器将不会识别它们。这种处理方式虽然不是最理想的,但总比完全不存储信息要好。
# 许可协议
本仓库的信息和代码免费提供,不承担任何形式的保证或连带责任。商家和开发机构可自由使用这些数据来评估自己的商店。不允许在商业产品或服务中使用或包含这些数据。
# 联系方式
[info@sansec.io](mailto:info@sansec.io?subject=magevulndb)
标签:CISA项目, ffuf, Magento, Web安全, 攻防检测, 文档安全, 蓝队分析