#fuzzer #black-box #grammar-based #ast #javascript-parser #behavior

app tree-crasher-javascript

易于使用的基于语法的黑盒模糊测试器

9个不稳定版本 (3个破坏性更新)

0.4.0 2023年7月17日
0.3.0 2023年4月7日
0.2.3 2023年4月1日
0.2.0 2023年3月22日
0.1.2 2023年3月21日

#824 in 编程语言

Download history 107/week @ 2024-04-20 161/week @ 2024-04-27 88/week @ 2024-05-04 82/week @ 2024-05-11 190/week @ 2024-05-18 54/week @ 2024-05-25 110/week @ 2024-06-01 51/week @ 2024-06-08 36/week @ 2024-06-15 81/week @ 2024-06-22 38/week @ 2024-06-29 52/week @ 2024-07-06 106/week @ 2024-07-13 96/week @ 2024-07-20 105/week @ 2024-07-27 79/week @ 2024-08-03

每月398次下载

MIT 许可证

26KB
318

tree-crasher

tree-crasher 是一个易于使用的基于语法的黑盒模糊测试器。它使用 tree-sitter 语法解析多个输入文件,并通过拼接它们的 AST 生成新的文件。

tree-crasher 旨在填补与 Gramatron、Nautilus 和 Grammarinator 等更高级的基于语法的模糊测试器不同的市场空缺。它不是通过完整的、手工编写的语法和复杂的技巧如基于覆盖率的反馈来实现最大覆盖率和漏洞发现,而是通过使用现成的 tree-sitter 语法,并且不需要对目标进行任何仪器化(甚至不需要源代码)来实现最大程度的易用性。简而言之,tree-crasher 希望成为基于语法的模糊测试中的 Radamsa

tree-crasher 使用 treereduce 自动最小化生成的测试用例。

更多信息,请参阅 文档

示例

在阅读这些示例时,请注意模糊测试可能导致不可预测的行为。请在具有内存限制、无网络访问和无重要文件的虚拟机或 Docker 容器中进行模糊测试。

JavaScript解释器

获取一组JavaScript文件并将它们放在 corpus/ 中(例如,使用 此脚本)。然后这里是模糊测试 JerryScriptBoa 的方法

tree-crasher-javascript corpus/ jerry
tree-crasher-javascript corpus/ boa

(默认情况下,tree-crasher 将输入传递给目标的stdin。)

Python的正则表达式引擎

编写 rx.py 如下

import re
import sys
try:
    s = sys.stdin.read()
    r = re.compile(s)
    print(r.match(s))
except:
    pass

corpus/ 中放置一些示例正则表达式。然后

tree-crasher-regex corpus/ -- python3 $PWD/rx.py

rustc

tree-crasher 已在 rustc 中发现许多漏洞。以下是实现方法!命令行上的特殊 @@ 符号被 tree-crasher 生成的文件所替换。

tree-crasher-rust \
  --interesting-stderr "(?m)^error: internal compiler error:" \
  corpus \ 
  -- \
  rustc +nightly --crate-type=lib --emit=mir -Zmir-opt-level=4 @@.rs

(正则表达式语法是 regex crate 中的语法。)

更多示例

查看文档以获取更多示例。

发现的错误

tree-crasher使用tree-splicer生成测试用例,请参阅该项目的README中列出的错误列表。

如果您发现tree-crasher的错误,请告诉我!一个很好的方法是向tree-splicer提交PR以将其添加到README中。

支持的语言

tree-crasher支持9+种语言,有关详细信息,请参阅文档

文档

文档可在网上或本地./doc中找到。

依赖项

~10-20MB
~334K SLoC