[repost] MÚLTIPLES VULNERABILIDADES ( ICS ) - SCHNEIDER ELECTRIC - 6

 Tratando con servicios SNMP, durante un tiempo me plantee como poder 'Sacarle Jugo' a aquellos OID, con privilegios de escritura. 

Y de esa inquietud nace lo que mas tarde nombre 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 de2,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 hablo de  una técnica a la que llamo :

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  (idealmente 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 tag HTML con llamadas a eventos propios de javcascript. Si estoy hablando de un clasico XSS

HTTP



Los inputs tienen este aspecto


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

SNMP



1,2,3, POC

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

PAYLOAD:  '"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, se disparara el evento '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 a través un protocolo conocido, como es SNMP. 


Saludos,
@Capitan_Alfa

Comentarios

Entradas populares de este blog