2个版本
0.1.1 | 2023年6月28日 |
---|---|
0.1.0 | 2023年6月28日 |
#410 在 编程语言 中
205KB
4.5K SLoC
概述
漏洞可达性 是一个用于开发工具的库,用于确定给定的漏洞是否可达。由 Phylum 提供给开源社区,以帮助减少假阳性并增加软件开发者的信号与噪声比。
它是如何工作的?
漏洞可达性 是一个用 Rust 编写的静态分析库,它利用 tree-sitter
进行解析。目前它支持 JavaScript。
它构建了一个包及其传递依赖项的源代码的访问图,然后使用它来搜索到已知漏洞标识符节点的路径。
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
vuln-reach = { git = "https://github.com/phylum-dev/vuln-reach" }
示例
以下是一个示例,说明您如何确定包中的一个标识符节点是否可以从另一个包中访问。
use vuln_reach::javascript::package::reachability::VulnerableNode;
use vuln_reach::javascript::package::resolver::PackageResolver;
use vuln_reach::javascript::package::Package;
use vuln_reach::javascript::project::Project;
// Build a package resolver.
let package_resolver = PackageResolver::builder()
.with_package("path-scurry", Package::from_tarball_path("./tarballs/path-scurry-1.6.1.tgz"))
.with_package("lru-cache", Package::from_tarball_path("./tarballs/lru-cache-7.14.1.tgz"))
.with_package("minipass", Package::from_tarball_path("./tarballs/minipass-4.0.2.tgz"))
.build();
// Build a project from the package resolver.
let project = Project::new(package_resolver);
// Define a target node.
let vulnerable_node = VulnerableNode::new("lru-cache", "index.js", 1017, 17, 1017, 24);
// Compute the reachability graph.
let reachability = project.reachability(&vulnerable_node);
// Find a path to the vulnerable node, starting from the given package.
let path = reachability.find_path("path-scurry");
要找出您项目的传递依赖项,您可以使用 Phylum!
有关使用方法的更完整示例,请参阅 cli。
贡献
您如何添加对其他语言的支持?
目前,代码库与 JavaScript 的耦合相对紧密。正在进行计划,将非语言特定部分抽象出来,以便用于所有语言。
添加对新的语言支持需要以下步骤
- 将相关的 tree-sitter 解析器添加到
build.rs
。 - 在
vuln-reach
包的顶层创建您的语言的模块目录。 - 实现语言的导入和导出抽象。
- 为您的语言实现 访问概念 -- 这可能只是“函数调用”的等价,也可能是必要的复杂程度。
商业许可
如果您希望在商业项目中使用 vuln reach
并需要不同的许可协议,请与 [email protected] 联系。
依赖项
~6–17MB
~235K SLoC