- 网络安全
- 渗透测试
- 漏洞扫描
【免费下载链接】faraday
Open-source and AI-powered cybersecurity tools for offensive security, vulnerability management, and autonomous pentesting. Built by hackers in Latin America, used worldwide.
导读
Faraday 5.10.0(发布于 2025 年 1 月 6 日)围绕CVSS v4做了一次"导入—存储—导出"的全链路能力补齐,并对系统配置信息接口/config增加了基于登录态的访问控制。本文以官方 CHANGELOG(CHANGELOG/5.10.0/community.md)中记录的三条变更为主线,结合仓库内数据库迁移、API 实现与测试用例,逐条还原其底层实现,并给出可直接复用的字段清单与调用方式,帮助安全工程师与集成开发者快速判断如何在自己的工作流中使用这些能力。
一、版本背景与变更总览
Faraday 的 CHANGELOG 采用"每个版本一个目录、每个变更一行"的组织方式(见 CHANGELOG/README.md)。5.10.0 版本的变更记录非常聚焦,共三条:
| 类型 | 变更内容 | Issue |
|---|---|---|
| ADD | CVSS4 数据已包含在 CSV 导出中 | #7850 |
| ADD | 批量导入支持 CVSS v4 | #7849 |
| FIX | 为 config 端点添加了授权 | #7331 |
其中前两条围绕同一主题——CVSS v4 在 Faraday 中的端到端支持,第三条是独立的信息安全加固。下文分别展开。
二、CVSS v4 加入 CSV 导出(#7850)
2.1 导出的字段形态
Faraday 的漏洞 CSV 导出由export_vulns_to_csv实现(faraday/server/utils/export.py)。5.10.0 之前该函数输出的 CVSS 字段只覆盖 CVSS2/CVSS3,本次变更在导出表头中新增了:
'cvss4_vector_string', 'cvss4_base_score'其完整 CVSS 字段顺序为(位于cve之后、cwe之前):
"cve", "cvss2_vector_string", "cvss2_base_score", "cvss3_vector_string", "cvss3_base_score", 'cvss4_vector_string', 'cvss4_base_score', "cwe", "policyviolations", "external_id", ...在数据行构造阶段(export.py),每条漏洞记录从内部数据结构中取出:
"cvss2_vector_string": vuln.get('cvss2').get('vector_string', None), "cvss2_base_score": vuln.get('cvss2').get('base_score', None), "cvss3_vector_string": vuln.get('cvss3').get('vector_string', None), "cvss3_base_score": vuln.get('cvss3').get('base_score', None), "cvss4_vector_string": vuln.get('cvss4').get('vector_string', None), "cvss4_base_score": vuln.get('cvss4').get('base_score', None),即导出的是vector string(完整向量串)与基础得分两列,与 CVSS2/CVSS3 的导出口径保持一致。
2.2 受限导出的同步支持
除完整导出外,内存优化版的export_vulns_to_csv_limited(export.py)也把cvss4纳入了默认"essential fields"白名单:
'external_id', 'cve', 'cwe', 'cvss2', 'cvss3', 'cvss4', 'risk', ...这意味着在导出大批量漏洞、使用精简字段集时,CVSS v4 数据同样不会被丢弃。
2.3 测试验证
仓库测试用例test_export_vuln_csv_empty_instance(tests/test_api_vulns.py)对该导出接口做表头级断言,明确期望响应 CSV 的首行包含cvss4_vector_string与cvss4_base_score两个表头,可作为升级后验证导出功能正常的最低标准。
三、批量导入支持 CVSS v4(#7849)
3.1 底层解析:cvss 工具库
CVSS 解析统一封装在 faraday/server/utils/cvss.py:
get_base_score(cvss_instance):通过cvss_instance.scores()[0]获取 Base Score;get_severity(cvss_instance, 'B'):获取基础严重度等级(返回小写字符串,如medium);get_propper_value(cvss_instance, attr):读取向量中某一指标的描述值并转为小写;若指标为Not Defined或未出现在原始向量中(通过attr_exists_in_vector检查original_metrics),则返回None。
值得注意的是get_propper_value显式兼容了CVSS4实例(isinstance(cvss_instance, CVSS3) or isinstance(cvss_instance, CVSS4)分支),这正是批量导入能正确处理 CVSS v4 的前提。
3.2 批量导入的处理链路
批量创建入口是BulkCreateView(faraday/server/api/modules/bulk_create.py),路由为/v3/ws/<workspace_name>/bulk_create/,post.is_public = True(匿名请求会通过require_agent_token()走 Agent 认证)。
每条漏洞数据在写入前会调用set_cvss_data(bulk_create.py),其顺序为:
def set_cvss_data(vuln_data): set_cvss4_data(vuln_data) set_cvss3_data(vuln_data) set_cvss2(vuln_data)set_cvss4_data(bulk_create.py)的核心逻辑是:从请求数据中取出cvss4_vector_string,用CVSS4(vs4)解析向量,然后逐一填充38 个 CVSS4 相关字段;若解析失败则记录异常并保持各字段为None(先由init_cvss4_data全部置空),不会中断整批导入。字段与 CVSS 4.0 向量指标(缩写)的对应关系如下:
| 字段 | 向量指标 | 含义 |
|---|---|---|
| cvss4_attack_vector | AV | 攻击向量 |
| cvss4_attack_complexity | AC | 攻击复杂度 |
| cvss4_attack_requirements | AT | 攻击前置条件 |
| cvss4_privileges_required | PR | 所需权限 |
| cvss4_user_interaction | UI | 用户交互 |
| cvss4_vulnerable_system_*_impact | VC / VI / VA | 受害系统机密性 / 完整性 / 可用性影响 |
| cvss4_subsequent_system_*_impact | SC / SI / SA | 后续系统机密性 / 完整性 / 可用性影响 |
| cvss4_safety | S | 安全(Safety) |
| cvss4_automatable | AU | 可自动化程度 |
| cvss4_recovery | R | 恢复能力 |
| cvss4_value_density | V | 价值密度 |
| cvss4_vulnerability_response_effort | RE | 漏洞响应成本 |
| cvss4_provider_urgency | U | 提供方紧急度 |
| cvss4_modified_*(11 项) | MAV/MAC/MAT/MPR/MUI/MVC/MSC/MVI/MSI/MVA/MSA | 修正后的各类指标 |
| cvss4_confidentiality/integrity/availability_requirement | CR / IR / AR | 环境安全需求 |
| cvss4_exploit_maturity | E | 利用成熟度 |
3.3 数据库层的承载
CVSS4 的存储依赖一次大型数据库迁移:faraday/migrations/versions/47e0c8f9856d_add_cvss4_columns.py。该迁移在vulnerability表上一次性新增了上述全部列(含_cvss4_vector_string、cvss4_base_score、cvss4_base_severity及各指标列),并提供了对应的downgrade回滚逻辑。迁移创建时间为 2024-08-17,早于 5.10.0 发布,说明本次变更属于在既有存储模型上的能力补齐。
3.4 API Schema 与测试实证
API 侧的CVSS4Schema(faraday/server/api/modules/vulns_base.py)同样完整映射了这 38 个字段:vector_string可写(required=False, allow_none=True),其余评分与指标字段均为dump_only(只读、由服务端计算),并通过post_load_cvss4(vulns_base.py)把嵌套的cvss4.vector_string展开为顶层cvss4_vector_string交给模型处理。
测试数据与断言可以直接作为集成时的参考样例:
- tests/test_api_bulk_create.py 使用向量
CVSS:4.0/AV:A/AC:L/AT:P/PR:L/UI:A/VC:L/VI:H/VA:L/SC:L/SI:H/SA:L做批量导入,并断言落库后的_cvss4_vector_string与cvss4_base_score; - tests/test_api_vulns_workspaced.py 针对单条漏洞创建,断言该向量解析结果为
base_score == 6.0、base_severity == 'medium'、attack_vector == 'adjacent'、attack_complexity == 'high'、attack_requirements == 'present'等全字段语义,可作为 CVSS v4 解析正确性的回归基线。
四、为 config 端点添加授权(#7331)
4.1 背景:默认全量登录拦截机制
Faraday 在 faraday/server/app.py 注册了default_login_required的before_request钩子:除标记为is_public = True的视图外,匿名用户访问任何端点都会收到401。因此,"config 端点"此前若要被前端(如登录页)访问,就必须被标记为 public——而这恰恰意味着配置信息会无差别暴露给未认证请求。
4.2 5.10.0 的实现方式
config 端点由ConfigView提供(faraday/server/api/modules/info.py),路由为/config。5.10.0 的授权逻辑是在get方法内基于登录态分流:
def get(self): if current_user.is_authenticated: doc = { 'ver': f_version, 'show_vulns_by_price': DashboardSettings.settings.show_vulns_by_price, 'smtp_enabled': False, 'sso_enabled': False } return flask.jsonify(doc) return flask.jsonify({'sso_enabled': False})即:
- 已登录用户:返回版本号
ver、仪表盘配置show_vulns_by_price、smtp_enabled与sso_enabled等完整信息; - 匿名用户:仅返回
{'sso_enabled': False}这一最简字段,不再暴露服务端内部配置细节。
端点本身保留get.is_public = True(否则登录页在未认证状态下将无法拉取配置),但信息暴露面被显著收敛。需要说明的是,当前仓库源码中smtp_enabled、sso_enabled均为硬编码False,真实 SMTP/SSO 能力需以实际部署配置为准。
4.3 安全意义
该变更属于典型的"接口仍公开、数据按需暴露"模式:既保证前端引导流程(登录页、SSO 探测)可正常访问,又防止配置信息被未授权探测。对于将 Faraday 暴露在公网、且依赖/config做健康探测或前端初始化的部署场景,建议升级后回归验证匿名请求的返回体确实只包含sso_enabled字段。
五、升级与验证建议
结合仓库测试,升级到 5.10.0 后可做如下快速验证:
- 导出验证:调用漏洞 CSV 导出接口(对应 tests/test_api_vulns.py 中的
export_csv路径),确认响应首行包含cvss4_vector_string、cvss4_base_score两个表头,且存在 CVSS4 数据的行能输出向量与得分; - 导入验证:向
/v3/ws/<workspace>/bulk_create/提交含cvss4_vector_string的漏洞数据,确认数据库vulnerability表的cvss4_base_score、cvss4_base_severity等字段被正确解析填充(参考 tests/test_api_bulk_create.py); - 授权验证:匿名 GET
/config,确认返回体仅含sso_enabled;登录后访问,确认返回完整配置对象。
结语
Faraday 5.10.0 的三条变更体量不大,但语义清晰:CVSS v4 从"可存储、可展示"进一步演进为"可批量导入、可 CSV 导出"的完整闭环,同时/config端点的信息暴露面得到收敛。对依赖 Faraday 做漏洞数据流水线(扫描器上报 → 批量入库 → CSV 汇总)的团队而言,这标志着 CVSS 4.0 评分体系可以在导入与导出两个边界上无缝衔接,无需再手工转换。
- 网络安全
- 渗透测试
- 漏洞扫描
【免费下载链接】faraday
Open-source and AI-powered cybersecurity tools for offensive security, vulnerability management, and autonomous pentesting. Built by hackers in Latin America, used worldwide.
相关推荐
Faraday 5.10.1 安全修复解析:/config 端点认证逻辑的演进与实现
Faraday 5.10.1 安全修复解析:/config 端点认证逻辑的演进与实现 Faraday 在 2025 年 1 月 13 日发布的 5.10.1 社
网络安全渗透测试漏洞扫描Faraday 5.8.0 版本深度解读:CVSS 4.0 漏洞评分支持与 Pipeline 条件引擎增强
Faraday 5.8.0 版本深度解读:CVSS 4.0 漏洞评分支持与 Pipeline 条件引擎增强 Faraday 5.8.0(发布于 2024 年 1
网络安全渗透测试漏洞扫描Devtron v0.7.4 版本解析:GitOps 部署链路修复与终端访问控制增强
Devtron v0.7.4 版本解析:GitOps 部署链路修复与终端访问控制增强 本篇技术文章基于 Devtron 仓库中的 v0.7.4 发布说明 htt
云原生DevOps运维
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考