Seguridad

Vulnerabilidad de código malicioso embebido en Vision1210 de Unitronics

Como parte de una investigación que estaba realizando sobre unos PLCs de Unitronics me encontré con este modelo V1210 que es PLC y HMI. 

La curiosidad en estos casos te hace realizar pruebas que van más allá del simple análisis, por ello profundizando descubrí que es posible cargar código malicioso remotamente en este dispositivo y en todos aquellos modelos que permitan usar el protocolo PCOM de este fabricante por el puerto 20256. 

Como se puede apreciar en la siguiente imagen, después de un tiempo realizando pruebas, se logra cargar el código en base64: 

Estos dispositivos Unitronic V1210 tienen unas tablas para almacenar información llamadas DataTables. Al realizar un script en Python que ataque el protocolo PCOM se consigue escribir Strings en estas DataTables de manera remota y sin autenticación. Esto conlleva la posibilidad de cargar un String en Base64. Este String puede contener un payload malicioso. Una vez cargado este payload, se realiza una petición de lectura sobre la tabla de datos (DataTable), leyendo así los valores introducidos previamente y consiguiendo ejecutar el código en la máquina cliente.

Esta situación es potencialmente muy peligrosa, dado que un actor malicioso puede alojar código de cualquier tipo que puede ser usado para una fase posterior enfocada al despliegue de malware.

A continuación, muestro los pasos para conseguirlo:

Como se aprecia en la consola de Windows de la izquierda, se logra cargar el código en base64 “IGxzOyBjZCAuLjsgcHdk” que en la DataTable del PLC se aloja como [IGxz][OyBj][ZCAu][Ljsg][cHdk].
Este código almacenado es solicitado más abajo en la función ReadDatatable en el código y descodificado para ser ejecutado en la máquina cliente.

Como se puede apreciar se hace el ls, para listar comandos en la máquina cliente (en este caso mi máquina). Esto verifica que estos dispositivos permiten alojar código arbitrario, subido remotamente por un actor no autorizado, sin un mecanismo de autenticación o verificación que evite la intrusión de código malicioso. Esto abre la puerta a la escritura de payloads más complejos que permitan a un malware alojar partes de su código en estos dispositivos Unitronics y actualizarse o recibir/almacenar información en ellos. 

A raíz de esta investigación y considerando que esto era un fallo grave en la seguridad de Unitronic, solicité a INCIBE que se pusiera en contacto con la empresa afectada.

INCIBE ha considerado que este fallo debe catalogarse como CVE-2023-2003 categorizado critical con CVSS v3.1 base score: 9.1. CVSS vector
string: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H. Vulnerability type: CWE-506: Embedded Malicious Code.

Referencias:

https://www.incibe.es/incibe-cert/alerta-temprana/avisos-sci/vulnerabilidad-de-codigo-malicioso-embebido-en-vision1210-de-unitronics

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-2003

Exploit

https://github.com/Hackplayers/hpystools/blob/main/unitronic_upload_code.py

Espero que este POC os haya resultado útil y hayáis disfrutado con su lectura tanto como yo investigando y haciendo pruebas sobre él. 

Contribución gracias a Carlos Antonini

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.