常见Java库漏洞汇总
1.ActiveMQ 反序列化漏洞(CVE-2015-5254)
ref:https://www.nanoxika.com/?p=408
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
漏洞触发条件:通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。
漏洞利用过程:
- 构造(可以使用ysoserial)可执行命令的序列化对象
- 作为一个消息,发送给目标61616端口
- 访问web管理页面,读取消息,触发漏洞
运行漏洞环境:环境运行后,ActiveMQ将监听61616和8161两个端口。其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。
访问http://your-ip:8161
即可看到web管理页面,不过这个漏洞理论上是不需要web的。
2.ActiveMQ任意文件写入漏洞(CVE-2016-3088)
ref:https://www.nanoxika.com/?p=412
ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:
- 其使用率并不高
- 文件操作容易出现漏洞
所以,ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启之);在5.14.0版本以后,彻底删除了fileserver应用。在测试过程中,可以关注ActiveMQ的版本,避免走弯路。本漏洞出现在fileserver应用中,漏洞原理其实非常简单,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)。所以,我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。
3.Apache Tomcat 远程代码执行漏洞(CVE-2016-8735)
Tomcat中也使用了JmxRemoteLifecycleListener这个监听器,但是Tomcat并没有及时升级,所以导致了这个远程代码执行漏洞。
此漏洞在严重程度上被定义为Important,而非Critical,主要是因为采用此listener的数量并不算大,而且即便此listener被利用,此处JMX端口访问对攻击者而言也相当不寻常。
影响较小:1)Tomcat默认是没有catalina-jmx-remote.jar包;2)要启用JmxRemoteLifecycleListener包,默认情况下是不启用的
受影响版本:
Apache Tomcat 9.0.0.M1 to 9.0.0.M11
Apache Tomcat 8.5.0 to 8.5.6
Apache Tomcat 8.0.0.RC1 to 8.0.38
Apache Tomcat 7.0.0 to 7.0.72
Apache Tomcat 6.0.0 to 6.0.47
4.Apache Tomcat漏洞 之 CVE-2017-12617_漏洞
影响启用了HTTP PUT的系统(通过将默认servlet的“只读”初始化参数设置为“false”,默认不启用!)受到影响。
如果默认servlet的参数只读设置为false,或者配置了默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的Tomcat版本在所有操作系统上包含潜在危险的远程代码执行(RCE)
ref:https://yq.aliyun.com/ziliao/293207,http://www.freebuf.com/vuls/150203.html
修改 D:\ProgramFiles\Apache Software Foundation\Tomcat 7.0\conf\web.xml 配置文件,增加 readonly 设置为 false ,一定要记得重启下tomcat服务。
4.Spring Security / MVC Path Matching Inconsistency(CVE-2016-5007,越权): ref:0c0c0f
此漏洞影响的Spring Web和Spring Security使用HttpSecurity.authorizeRequests用于URL访问控制的应用。
风险级别:中
漏洞利用:远程
影响:请求授权绕过.例如将用户user提升为管理员权限。越权
http.authorizeRequests() .antMatchers("/resources/**", "/signup", "/about").permitAll().antMatchers("/admin/**").hasRole("ADMIN")
提交user%2f则可以绕过权限控制。主要原因在于security校验时采用了全部匹配,但是spring mvc删除了非法字符,这就变成访问admin了。
也就是校验和实际访问发生了变化。
5.CVE-2016-9879 Encoded "/" in path variables,spring security访问绕过
与CVE-2016-5007类似。
影响范围
条件一:SpringSecurity 3.2.0 - 3.2.9, 4.0.x - 4.1.3, 4.2.0
条件二:部署在IBMWebSphereApplication Server 8.5.x 的容器中.tomcat目前不受影响。
CVE-2016-9879 bypass类似这样
Anapplication that uses the followingintercept URL pattern:
<intercept-urlpattern="/a/b/c"access="PERMISSION_Guest"/>
<intercept-urlpattern="/a/b/1/c"access="PERMISSION_ADMIN"/>
to protectURLs such as:/myapp/a/b/c can be exploited by an attacker that uses aURL of the form:/ctx/a/b;%2f1/c
低权限的攻击者提交/ctx/a/b;%2f1/c,SpringSecurity认为/a/b/c则认为权限符合规则的,但是实际经过Spring MVC框架过滤掉;和解码之后最终的地址变成了/a/b/1/c达到了未授权访问的目的。
Users of Apache Tomcat (all current versions) are not affected by this vulnerability since Tomcat follows the guidance previously provided by the Servlet Expert group and strips path parameters from the value returned by getContextPath(), getServletPath() and getPathInfo() [1].
6.CVE-2016-2173 Remote Code Execution in Spring AMQP: ref:0c0c0f
消息系统各大公司常见基础框架之一,之前在black hat usa 2016,code white团队的@matthias_kaiser介绍了主流消息系统的反序列化漏洞。
受影响的漏洞版本:
Apache ActiveMQ 5.12.0 and earlier
HornetQ 2.4.0 and earlier
Oracle OpenMQ 5.1 and earlier
IBM Websphere MQ 8.0.0.4 and earlier
Oracle Weblogic 12c and earlier
Pivotal RabbitMQ JMS client 1.4.6 and earlier
IBM MessageSight MessageSight V1.2 JMSClient and earlier
SwiftMQ JMS client 9.7.3 and earlier
Apache ActiveMQ Artemis client 1.2.0 and earlier
Apache Qpid JMS client 0.9.0 and earlier
Amazon SQS Java Messaging Library 1.0.0 and earlier
Spring AMQP简介:Spring AMQP 是基于 Spring 框架的 AMQP 消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO。同时有 Java 和 .NET 的版本。
Java漏洞版本: <spring.amqp.version>1.5.4.RELEASE</spring.amqp.version>
7.Jackson enableDefaultTyping 方法反序列化代码执行漏洞(CVE-2017-7525)
Jackson是一个开源的Java序列化与反序列化工具,可以将java对象序列化为xml或json格式的字符串,或者反序列化回对应的对象,由于其使用简单,速度较快,且不依靠除JDK外的其他库,被众多用户所使用。Jackson官方已经发布补丁修复了该开源组件。
由于Jackson在处理反序列的时候需要支持多态,所以在反序列的时候通过指定特定的类来达到实现多态的目的。这个特性默认是不开启的。
使用条件:
- Jackson Version 2.7.* < 2.7.10,Jackson Version 2.8.* < 2.8.9
- web应用必须应用jackson来反序列化json数据。也即必须有用户恶意的输入
- 必须开启多态(默认不开启)
1)jackson序列化:All data binding starts with a com.fasterxml.jackson.databind.ObjectMapper
instance, so let's construct one:
ObjectMapper mapper = new ObjectMapper(); // create once, reuse,利用objectMapper来序列化
The default instance is fine for our use -- we will learn later on how to configure mapper instance if necessary. Usage is simple:
MyValue value = mapper.readValue(new File("data.json"), MyValue.class);
value = mapper.readValue(new URL("http://some.com/api/entry.json"), MyValue.class);
value = mapper.readValue("{\"name\":\"Bob\", \"age\":13}", MyValue.class);
2)反序列化And if we want to write JSON, we do the reverse
mapper.writeValue(new File("result.json"), myResultObject);最终调用newinstance
byte[] jsonBytes = mapper.writeValueAsBytes(myResultObject);
String jsonString = mapper.writeValueAsString(myResultObject);
3)Jackson多态类型绑定
为了让Jackson支持多态,Jackson官方提供了几种方式,下面介绍两种常用方式(https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization)
第一种:全局Default Typing机制,启用代码如下:
objectMapper.enableDefaultTyping(); // default to using DefaultTyping.OBJECT_AND_NON_CONCRETE
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
这是一个全局开关,打开之后,在持久化存储数据时会存储准确的类型信息。
第二种:为相应的class添加@JsonTypeInfo注解
public ObjectMapper enableDefaultTyping(DefaultTyping dti) {
return enableDefaultTyping(dti, JsonTypeInfo.As.WRAPPER_ARRAY);
}
通过阅读源码也能发现,全局Default Typing机制也是通过JsonTypeInfo来实现的。下面来看一个简单的示例:
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.WRAPPER_ARRAY)
class Animal { } 在超类Animal上加上一段@JsonTypeInfo,所有Animal的子类反序列化都可以准确的对于子类型。
这段注解什么意思呢?JsonTypeInfo.Id.CLASS是指序列化或者反序列时都是全名称,如org.codehaus.jackson.sample.Animal
,JsonTypeInfo.As.WRAPPER_ARRAY
意为使用数组表示,如
[
"com.fasterxml.beans.EmployeeImpl",
{
... // actual instance data without any metadata properties
}
]则在反序列化时,告诉ObjectMapper将该json字符串转化为EmployeeImpl对象。而该字符串对象类型用户可控。 ref:https://www.seebug.org/vuldb/ssvid-92962。漏洞简单利用
https://paper.seebug.org/473/
http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html:jackson用法
常见Java库漏洞汇总的更多相关文章
- 应用安全 - 工具|框架 - Java - Jenkins - 漏洞 - 汇总
未授权访问 /script /manage/asynchPeople//config.xml CVE-2015-8103 Date 2015.11 类型反序列化导致远程命令执行 影响范围Jenkins ...
- java反序列化漏洞专项
背景条件:java的框架,java的应用程序,使用序列化,反序列化操作非常多.在漏洞挖掘中,代码审计中,安全研究中,反序列化漏洞是个重点项,不可忽视.尤其是java应用程序的rce,10个里面有7个是 ...
- [Android] Android 常见第三方库汇总地址
Android 常见第三方库汇总地址 https://github.com/wasabeef/awesome-android-libraries List of Android Libraries T ...
- Java第三方工具库/包汇总
一.科学计算或矩阵运算库 科学计算包: JMathLib是一个用于计算复杂数学表达式并能够图形化显示计算结果的Java开源类库.它是Matlab.Octave.FreeMat.Scilab的一个克隆, ...
- Java反序列化漏洞通用利用分析
原文:http://blog.chaitin.com/2015-11-11_java_unserialize_rce/ 博主也是JAVA的,也研究安全,所以认为这个漏洞非常严重.长亭科技分析的非常细致 ...
- 史上最全的 Java 新手问题汇总
史上最全的 Java 新手问题汇总 Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- Lib之过?Java反序列化漏洞通用利用分析
转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...
随机推荐
- JAVA实现概率计算(数字不同范围按照不同几率产生随机数)
程序中经常遇到随机送红包之类的情景,这个随机还得指定概率,比如10%的机率可以得到红包.那么java怎么实现一个简单的概率计算了,见如下例子: int randomInt = RandomUtils. ...
- 《剑指offer》— JavaScript(30)连续子数组的最大和
连续子数组的最大和 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好 ...
- 《剑指offer》— JavaScript(26)二叉搜索树与双向链表
二叉搜索树与双向链表 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 思路 递归思想:把大问题转换为若干小问题: 由于Ja ...
- [六字真言]2.嘛.异常定制和通用.md
幻世当空 恩怨休怀 舍悟离迷 六尘不改 且怒且悲且狂哉! 最近一直在循环的一首歌! 丰富自己,比取悦他人更有力量.种下梧桐树,引得凤凰来.你若盛开,蝴蝶自来! 言归正传! 言归正传! 不要去大包大揽 ...
- Spark记录-Scala数组
Scala提供了一种数据结构叫作数组,数组是一种存储了相同类型元素的固定大小顺序集合.数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用. 可以声明一个数组变量,例如:numbers,使 ...
- 设计模式之Mixin模式
介绍 mixin模式就是一些提供能够被一个或者一组子类简单继承功能的类,意在重用其功能.在面向对象的语言中,我们会通过接口继承的方式来实现功能的复用.但是在javascript中,我们没办法通过接口继 ...
- NOI2001 方程的解数(双向搜索)
solution 一道非常经典的双向搜索题目,先将前3个未知数枚举一遍得到方程的前半部分所有可能的值,取负存入第一个队列中再将后3个未知数枚举一遍,存入第二个队列中.这样我们只要匹配两个队列中相同的元 ...
- ZYNQ. DMA基本用法
DMA环路测试 vivadoblock zynq7 + dma +fifo sdk 中可以导入 demo demo 中 默认都是 一个字节8bit数据 的测试程序. 如果是其他长度的数据,不仅要修改数 ...
- Parameters.Add和Parameters.AddWithValue
因为vs2013没有更新update 5所以Parameters.Add可以用Parameters.AddWithValue赋值无效 更新后可以. Parameters.AddWithValue的底层 ...
- vs中如何统计整个项目的代码行数
在一个大工程中有很多的源文件和头文件,如何快速统计总行数? ------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shift ...