news 2026/10/20 12:11:27

Faraday 5.10.0 变更解析:CVSS v4 全链路支持与 config 端点访问控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Faraday 5.10.0 变更解析:CVSS v4 全链路支持与 config 端点访问控制
  • 网络安全
  • 渗透测试
  • 漏洞扫描

【免费下载链接】faraday

Open-source and AI-powered cybersecurity tools for offensive security, vulnerability management, and autonomous pentesting. Built by hackers in Latin America, used worldwide.

项目地址:https://gitcode.com/gh_mirrors/far/faraday
点击查看免费下载

导读

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
ADDCVSS4 数据已包含在 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_vectorAV攻击向量
cvss4_attack_complexityAC攻击复杂度
cvss4_attack_requirementsAT攻击前置条件
cvss4_privileges_requiredPR所需权限
cvss4_user_interactionUI用户交互
cvss4_vulnerable_system_*_impactVC / VI / VA受害系统机密性 / 完整性 / 可用性影响
cvss4_subsequent_system_*_impactSC / SI / SA后续系统机密性 / 完整性 / 可用性影响
cvss4_safetyS安全(Safety)
cvss4_automatableAU可自动化程度
cvss4_recoveryR恢复能力
cvss4_value_densityV价值密度
cvss4_vulnerability_response_effortRE漏洞响应成本
cvss4_provider_urgencyU提供方紧急度
cvss4_modified_*(11 项)MAV/MAC/MAT/MPR/MUI/MVC/MSC/MVI/MSI/MVA/MSA修正后的各类指标
cvss4_confidentiality/integrity/availability_requirementCR / IR / AR环境安全需求
cvss4_exploit_maturityE利用成熟度

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 后可做如下快速验证:

  1. 导出验证:调用漏洞 CSV 导出接口(对应 tests/test_api_vulns.py 中的export_csv路径),确认响应首行包含cvss4_vector_string、cvss4_base_score两个表头,且存在 CVSS4 数据的行能输出向量与得分;
  2. 导入验证:向/v3/ws/<workspace>/bulk_create/提交含cvss4_vector_string的漏洞数据,确认数据库vulnerability表的cvss4_base_score、cvss4_base_severity等字段被正确解析填充(参考 tests/test_api_bulk_create.py);
  3. 授权验证:匿名 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.

项目地址:https://gitcode.com/gh_mirrors/far/faraday
点击查看免费下载
上一篇:Joplin终极缓存优化指南:如何实现笔记性能的爆发式提升
下一篇:从零开始的Metabase插件开发:解锁数据可视化与第三方服务集成新范式

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 17:33:14

XSS三类型本质:反射型、存储型、DOM型攻击面解析

1. 项目概述&#xff1a;为什么DOM型、反射型、存储型XSS不是三种“并列技巧”&#xff0c;而是一张攻击面地图的三个坐标点你打开DVWA靶场&#xff0c;点开XSS&#xff08;Reflected&#xff09;那一关&#xff0c;输入<script>alert(1)</script>&#xff0c;弹窗…

作者头像 李华
网站建设 2026/10/19 16:54:43

Windows下YOLOv3目标检测环境搭建与稳定推理实战

1. 项目概述&#xff1a;为什么在Windows上跑YOLOv3目标检测不是“装个包就完事”你搜到这个标题&#xff0c;大概率正卡在某个环节&#xff1a;PyTorch装不上、CUDA版本对不上、模型加载报错“no module named ‘cv2’”、或者好不容易跑起来了&#xff0c;但一张图要推理12秒…

作者头像 李华
网站建设 2026/10/19 15:08:46

TensorFlow 2.x实战指南:从张量原理到模型训练与部署

1. 项目概述&#xff1a;TensorFlow到底是什么&#xff0c;值得花时间学吗说实话&#xff0c;刚接触深度学习的朋友问我推荐哪个框架&#xff0c;我第一个想到的还是TensorFlow。这倒不是说它一定比所有框架都好&#xff0c;而是它在工程化、部署生态、社区积累上的成熟度&…

作者头像 李华
网站建设 2026/10/18 20:37:56

TensorFlow 2.x实战经验:迁移、训练、部署一站式指南

坦白说&#xff0c;看到"tensorflow"这个标题&#xff0c;我第一反应不是"该从什么基础概念讲起"&#xff0c;而是想聊聊这两年我自己从TensorFlow 1.x迁到2.x的真实经历。2019年那会儿我还在维护着一套用1.x写的图像分类系统&#xff0c;每次训练启动要写…

作者头像 李华
网站建设 2026/10/19 5:04:15

拆解ThreadLocal性能困境:数组索引方案设计与实践

1. 先说结论&#xff1a;ThreadLocal 没那么神&#xff0c;真正快的是数组索引方案最近我把网关里一组高频读写的 ThreadLocal 变量换成了数组索引型本地线程变量&#xff0c;单线程内 set/get 混合压测下来大概快了 2 到 3 倍&#xff0c;接口整体延时也降了一截。这不是什么黑…

作者头像 李华