Descubriendo vulnerabilidades tradicionales en sistemas ICS

Recordarán que en un post anterior, titulado La odisea de (intentar) hacer las cosas bien…, les daba los detalles del tortuoso camino que he tenido que atravesar desde el descubrimiento de una vulnerabilidad hasta su publicación. Dado que la vulnerabilidad ya es pública (véase Advisory (ICSA-14-203-01), Omron NS Series HMI Vulnerabilities), es el momento de hablarles de ella. Aunque lo cierto es que la publicación de esta entrada, tras unos 10 meses de espera, estaba ya previamente planificada.

Las vulnerabilidades que les comento fueron encontradas en el NS15 versión 3.19 (aunque desconozco si otras versiones están afectadas), un HMI de la marca OMRON.

La primera de ellas es un XSS persistente que permitiría inyectar código malicioso a través del formulario de configuración, concretamente en el parámetro “Page Title”, que se encarga de modificar el título de las páginas web del sistema. No obstante, para aprovecharse de ella, el atacante deberá estar autenticado en el sistema. Sin embargo…

Cuando el sistema almacena todas las opciones y sus valores, se puede comprobar como los valores introducidos en el formulario de configuración se transmiten mediante método “GET”, apareciendo todos los parámetros en la barra de navegación. Como no existe ningún parámetro que haga de token, un atacante podría aprovechar esta vulnerabilidad de tipo CSRF y crear una URL que permitiese cambiar la configuración del sistema HMI.

Aunque en un primer lugar ambas vulnerabilidades pueden parecer más bien simples e incluso irrelevantes, de explotarse en un sistema crítico los resultados podrían ser devastadores.

Imaginemos que un atacante decide realizar un ataque dirigido contra el operario que se encarga de controlar el sistema HMI. Para ello, el atacante le enviará un enlace que, aprovechándose del CSRF, inyecte un payload que aproveche la vulnerabilidad XSS. En este caso, la finalidad del payload será la de suplantar la página web de control por otra.

De este modo el atacante podría conseguir que el operario modificase el estado del sistema a partir de una información falsa (escogida por el atacante para sus propios propósitos). En otro escenario, si el atacante consiguiese atacar con éxito el sistema, el ataque resultaría invisible para el operador, a cuyos ojos todo estaría en perfecto estado. Algo, que si no recuerdo mal, también realizaba Stuxnet en su día.