Java安全-深入研究BeanValidation的RCE漏洞
在学习Java的表达式的时候,学习了Thymeleaf造成模板注入漏洞,随后又出现了类似的注入问题,在验证参数的错误消息中。漏洞简单描述就是,用户控制器的Java Bean属性(来自于HTTP请求) )被连接到Bean Validation的错误信息中,错误信息会被处理,其中的EL表达式会被执行,最后插入到错误信息并返回。
这里面可以提取出重要信息:
使用 Java Bean 验证 验证
验证用户可控的 Java Bean
Java Bean 的不合法属性回显到错误消息中(从回显处fuzz模板注入
Bean 验证
这是在JSR(303)提出的,是Java定义的一套基于解的数据规范验证。现在已经到了JSR(380)的Bean Validation 2.0版本。
使用他可以简单的在需要的类或者属性上加上对应的注解,就可以使用内置或者自定义验证器对Bean进行验证,优势就是只需要约束一次,而不用在需要验证的所有接口处加入大量的if-else判断,方便代码维护,简化代码量。
写一个springboot例子bean validation。
加入依赖,Hibernate Validator 是 Bean Validation 的实现,其中包含了,jakarta是java改名而来的。
在学习Java的表达式的时候,学习了Thymeleaf造成模板注入漏洞,随后又出现了类似的注入问题,在验证参数的错误消息中。漏洞简单描述就是,用户控制器的Java Bean属性(来自于HTTP请求) )被连接到Bean Validation的错误信息中,错误信息会被处理,其中的EL表达式会被执行,最后插入到错误信息并返回。
这里面可以提取出重要信息:
使用 Java Bean 验证 验证
验证用户可控的 Java Bean
Java Bean 的不合法属性回显到错误消息中(从回显处fuzz模板注入
Bean 验证
这是在JSR(303)提出的,是Java定义的一套基于解的数据规范验证。现在已经到了JSR(380)的Bean Validation 2.0版本。
使用他可以简单的在需要的类或者属性上加上对应的注解,就可以使用内置或者自定义验证器对Bean进行验证,优势就是只需要约束一次,而不用在需要验证的所有接口处加入大量的if-else判断,方便代码维护,简化代码量。
写一个springboot例子bean validation。
加入依赖,Hibernate Validator 是 Bean Validation 的实现,其中包含了,jakarta是java改名而来的。