hook缺失导致Oracle部分版本jdk无法拦截目录遍历攻击
xuing opened this issue · 6 comments
xuing commented
xuing commented
CaledoniaProject commented
你好,我看了下全版本的JDK源码
- Linux JDK 6-15 无此函数
- Windows JDK 仅11.X版本存在,其他版本均不存在;从13开始list()直接调用nio了。
对于 Windows + JDK 11 的情况,normalizedList 函数为私有,最终底层调用的nio相关函数也是私有的。JDK需要增加java.base/java.io权限才能反射调用,正常业务不太可能增加这个。
因此整个影响很小,所以暂时不打算增加这个hook。
xuing commented
我是在测试官方测试用例集合的第一个测试用例,使用 File.listFiles 遍历目录
发现的这个问题。
listFiles是一个公开函数,针对此类攻击,目前OpenRasp是在FileHook.java中按照TYPE.DIRECTORY进行检测的。
阅读目前FileHook的代码后,我猜测目前选择挂钩list方法,而不是直接HooklistFiles
方法,是基于以下考虑的
- list方法是public的,可能会被业务直接使用。
- listFiles有多个方法签名,但均会调用list方法。
但Windows+Oracle JDK11情况下,listFiles中直接调用了normalizedList
方法,没有调用list
方法,虽然normalizedList方法是Private的,但业务只要使用到listFiles函数,就不会进入到Hook的检测逻辑当中。
除此之外,Windows+Oracle JDK1.8,也是同样的情况。
Windows+Oracle JDK16,也是同样的情况
我们的结论不同,目前看来,可能是Oracle JDK与OpenJDK的区别。
xuing commented
CaledoniaProject commented
好的,Windows + JDK11 下面,listFiles() 这个是个问题
xuing commented