티스토리 뷰

카테고리 없음

GPUStack 인증 우회 취약점 CVE-2026-102895와 사내 AI 모델 서버의 관리자 접근통제

생각방 2026. 11. 11. 09:55

목차


    사내 AI 모델 서버가 127.0.0.1에서만 연결을 받더라도, 같은 서버의 리버스 프록시가 요청을 전달하면 외부에서 관리자 API에 닿을 수 있습니다. 리버스 프록시는 클라이언트 대신 백엔드에 연결해 요청을 넘기는 중계 서버입니다. GPUStack은 이 중계 연결을 로컬 요청으로 판단했을 때 로그인 없이 관리자 권한을 부여하는 경로가 있었습니다. 미국 사이버보안·인프라보안국(CISA)은 2026년 11월 9일 이 취약점을 실제 악용 취약점 목록(KEV)에 추가했습니다. GPUStack 공식 보안 권고 · CISA KEV 공식 미러


    외부 요청이 같은 호스트의 리버스 프록시를 거쳐 관리자 API로 전달

    프록시 뒤에서 로컬로 보이는 요청

    GPUStack은 AI 모델 배포와 추론을 관리하는 오픈소스 GPU 클러스터 관리 도구입니다. 2.2.0 미만에서는 force_auth_localhost가 기본값인 false일 때, 요청 출처를 루프백으로 판단하면 인증 정보가 없는 요청에 관리자 권한을 부여했습니다. 루프백은 같은 호스트 안으로 돌아오는 네트워크 경로이며, 이 취약점에서 사용된 IPv4 주소는 127.0.0.1입니다. GPUStack 공식 보안 권고

    같은 호스트의 프록시가 루프백을 통해 GPUStack에 연결하면, GPUStack이 직접 연결한 상대는 프록시입니다. 외부에서 시작된 요청도 이 경로를 거치면 GPUStack에는 로컬 연결로 보입니다. 별도로 클라이언트가 제공한 X-GPUStack-Real-IP 헤더를 GPUStack이 받아들이면, 그 값으로 출처가 루프백이라고 판단할 수도 있었습니다. GPUStack 공식 보안 권고

    요약 프록시의 루프백 연결만으로도 우회 조건이 성립하므로, 경계에서 헤더를 제거한 뒤에도 앱의 로컬 인증 예외를 따로 확인해야 합니다.

    록시의 루프백 연결과 클라이언트가 보낸 헤더 값이 각각 로컬 출처로 판정

    수정 버전과 실제 악용 기록

    최초 수정 버전은 2.2.0으로, 2026년 6월 18일 PyPI에 배포됐습니다. GPUStack 저장소의 보안 권고에는 7월 31일이 게시일로 표시되고, CVE 레코드는 11월 4일(UTC)에 공개됐습니다. 이 레코드의 심각도는 CVSS 3.1 기준 9.8점(Critical)입니다. CISA의 KEV 등재일은 11월 9일이며, 카탈로그에 표시된 조치 기한은 11월 12일입니다. PyPI 배포 기록 · GPUStack 공식 보안 권고 · CVE Program 공식 레코드 · CISA KEV 공식 미러

    공식 권고에 따르면 2.1.1 배포 환경에서 공격자가 만든 사용자 지정 추론 백엔드가 외부로 접속해 원격 명령을 받을 수 있는 셸을 실행했습니다. 11월 4일 공개된 CVE 레코드에도 실제 악용이 기록돼 있습니다. 공개 자료에서 확인되는 것은 해당 배포 버전과 관찰된 행위이며, 최초 공격일은 미확인입니다. 권고가 설명한 가능 피해에는 사용자·모델 설정 변경, 지속적으로 사용할 수 있는 관리자 API 키 발급, 워커(모델 실행 노드)와 클라우드 서비스 자격 증명 열람도 포함됩니다. GPUStack 공식 보안 권고 · CVE Program 공식 레코드

    사내 AI 서버의 관리자 API 점검 기준

    운영 점검은 모델 추론 요청과 사용자·키·백엔드를 관리하는 요청의 경로를 따로 그리는 데서 시작합니다. 사내망에서만 쓰는 서비스도 일반 직원이나 다른 업무 시스템이 관리 경로에 닿을 수 있는지 확인합니다. 프록시 설정, 실제 실행 버전, 권한별 응답을 같은 배포 단위로 대조하면 어느 지점에서 조치해야 하는지 구분할 수 있습니다.

    점검 항목 확인할 증거 조치 및 통과 기준
    관리 경로 프록시·로드밸런서의 경로 규칙과 백엔드 포트의 직접 접근 가능 여부 관리자 API는 승인된 관리 경로로만 도달할 수 있고, 추론 서비스 경로를 통해 관리 기능이 노출되지 않습니다.
    주소 신뢰 앱의 로컬 인증 예외와 접속자 주소 헤더를 설정하는 장비 외부에서 들어온 주소 헤더는 경계에서 제거하고, 필요한 주소 값은 신뢰하는 프록시가 설정합니다. 앱은 주소만으로 관리자 권한을 부여하지 않습니다.
    버전과 권한 실행 중인 각 서버의 버전과 승인된 테스트 환경의 관리자 전용 읽기 API 응답 GPUStack은 2.2.0 이상으로 올립니다. 익명 요청과 일반 사용자 요청에는 관리 데이터가 반환되지 않고, 승인된 관리자만 읽을 수 있는지 확인합니다.

    운영 반영 전에는 업무용 자격 증명으로 정상 추론 요청도 보내, 관리 경로를 제한한 뒤에 사용자 기능이 계속 동작하는지 확인합니다.

    업데이트를 바로 적용하기 어렵다면 영향 버전에서 force_auth_localhost=true를 임시로 적용해 로컬 요청에도 인증을 요구합니다. 함께 외부에서 들어오는 제품 전용 헤더를 제거하고, 신뢰할 수 없는 네트워크에서 관리 API에 닿지 않도록 접근을 제한합니다. 수정 코드에서는 루프백 요청에 관리자 권한을 자동으로 부여하던 분기가 삭제됐습니다. GPUStack 공식 보안 권고 · GPUStack 수정 커밋

    권한 검사에서 익명과 일반 사용자 요청은 멈추고 관리자 요청만 관리 데이터에 도달

    노출 이력이 있는 서버의 침해 점검

    영향 버전의 관리 경로가 외부나 비신뢰 네트워크에 열려 있었다면, 접근을 제한하고 패치하는 동시에 변경 기록을 보존합니다. 확보 가능한 프록시·서버 로그와 워커 실행 기록을 시간대별로 맞춰 보면서 승인 기록에 없는 관리자 키 발급, 사용자 지정 백엔드 등록, 워커의 이례적인 외부 연결을 살핍니다. 루프백 주소가 찍혔다면 같은 시점의 프록시 기록까지 대조해야 요청이 들어온 경로를 좁힐 수 있습니다. GPUStack 공식 보안 권고

    침해 정황이 있으면 사내 사고 대응 절차에 따라 영향을 받은 워커를 격리하고, 의심스러운 관리자 키를 폐기하며 노출 가능성이 있는 워커·클라우드 자격 증명을 교체합니다.

    요약 패치 적용과 별개로 이미 발급된 키와 변경된 백엔드의 조사·조치 상태를 기록합니다.

    결론

    점검표에는 실행 중인 버전, 관리 API에 도달할 수 있는 경로, 권한별 응답을 함께 남깁니다. 과거 노출이 확인된 서버에는 로그 보존 여부와 키·백엔드 조사 결과도 남겨, 서비스 재개 전에 보안 담당자가 확인할 범위를 정합니다.

    참고자료