위협 요약
2026년 8월 7일 미국 국토안보부(CISA)는 Progress Kemp LoadMaster의 명령주입 취약점 CVE-2026-8037을 KEV(Known Exploited Vulnerabilities) 카탈로그에 등록했다. NVD가 부여한 CVSS 점수는 9.8(Critical)이며, CNA(Progress)는 인접 네트워크 기반 공격을 가정해 9.6을 평가했다. 이 취약점은 인증 없는 원격 코드 실행(RCE)이 가능하도록 하며, Zero Day Initiative가 2026년 6월 9일 ZDI-26-342 고지문을 공개한 이후 eSentire TRU가 실제 악용 시도 활동을 감지해 왔다. CISA는 랜섬웨어 캠페인 관계를 아직 확인하지는 못했으나(BOD 26-04), 조치 기한을 8월 10일로 정해 긴급 패치를 요청하고 있다.
취약점 개요
CVE-2026-8037은 Progress(구 Kemp Technologies) LoadMaster 로드 밸런서의 API 인증 처리 루틴에 존재하는 미초기화 힙 메모리 취약점이다. 이 취약점을 통해 공격자는 LoadMaster API가 활성화된 경우 인증 단계 없이 임의의 운영체제 명령어를 실행할 수 있다.
- CVE ID: CVE-2026-8037
- CVSS: NVD 9.8(Critical, AV:N) / CNA 9.6(Critical, AV:A)
- 취약점 유형: OS 명령주입 / 원격 코드 실행(RCE)
- 인증: 불필요(Pre-Authentication)
- 발견자: Jacky Yang, Syed Ibrahim Ahmed (CNA credits)
- ZDI: ZDI-26-342 (2026년 6월 9일 공개)
- 공식 처리일: 2026년 6월 4일 (벤더에 보고: 2026년 4월 15일)
| 항목 | 정보 |
|---|---|
| LoadMaster 영향 버전(GA) | 7.2.60.0 이상 7.2.63.2 미만 |
| LoadMaster 패치 버전(GA) | 7.2.63.2 |
| LoadMaster 영향 버전(LTSF) | 7.2.45.12 이상 7.2.54.18 미만 |
| LoadMaster 패치 버전(LTSF) | 7.2.54.18 |
| ECS Connections Manager 영향 버전 | GA 7.2.60.0 이상 7.2.63.2 미만 |
| Object Scale Connection Manager 영향 버전 | GA 7.2.60.0 이상 7.2.63.2 미만 |
| MOVEit WAF 영향 버전 | GA 7.2.60.0 이상 7.2.63.2 미만 |
| CISA KEV 등재일 | 2026년 8월 7일 |
| 조치 기한 | 2026년 8월 10일 (BOD 26-04) |
공식 CVE.org CNA 레코드에 따르면 LoadMaster는 GA V7.2.60.0 이상 7.2.63.2 미만 및 LTSF V7.2.45.12 이상 7.2.54.18 미만이 영향이다. ECS Connections Manager, Object Scale Connection Manager, MOVEit WAF는 GA 7.2.60.0 이상 7.2.63.2 미만만 명시된다. NVD CPE는 LoadMaster를 7.2.55.0~7.2.63.1 범위, 별도(Bundled) 구성품을 7.2.54.17 이하 범위로 기록하지만, 정확한 영향 판단을 위해서는 Progress CNA 기준을 우선 참조해야 한다.
기술적 분석
취약점 원인과 작동 방식
CVE-2026-8037의 핵심은 escape_quotes() 함수에 있는 두 가지 치명적 결함이다. 이 함수는 /accessv2 엔드포인트에 도착하는 요청에서 apiuser와 apipass JSON 필드를 가져와 단일 인용부호(single quote)가 포함된 쉘 명령어 인수로 안전하게 감싸는 역할을 한다. 정상 동작 시 다음과 같은 명령어를 구성한다.
validuser -b <backend> -u '<apiuser>' -p '<apipass>'
이 명령어는 system() 함수를 통해 직접 실행된다.
escape_quotes()는 다음 두 가지 근본적인 버그를 가지고 있다.
첫째, malloc() 사용으로 인한 미초기화 힙 메모리 문제다. 입력에 단일 인용부호가 있으면 malloc(3 * (strlen(input) + 1) + 29)로 버퍼를 할당한다. malloc은 할당된 메모리를 0으로 초기화하지 않으므로, 이전에 해제된 힙 청크의 잔여 데이터가 남아 있다.
둘째, NULL 종결자 누락이다. 함수가 이스케이프된 문자열의 끝에 NULL 바이트를 생성하지 않는다. 이로 인해 할당된 버퍼의 끝 너머로 읽기가 발생한다.
| 입력에 단일 인용부호 포함 여부 | 동작 | 결과 |
|---|---|---|
| 없음 | 원래 포인터 그대로 반환 | 새 버퍼 할당 없음, 문제 없음 |
| 있음 | malloc()으로 새 버퍼 할당 → 이스케이프된 문자열 복사 |
NULL 종결 없음 → 미초기화 힙 메모리 노출 |
악용 메커니즘: 힙 스프레이를 통한 명령어 주입
공격자는 여러 HTTP 요청을 동시에 보내어 힙 메모리를 원하는 데이터로 스프레이한다. escape_quotes()가 malloc()을 통해 이전에 해제된 힙 청크를 재사용하면, 스프레이된 데이터가 이스케이프 함수의 반환값에 포함된다.
실제 취약 경로는 다음과 같다. escape_quotes()가 NUL 미종결 버퍼를 반환하면, 상위 함수에서 이를 %s 포맷 문자열에 맞춰 __sprintf_chk가 명령 문자열 버퍼에 복사한다. __sprintf_chk는 NUL 바이트를 만나기 전까지 읽기를 계속하므로, 이스케이프된 버퍼 끝을 넘어 인접 힙 청크에 있는 공격자가 스프레이한 데이터까지 명령 문자열에 포함시킨다. 이렇게 구성된 문자열은 system() 함수에 전달되어 임의 명령어가 실행된다.
escape_quotes() → NUL 미종결 버퍼 반환
→ __sprintf_chk("%s", 버퍼) → NUL까지 읽음 → 인접 힙 데이터 포함
→ system(명령 문자열) → 임의 코드 실행
공격 버퍼는 다음과 같은 형태로 구성된다.
{
"apiuser": "<단일 인용부호 포함 힙 스프레이 데이터>",
"apipass": "<단일 인용부호 포함 힙 스프레이 데이터>"
}
apiuser와 apipass 필드에 단일 인용부호를 포함해 escape_quotes()의 malloc 분기를 트리거한다. 단일 인용부호 하나당 4바이트(\')로 이스케이프되므로, 여러 개의 인용부호를 사용하여 할당된 버퍼의 앞부분(0x10바이트, malloc 메타데이터 영역)을 빠져나갈 수 있다. 이렇게 하면 힙 메타데이터에 포함된 NUL 바이트가 제거되고, __sprintf_chk가 인접 청크의 스프레이 데이터까지 읽어서 명령 문자열에 포함한다.
WatchTowr Labs는 실제 PoC에서 apiuser 필드에 4개의 단일 인용부호('''')를 보내 16바이트를 생성하고, 나머지 JSON 필드(g0~g63)를 통해 '; cat /etc/passwd # 페이로드를 힙에 스프레이하는 방식을 시연했다.
{
"cmd": "getall",
"apiuser": "''''",
"apipass": "BBBBB",
"g0": "AAAAAAAAAAAAAAAA'; cat /etc/passwd #",
"g1": "AAAAAAAAAAAAAAAA'; cat /etc/passwd #",
"...": "..."
}
실제 악용 현황
Zero Day Initiative가 2026년 6월 9일 ZDI-26-342 고지문을 공개한 후, eSentire TRU는 6월 29일부터 실제 악용 시도 활동을 감지하기 시작했다. eSentire는 감지 결과 성공 사례는 확인되지 않았으며, "exploitation was not successful"이라고 서술했다. PoC exploit code의 유출 이후 공격 증가가 예상됨을 명시했다.
확인된 IOC 공격자 IP는 다음과 같다.
- 192.42.116.58
- 192.42.116.105
- 146.70.139.154
패치 분석
Progress는 7.2.63.2 버전에서 escape_quotes() 함수에 두 가지 수정을 적용했다.
첫째, malloc을 calloc로 변경했다. calloc(1, 4 * (strlen(input) + 1) + 28)으로 바꿔 할당된 메모리가 0으로 초기화되어 잔여 데이터 노출을 방지한다. 할당 크기도 3배에서 4배로 증가시켰다.
둘째, NULL 종결자 추가다. 루프 종결 후 *end = 0을 통해 이스케이프된 문자열의 끝에 NULL 바이트를 명시적으로 생성해 Out-of-bounds 읽기를 차단한다.
패치는 추가 문자 이스케이핑이나 입력 검증이 아닌, 기본적인 메모리 관리 버그를 해결한 것이다.
영향 범위
| 항목 | 내용 |
|---|---|
| LoadMaster | GA 7.2.60.0 이상 7.2.63.2 미만 · LTSF 7.2.45.12 이상 7.2.54.18 미만 |
| ECS Connections Manager | GA 7.2.60.0 이상 7.2.63.2 미만 |
| Object Scale Connection Manager | GA 7.2.60.0 이상 7.2.63.2 미만 |
| MOVEit WAF | GA 7.2.60.0 이상 7.2.63.2 미만 |
| 접근 경로 | 인접 네트워크에서 노출된 LoadMaster API(/accessv2) — 인증 없이 접근 가능 |
| 공격 복잡도 | 낮음 — 힙 스프레이와 단일 인용부호 입력만으로 가능 |
| 악용 정도 | CISA KEV 등재 · PoC 공개 · eSentire TRU가 실제 악용 시도 감지 (성공 사례 미확인) |
| 최대 영향 | 로드 밸런서/ADC 전체 제어 → 뒤쪽 서버 이동, 트래픽 조작, 데이터 탈출, 네트워크 침투 |
LoadMaster는 기업 네트워크의 가장자리에 위치한 핵심 장비다. 이 위치를 완전히 장악하면 공격자는 내부 네트워크로 접근하는 문을 손에 넣게 된다. 공식 영향 버전 범위인 LoadMaster GA 7.2.60.0 이상 7.2.63.2 미만 및 LTSF 7.2.45.12 이상 7.2.54.18 미만, 여기에 ECS Connections Manager, Object Scale Connection Manager, MOVEit WAF GA 7.2.60.0 이상 7.2.63.2 미만에 해당하는 인터넷 노출 인스턴스가 있는 조직은 즉시 조치를 취해야 한다.
탐지 지표는 다음과 같다.
/accessv2엔드포인트에 대한 비정상 API 호출 패턴- 단일 인용부호를 대량으로 포함하는
apiuser/apipass필드 system()호출을 통한 쉘 명령어 실행 흔적- LoadMaster 프로세스에서 비정상 하위 프로세스 생성
- Out-of-bounds 힙 읽기에 따른 메모리 접근 로그
대응 방안
즉시 적용
LoadMaster의 경우 GA 7.2.63.2 이상, LTSF 7.2.54.18 이상으로 긴급 업그레이드한다. ECS Connections Manager, Object Scale Connection Manager, MOVEit WAF는 GA 7.2.63.2 이상으로 업그레이드한다. API가 필수적이지 않은 환경이라면 /accessv2 엔드포인트를 비활성화한다. 방화벽에서 /accessv2 엔드포인트에 대한 외부 접근을 차단한다. SIEM에서 LoadMaster API 관련 비정상 호출 패턴을 모니터링하도록 설정한다.
단기 적용
LoadMaster를 DMZ 내부로만 이동하고 직접 노출을 제거한다. API 접근을 IP 화이트리스트로 제한한다. 네트워크 분할을 통해 뒤쪽 서버 격리를 강화한다.
장기 적용
ADC/로드 밸런서 제품의 정기적인 패치 관리 프로세스를 도입한다. CISA KEV 카탈로그와 연동된 자동 취약점 모니터링 구축을 진행한다. 가장자리 장치의 공격 면적을 최소화하는 Zero Trust 아키텍처를 도입한다.
참고문헌
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!