thomasleplus/java-memory-safety

GitHub: thomasleplus/java-memory-safety

一份关于 Java 内存安全极限的研究,揭示语言与 JVM 保护机制可被绕过的条件与场景。

Stars: 0 | Forks: 0

# Java 内存安全 一项关于 Java 内存安全极限的研究。 [![Maven](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b84b9f4094073102.svg)](https://github.com/thomasleplus/java-memory-safety/actions?query=workflow:"Maven") [![NPM](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d4a897ae70073103.svg)](https://github.com/thomasleplus/java-memory-safety/actions?query=workflow:"NPM") ## 目标 本项目的目的是研究 Java [内存 安全](https://en.wikipedia.org/wiki/Memory_safety) 的极限。Java 语言和 Java 虚拟机(JVM)提供了强大的机制来防止开发者错误管理内存。所有 Java 语言中的数组原语都带有边界检查,以防止缓冲区溢出等问题。语言不包含原始指针类型来 访问任意内存以防止内存访问违规(可怕的段错误)。JVM 的垃圾回收器减轻了悬空指针的 风险并减少了内存泄漏。 但 Java SDK 和第三方库提供了绕过这些保护的方法,以允许开发者探索常规 Java 应用程序 能力的极限(例如高效地操作大量数据)。Java 中的自管理内存通常被称为堆外内存(尽管 并非所有堆外内存都由应用程序管理,部分也由 JVM 自身使用)。在与非 Java 库(如操作系统库)交互时,堆外内存的使用也是必需的,以便交换数据。 ## 演示 我曾在 [BSides London 2025](https://bsides.london/bsides-london-2025) 会议上以演讲形式展示了这项研究。 你可以观看 [录像](https://www.youtube.com/watch?v=xy46UYWCo2E) 或获取 [幻灯片](https://thomasleplus.github.io/java-memory-safety/bsides-london-2025)。 还有一份更长的 [幻灯片](https://thomasleplus.github.io/java-memory-safety/) 版本。 ## 代码 [`unsafe`](unsafe/) 目录包含各种代码示例,展示如何**不**编写 Java 代码。正如其名称所暗示的,该目录中的代码并不安全,绝不能用于除说明本研究要点之外的任何目的。所有示例均可作为概念验证运行。它也可用于使用静态应用程序安全测试(SAST)工具检测内存安全问题的能力进行基准测试。 [`safe`](safe/) 目录包含更安全的替代实现。 [`exploit`](exploit/) 目录包含用于自动化利用上述不安全实现的脚本。这些代码也可用于与安全实现进行对比测试。 ## 扫描器 关于使用各种代码扫描工具检测不安全类的方法指导: - [Checkstyle](checkstyle/) - [PMD/Codacy](pmd/) - [Semgrep](semgrep/) - [SonarQube](sonar/) - [SpotBugs](spotbugs/) [`reports`](reports/) 目录包含在研究本项目过程中收集的一些数据。 ## 结果 本研究的结果在本文档中分享,关键要点已发布在 OSSF 内存安全特别兴趣组(SIG)的最佳实践系列中(尤其是 [内存安全默认语言](https://github.com/ossf/Memory-Safety/blob/main/docs/best-practice-memory-safe-by-default-languages.md) 和 [内存安全默认语言与非内存安全默认语言之间的交互](https://github.com/ossf/Memory-Safety/blob/main/docs/best-practice-interfacing.md))。 ## 安全性 请阅读 [SECURITY.md](SECURITY.md) 了解我们的安全策略以及如何报告安全漏洞。 ## 行为准则 请阅读 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) 了解我们的行为准则。 ## 许可证 本项目根据 [LICENSE](LICENSE) 文件中规定的条款进行授权。
标签:Cilium, Java SDK, JS文件枚举, JVM, Maven, NPM, Off-Heap Memory, 内存安全, 内存安全研究, 内存泄漏, 内存管理, 内存绕过, 内存防护, 后端开发, 堆外内存, 开发实践, 技术研究, 指针安全, 操作系统交互, 数据交换, 漏洞验证, 第三方库, 缓冲区溢出, 边界检查