LoopX의 serve-status 구성요소에서 발생하는 CORS 취약점은 외부 웹 페이지가 제어면 상태와 비공개 Markdown 파일을 읽게 만들어, 내부의 민감한 데이터가 유출될 위험을 안고 있습니다.
CVE-2026-108372: LoopX serve-status CORS 취약점 개요
최근 LoopX 패키지의 serve-status 구성요소에서 보안 설정 오류로 인한 데이터 노출 취약점이 발견됐습니다. 이 취약점은 자문서 GHSA-vx2m-gpq4-8j5q로 공개됐고, 공식적으로 CVE-2026-108372로 등록됐습니다.
핵심 문제는 serve-status가 생성하는 모든 응답에 와일드카드 CORS 헤더인 Access-Control-Allow-Origin: *가 들어간 채 반환된다는 점입니다. CORS(Cross-Origin Resource Sharing)는 웹 브라우저에서 서로 다른 출처의 자원 접근을 제어하는 메커니즘입니다. 그런데 모든 출처를 허용하는 와일드카드 설정이 적용되면 보안 경계가 무너지고, 외부의 악성 웹 페이지가 내부 API 응답을 가로채는 길이 열립니다.
영향을 받는 버전 및 기술적 원인
해당 취약점은 특정 버전 범위의 pip 패키지에서 발생합니다. 특히 기본 포트에서 서비스가 실행 중인 환경에서는 위험도가 높아집니다.
취약 버전 및 환경 조건
영향을 받는 구체적인 범위는 다음과 같습니다.
- 패키지 버전: pip 패키지
loopx0.0.1 이상 0.4.5 미만 버전. - 실행 포트: 기본적으로 8765 및 8766 포트에서 serve-status를 실행 중인 배포 환경.
기술적 취약성 분석
이 취약점의 본질은 서버가 응답 헤더에 Access-Control-Allow-Origin: *를 실어 보내 브라우저의 동일 출처 정책(SOP)을 무력화한다는 데 있습니다. 이로 인해 공격자는 적절한 권한 없이도 특정 조건하에서 LoopX 제어면의 상태 정보와 비공개로 관리해야 할 Markdown 파일에 접근해 내용을 읽어냅니다.
취약점 분석 및 공격 시나리오
해당 취약점은 단순한 서버 설정 오류를 넘어, 사용자 상호작용과 결합하면 실제 데이터 유출로 이어집니다.
공격 메커니즘
이 취약점을 악용하려면 ‘사용자 상호작용’이라는 전제 조건이 반드시 필요합니다. 구체적인 공격 시나리오는 다음과 같습니다.
- 공격자가 제어하는 악성 웹 페이지를 하나 만들어 둡니다.
- LoopX 시스템의 내부 사용자를 그 악성 페이지로 유도합니다.
- 사용자가 페이지에 접속하면 브라우저는 공격자의 웹 페이지에 심어 둔 스크립트로 내부 네트워크의 LoopX serve-status 엔드포인트에 요청을 보냅니다.
- 서버가 와일드카드 CORS 헤더를 반환하는 탓에, 브라우저는 이 응답이 안전하다고 판단해 공격자의 페이지에 제어면 상태 및 비공개 Markdown 데이터를 전달합니다.
위험도 평가 (CVSS v4)
자문서에서 제시한 이 취약점의 CVSS v4 벡터 값은 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N입니다. 이 벡터를 분석해 보면 다음과 같은 위험 특성이 드러납니다.
- 공격 벡터(AV:N): 네트워크상에서 원격으로 공격이 가능합니다.
- 사용자 상호작용(UI:P): 사용자가 악성 페이지를 방문해야만 하는 상호작용 조건이 붙습니다.
- 기밀성 영향(VC:H): 유출되는 데이터의 성격상 기밀성 영향은 높은(High) 수준으로 평가됩니다.
대응 방안: v0.4.5 업그레이드
LoopX 보안팀은 이 취약점을 해결한 v0.4.5 버전을 릴리스했습니다. 시스템 관리자와 개발자라면 지금 업데이트 계획을 세울 때입니다.
권장 조치 사항
현재 쓰고 있는 loopx 패키지 버전이 0.0.1 이상 0.4.5 미만이라면, 최신 버전인 0.4.5로 업그레이드하는 것이 유일하고 확실한 해결책입니다.
v0.4.5 버전의 주요 보안 변경 사항
업데이트된 버전에는 다음과 같은 보안 강화 조치가 적용됐습니다.
| 구분 | 변경 내용 | 보안 효과 |
|---|---|---|
| CORS 정책 수정 | serve-status의 `Access-Control-Allow-Origin: *` 전송 중단 | 외부 출처에서의 제어면 및 비공개 파일 읽기 차단 |
| 라우트 보안 강화 | `reward/configure-goal` 라우트에서 안전하지 않은 goal id 거부 | 부적절한 ID 요청을 통한 잠재적 공격 경로 제거 |
LoopX serve-status의 과도한 CORS 정책은 내부망에 위치한 시스템이라 할지라도 사용자 상호작용과 맞물려 외부로 데이터가 유출되는 심각한 경로를 제공합니다. 관리자는 즉시 버전을 확인한 뒤 v0.4.5로 업그레이드해 기밀성 유출 위험을 없애면 됩니다.