freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

特定版本Vaadin组件反序列化漏洞
2025-01-05 15:30:30
所属地 四川省

影响版本

仅限于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)反射调用函数

image-20241218215428643.png

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

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

image-20241218215737520.png

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

image-20241218223844828.png

initialize方法

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

image-20241218224140480.png

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

image-20241218224406412.png

image-20241218230615304.png

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

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

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

# 网络安全 # web安全 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录