Day1发现有分析 jackson 的DriverAdapterCPDS 这个gadget
背景知识
其实是参考【1】大佬上报的CVE-2020-36179
Gadget:
1 | DriverAdapterCPDS |
漏洞复现
gadget流程很简单,但是在复现的时候发现卡在getParentLogger这里,不会执行到getPooledConnection
1 |
|
可见getParentLogger简单粗暴直接throw Exception,直接GG
多次测试发现getParentLogger,getPooledConnection执行顺序并不是有序的,如下:
失败
成功
原理分析
背景知识:jackson反序列化会执行部分getter
getter的产生流程跟踪:
1 | _addMemberMethods:110, AnnotatedMethodCollector (com.fasterxml.jackson.databind.introspect) |
最终观察发现jackson通过 ClassUtil.getClassMethods(cls)获取所有的函数,最终调用的是getDeclaredMethods(),而getDeclaredMethods()返回数组中的元素没有排序,也没有任何特定的顺序,从而导致随机触发。
小结
简单跟踪分析了CVE-2020-36179 这个链,发现2处有意思的点
- jdbc url 可控情况下,利用H2 sql可攻击h2 server()
- getDeclaredMethods 随机特性
拓展思考
- jdbc url可控是个通用问题
- getDeclaredMethods 随机特性有绕过方法吗?
参考
- [1] Al1ex/CVE-2020-36179
- [2] H2 feature