常見Java庫漏洞彙總

1.ActiveMQ 反序列化漏洞(CVE-2015-5254)

ref:https://www.nanoxika.com/?p=408html

Apache ActiveMQ 5.13.0以前5.x版本中存在安全漏洞,該漏洞源於程序沒有限制可在代理中序列化的類。遠程攻擊者可藉助特製的序列化的Java Message Service(JMS)ObjectMessage對象利用該漏洞執行任意代碼。java

漏洞觸發條件:經過web管理頁面訪問消息並觸發漏洞這個過程須要管理員權限git

漏洞利用過程:github

  1. 構造(可使用ysoserial)可執行命令的序列化對象
  2. 做爲一個消息,發送給目標61616端口
  3. 訪問web管理頁面,讀取消息,觸發漏洞

參考連接:https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdfweb

運行漏洞環境:環境運行後,ActiveMQ將監聽61616和8161兩個端口。其中61616是工做端口,消息在這個端口進行傳遞;8161是Web管理頁面端口。spring

訪問http://your-ip:8161便可看到web管理頁面,不過這個漏洞理論上是不須要web的。json

 

2.ActiveMQ任意文件寫入漏洞(CVE-2016-3088)api

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請求對其中存儲的文件進行讀寫操做,其設計目的是爲了彌補消息隊列操做不能傳輸、存儲二進制文件的缺陷,但後來發現:tomcat

  1. 其使用率並不高
  2. 文件操做容易出現漏洞

因此,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用法
相關文章
相關標籤/搜索