论点:Bun Runtime 由于其核心采用内存不安全语言(如 Zig/C++)开发,并可能在追求速度和全能性时包含未经充分测试的代码,这为其在生产环境中运行带来了固有的不稳定性和安全风险,极易导致应用甚至整个环境的崩溃。

引言:

Bun 作为一种新兴的 JavaScript 运行时,以其惊人的启动速度、执行性能和集成的全能工具链(运行时、包管理器、打包器)迅速获得了开发者社区的关注。然而,与性能和便利性并存的是对其稳定性和安全性的担忧,尤其是在将其应用于对稳定性和可靠性要求极高的生产环境时。这种担忧主要源于其底层的实现语言选择以及潜在的测试成熟度问题。

分论点一:内存不安全语言带来的底层风险

  1. Zig 和 C++ 的内存管理特性: Bun 的核心部分使用 Zig 和 C++ 等语言编写。与 Rust、Java 或 JavaScript 这样拥有自动垃圾回收或严格内存安全保证的语言不同,Zig 和 C++ 属于内存不安全语言。这意味着开发者需要手动管理内存(分配、释放),对指针的操作权限较高。

  2. 潜在的内存安全漏洞: 手动内存管理的复杂性极大地增加了引入内存安全漏洞的风险,例如:

    • 缓冲区溢出 (Buffer Overflow): 向固定大小的缓冲区写入超出其容量的数据,可能覆盖相邻内存,导致程序行为异常或崩溃。

    • 使用后释放 (Use-after-free): 在释放内存后,代码仍然试图访问该内存区域,可能导致读取到无效数据或写入到已被重新分配给其他用途的内存,引发崩溃或安全问题。

    • 双重释放 (Double Free): 尝试释放同一块内存两次,可能破坏内存管理结构,导致堆损坏和崩溃。

    • 悬空指针 (Dangling Pointer): 指针指向的内存已被释放,但指针本身仍然存在,后续对该指针的访问是不安全的。

  3. 运行时核心的脆弱性: 这些内存安全问题如果存在于 Bun Runtime 的核心代码(如事件循环、模块加载、垃圾回收器的某些部分或系统调用接口)中,任何触发这些漏洞的用户代码或外部请求都可能导致 Bun 进程立即崩溃(如发生段错误 Segmentation Fault)。在生产环境中,这意味着服务中断。

  4. 安全漏洞: 内存安全漏洞不仅会导致崩溃,也是许多严重安全漏洞(如远程代码执行)的根源。攻击者可能利用缓冲区溢出等缺陷,注入恶意代码并在 Bun 进程中执行,从而威胁整个生产环境的安全。

实际使用中的危险

Bun 运行时在实际使用中存在严重问题, 但凡涉及到多线程, 竞争条件时, 极易引发不可恢复的段错误, 致程序崩溃, 在生产环境中

造成毁灭性的影响

以下 Bun 特性为熟知的危险特性, 只要你使用了以下内容, 就可能造成运行时崩溃, 或者其他不可恢复异常, 警告等

  • bun:jsc

  • node:worker_threads

  • Web Worker

  • node:v8

  • node:crypto

  • node:net

  • node:stream

  • node:http2

  • bun install

  • bun compile

为了确保您的项目不被设计, 实现不良的 Bun 运行时摧毁,

请使用更加成熟, 稳定的 nodejs/Node.js 或者 denoland/Deno