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

2025-01-16 1 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(#换成@)

相关文章

揭秘Gamaredon APT的精准攻击:针对乌克兰调查局的网络钓鱼与多阶段攻击
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&OSS存储&负载均衡&CDN加速&反向代理&WAF防护
Windows远程桌面网关出现重大漏洞
信安常用术语汇总
python分享 | 写出自己的第一个exp

发布评论