特定版本Vaadin组件反序列化漏洞

2025-01-16 137 0

影响版本

仅限于7.7.14版本

<dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-server</artifactId>
            <version>7.7.14</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-shared</artifactId>
            <version>7.7.14</version>
        </dependency>
    </dependencies>

流程分析

sink点

这里选择逆向进行分析,通常使用静态扫描工具被标注的也就是sink点的位置,判断可控点和我们的sink点是否形成一条完整的通路,若存在有完整的通路,则表明存在漏洞

vaadin相关依赖已知的sink点在NestedMethodProperty#getValue方法中,其中存在有m.invoke(object)反射调用函数

特定版本Vaadin组件反序列化漏洞插图

其中该反射调用中的object来自属性instance

全局搜索该属性的写入位置,其在NestedMethodProperty类的构造函数和setInstance均能对其进行写入,说明其可控

特定版本Vaadin组件反序列化漏洞插图1

而在反射调用方法时,是遍历getMethods的每一个方法进行调用,通过查找该属性的写入,发现其在initialize方法中存在写入

特定版本Vaadin组件反序列化漏洞插图2

initialize方法

如果你还记得的话,在NestedMethodProperty的构造方法对instance进行赋值后,同样会调用initialize方法进行初始化

特定版本Vaadin组件反序列化漏洞插图3

下面简单分析一下该方法的流程

特定版本Vaadin组件反序列化漏洞插图4

特定版本Vaadin组件反序列化漏洞插图5

  1. initialize方法接受两个参数,分别为beanClasspropertyName
    这里传入的属性名参数允许有多个属性,不同的属性名之间通过.进行连接,在initialize方法对其进行处理时,首先处理propertyName,将其通过.分割成一个字符串数组simplePropertyNames,代表一个一个的“属性名”

  2. 紧接着,将会遍历这个字符串数组simplePropertyNames,并将获取的beanClass和propertyName复制到lastSimplePropertyNamelastClass

  3. 之后使用上面提取的两个参数,通过调用MethodProperty.initGetterMethod方法获取对应属性的getter方法


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Shellcode加密混淆技术全解析
绕过WPS Office沙箱和Windows Defender的恶意宏攻击分析
Web源码泄露姿势 | 如何寻找泄露源码及黑灰源码
利用隐形Unicode字符的钓鱼攻击:一种新的JS混淆技术
AI比赛大杀器XGBoost结合ast抽象语法树批量识别恶意php文件
语音网络钓鱼新动向:DarkGate恶意软件入侵案例剖析

发布评论