domingo, 5 de marzo de 2017

MÚLTIPLES VULNERABILIDADES ( ICS ) - SCHNEIDER ELECTRIC - 6

Tratando con servicios SNMP, durante un tiempo junto a mi compañero @bertinjoseb nos planteamos como poder 'Sacarle Jugo' a aquellos OID, con privilegios de escritura. 
Y de esa inquietud nace lo que mas tarde ambos bautizamos con el nombre de 'Cross Protocol Injection'.

Pero de antes de hablar de Vulnerabilidades y otras hierbas, algunas aclaraciones:
SNMP - WALK & SET -
Por norma general al dar con servicios SNMP con 'community' como 'private' nos encontraremos ante la POSIBILIDAD de setear ciertos string. En la mayoría de estos casos, se podrá editar aquellos campos ubicados en los siguientes OID:

iso.3.6.1.2.1.1.4.0   ( System Contact  ) 
iso.3.6.1.2.1.1.5.0   ( System Name     ) 
iso.3.6.1.2.1.1.6.0   ( System Location ) 


Con seguridad encontraremos muchos mas, pero por hoy quedemos con estos 3, como prueba de concepto.

Para consultar estos oid siempre podremos hacer usos de herramientas como SNMPWALK.

Una simple búsqueda en sobre Shodan, nos da la increíble suma de: 2,633,664 host INDEXADOS, corriendo snmp.

Tomemos al azar uno de esos 2.633.664 host y...



Siendo un poco mas objetivo, con respecto al OID que nos interesa


Para editar algun campo (siempre y cuando los permisos habilitados correspondan a los de escritura), nos pasaramemos a la herramienta SNMPSET.  Como veremos su uso es bien sencillo.


Editamos el OID correspondiente al campo 'System Name'


En caso de no tener los privilegios correcto sobre ese OID, al intentar setear algún cambio, con snmpset, tendríamos por consola un lindo mensaje de error. Muestra suficiente para entender que el cambio no se a realizado.

Por otro lado, para estar suficientemente seguro de que el cambio realizado a surgido efecto, volveremos a consultar al OID correspondiente. 



Bien..., se pueden setear algunos campos y eso de que vale?
Como no podía ser de otra forma, en una primera instancia la respuesta la obtuvimos de la mano de varios dispositivo de la firma 'Schneider Electric(Ahora si,entrando en el tema en cuestión )
Desde entonces con @bertinjoseb hablamos de:

CROSS PROTOCOL INJECTION 

La vulnerabilidad radica sobre todos aquellos dispositivos que corren servicios SNMP y HTTP. La otra condición necesaria para terminar de armar nuestro escenario ideal, es que SNMP comparta strings de algunos de sus OIDs, con la aplicación web  (hosteada en el mismo dispositivo) .
   
Dispositivos como 'PowerLogic' de Schneider cumplen esas condiciones.

El fallo radica frente a la posibilidad de explotar un XSS inyectando un payload js, 

HTTP



Los inputs tienen este aspecto


<input class="pm5560Input" type="text" id="systemName" name="sysName" value="PM5560-name" maxlength="16" originalvalue=" "> 

SNMP



1,2,3, POC

Con los elementos antes expuestos ya es posible deducir como explotar la vulnerabilidad  

PAYLOAD JS:  '"onmouseover="alert(2)'

Inyectaremos nuestro Payload JS sobre el OID 1.3.6.1.2.1.1.5.0
esta inyección quedara reflejada permanentemente sobre el campo 'System Name' .


<input class="pm5560Input" type="text" id="systemName" name="sysName" value=" { HERE INJECTION } " maxlength="16" originalvalue=" ">




Como resultado de nuestra prueba de concepto, al pasar el cursos sobre el input, saltara un 'alert'.



y de esta manera conseguimos ejecutar JS, inyectado a través de un protocolo como es SNMP.

El input resultante quedaria asi: 

<input class="pm5560Input" type="text" id="systemName" name="sysName" value=" " onmouseover="alert(2)" maxlength="16" originalvalue=" ">


Nota final

Claramente el mismo xss lo podremos explotar inyectando directamente sobre el input, pero la intención de este post es presentar como novedad la posibilidad de hacerlo inyectando sobre a través un protocolo conocido, como es SNMP. 

En otros post me prometo Payloads mas trabajados. 

Saludos,
@Capitan_Alfa


No hay comentarios.:

Publicar un comentario