CVE-2026-66768 (SAP GUI for Java 신뢰 수준 미강제로 인한 명령 실행) 분석
분류: CVE · 클라이언트·데스크톱 · 명령 실행 · CVE-2026-66768 · [표준]
우리는 대개 “서버가 클라이언트를 조심해야 한다”고 배웁니다. 그런데 반대 방향도 위험합니다. 클라이언트가 서버(백엔드)의 지시를 무조건 믿으면, 그 서버가 공격자의 것일 때 클라이언트가 무너집니다. SAP GUI for Java는 연결된 백엔드가 부르는 특정 기능에 대해 신뢰 수준 정책을 제대로 강제하지 않았습니다. 그 결과 조작된 백엔드가 피해자의 워크스테이션에서 명령을 실행시킬 수 있었습니다.
개요
SAP GUI for Java는 SAP 백엔드(예: SAP NetWeaver ABAP 시스템)에 접속하는 데스크톱 클라이언트입니다. 컴포넌트 코드는 BC-FES-JAV이며, 윈도우 전용인 SAP GUI for Windows와 달리 자바 기반이라 리눅스·macOS 등에서도 쓰입니다. 이번 취약점은 클라이언트가 연결된 백엔드에서 호출되는 일부 기능에 대해 신뢰 수준(trust level) 정책을 올바르게 강제하지 않는 결함입니다. 낮은 권한의 공격자가 연결된 백엔드 시스템을 조작해 해당 기능을 피해자 클라이언트에서 트리거하면, 피해자 워크스테이션에서 임의 명령 실행으로 이어질 수 있습니다.
이 취약점은 무인증(pre-auth)이 아닙니다. 낮은 권한(PR:L)과 사용자 상호작용(UI:R)이 필요하지만, 성공 시 영향은 클라이언트 시스템 전체 장악에 준합니다.
- 영향 범위: BC-FES-JAV 8.10. ⚠️미확인(팩트체크 대상) — 리서치 재료(집계·요약 사이트) 기준이며, NVD·CVE.org 원본에서 대조해야 합니다. 그 외 버전은 unaffected로 표기됩니다.
- 수정 버전: 공개 미명시. 벤더는 SAP Security Note 3781729 적용을 권고하며 워크어라운드는 없습니다. 정확한 패치 버전 문자열은 노트가 로그인 게이트(me.sap.com)라 공개 확인 불가 → ⚠️미확인입니다.
- CWE: CWE-807 (보안 결정을 신뢰할 수 없는 입력에 의존, Reliance on Untrusted Inputs in a Security Decision). ⚠️미확인 — 집계 사이트 기준, NVD 원본 대조 대상.
- CVSS: 3.1 기준 9.0 (Critical), 벡터
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H. ⚠️미확인 — 다수 집계 출처가 동일 값으로 수렴했으나, 정확한 벡터·점수는 NVD 벡터와 대조가 필요합니다. Scope가 Changed(S:C)인 점에 주목합니다. - 인증 요구: 없음이 아님(pre-auth 아님). 낮은 권한 + 사용자 상호작용 필요. 공격 경로는 공격자가 제어/조작한 백엔드입니다.
- CNA/어사이너: SAP SE. 공개일 2026-09-08(SAP 2026년 9월 패치데이)로 다수 출처가 수렴하나, 일부 요약 글은 09-11로 표기합니다(기사 게시일로 추정, ⚠️미확인·경미).
한 줄 요약: “클라이언트가 백엔드의 지시를 신뢰 수준 검증 없이 실행하면, 그 백엔드가 공격자 손에 있을 때 클라이언트에서 명령이 돈다” — 신뢰 경계가 클라이언트→서버 한 방향으로만 그어져 있고, 서버→클라이언트 방향이 비어 있던 것이 핵심입니다.
기술 배경 — 신뢰 경계는 양방향이다
기업용 클라이언트-서버 소프트웨어에서 우리는 보통 서버 쪽 방어를 이야기합니다. 서버는 아무 클라이언트나 믿지 않고 인증·권한을 검사해야 한다는 것입니다. 하지만 데스크톱 클라이언트도 자신이 붙은 서버(백엔드)를 무조건 믿어서는 안 됩니다. 특히 클라이언트가 로컬에서 강력한 동작(파일 실행, 외부 프로그램 호출, 로컬 명령 수행)을 할 수 있다면, “그 동작을 누가 시켰나, 그 명령을 신뢰해도 되나”를 클라이언트 스스로 판단해야 합니다.
많은 리치 클라이언트(rich client)는 이를 위해 신뢰 수준 정책을 둡니다. 백엔드가 클라이언트에게 어떤 기능을 호출하라고 요청할 때, 클라이언트는 “이 기능이 이 연결·이 신뢰 수준에서 허용되는가”를 검사한 뒤에만 수행합니다. 위험도가 높은 기능(예: 로컬 셸/프로그램 실행)일수록 더 높은 신뢰가 요구되고, 신뢰가 부족하면 사용자에게 경고하거나 거부해야 합니다.
이 게이트가 살아 있으면, 공격자가 악성 백엔드를 세워 피해자를 유인해 접속시켜도, 위험한 로컬 기능은 신뢰 검사에 걸려 실행되지 않습니다. 문제는 특정 기능 경로에서 이 신뢰 수준 검사가 빠지거나 잘못 적용될 때 생깁니다. 그러면 클라이언트는 백엔드가 시키는 대로, 신뢰 판단 없이 위험한 동작을 수행하게 됩니다.
CVE 분석 요약 — 어느 판단이 원인인가
⚠️중요 제약 — SAP GUI for Java는 폐쇄소스(closed-source) 상용 제품입니다. 공개 소스 저장소·패치 커밋·커밋 SHA가 존재하지 않습니다. 패치는 SAP Security Note 3781729를 통한 바이너리 배포로만 제공됩니다. 따라서 이 글은 파일 경로·라인번호·diff를 제시하지 않습니다(지어내지 않습니다). 아래는 리서치 재료가 여러 출처에서 교차 확인한 결함의 성격 서술이며, 코드 인용이 아닙니다.
공개된 근본 원인은 하나의 문장으로 요약됩니다(⚠️미확인 — 소스 대조 불가, 벤더 요약 문구 기반): 클라이언트가 연결된 백엔드에서 호출되는 특정 기능에 대해 신뢰 수준 정책을 올바르게 강제하지 않는다. 이는 CWE-807 — “보안 결정을 신뢰할 수 없는 입력에 의존” — 의 교과서적 형태입니다. 여기서 “신뢰할 수 없는 입력”은 백엔드의 응답/지시이고, “보안 결정”은 위험한 로컬 기능을 수행할지 여부입니다. 클라이언트가 그 결정을 백엔드 말에 맡겨버린 것입니다.
정리하면 구조는 이렇습니다(전부 ⚠️미확인 — 소스 미확인, 개념 서술).
- 위험한 기능 경로에서 신뢰 게이트가 비었다. 특정 기능은 백엔드가 호출을 요청하면, 그 연결의 신뢰 수준을 제대로 검사하지 않고 수행됩니다. 즉 낮은 신뢰(또는 공격자 제어) 백엔드도 그 기능을 부를 수 있습니다.
- 그 기능이 로컬에서 강력한 동작으로 이어진다. 피해자 워크스테이션에서 SAP GUI를 실행 중인 사용자 권한으로 명령이 실행됩니다. Scope가 Changed(S:C)로 매겨진 것은, 취약한 컴포넌트(클라이언트의 신뢰 판단)와 영향을 받는 자원(운영체제/로컬 실행 환경)이 다른 보안 권한 범위에 있기 때문으로 보입니다(우리 분석·추정, 팩트로 제시하지 않음).
아래는 이 구조를 직접 그린 개념 도식입니다(남의 도표를 옮기지 않았습니다). 실제 소스가 아니며, 폐쇄소스라 정확한 코드는 확인할 수 없습니다.
개념용 단순화 — 실제 코드/프로토콜 아님
[피해자 워크스테이션] [백엔드 시스템]
SAP GUI for Java (공격자가 조작/제어)
──────────────── ──────────────────
│ (1) 사용자가 접속 (UI:R) │
│ ───────────────────────────────────────────▶ │
│ │
│ (2) "이 기능을 실행하라" 지시 │
│ ◀─────────────────────────────────────────── │
│ │
├─ (3) 신뢰 수준 게이트 ────────────────┐ │
│ 정상: "이 연결에서 이 위험 기능, │ │
│ 신뢰되나?" → 검사 후 결정 │ │
│ 결함: 특정 기능 경로에서 이 검사가 │ │
│ 빠짐 → 백엔드 말대로 수행 │ │
│ ▼ │
│ (4) 로컬에서 명령/프로그램 실행 │
│ (SAP GUI 실행 사용자 권한으로) │
▼
시스템 침해 (C:H / I:H / A:H, Scope Changed)
핵심은 신뢰 경계가 한 방향으로만 그어져 있었다는 점입니다. 클라이언트는 자신이 서버에 보내는 요청은 인증했지만, 서버가 자신에게 되돌려 시키는 위험한 기능에 대해서는 “이 서버를 이 정도로 신뢰해도 되나”를 특정 경로에서 묻지 않았습니다. 그 한 방향의 빈틈이 공격자가 백엔드를 조작할 수 있을 때 명령 실행으로 바뀝니다.
패치(요지, ⚠️미확인): 수정은 SAP Note 3781729의 바이너리 배포로만 제공되며 폐쇄소스라 diff를 확인할 수 없습니다. 결함의 성격상 올바른 수정은 (a) 문제된 기능 경로에도 신뢰 수준 검사를 일관되게 적용하고, (b) 위험한 로컬 동작은 충분한 신뢰가 확인될 때만(또는 명시적 사용자 확인을 거쳐) 수행하며, (c) 기본값을 “신뢰 부족 시 거부”로 두는 방향일 것입니다(우리 분석·추정, 팩트로 제시하지 않음).
공격 시나리오 · 영향도 + 대응방안
공격 시나리오 (단계 압축, 완성형 페이로드 없음):
- 공격자가 악성 또는 조작된 백엔드 시스템을 준비합니다(자신이 세운 시스템이거나, 이미 장악한 낮은 권한의 SAP 시스템).
- 피해자가 SAP GUI for Java로 그 백엔드에 접속하도록 유도합니다(UI:R — 피해자의 접속·상호작용이 필요합니다).
- 백엔드가 신뢰 수준 검사가 빠진 특정 기능의 호출을 클라이언트에 요청합니다.
- 클라이언트가 신뢰 판단 없이 그 기능을 수행하면서, 피해자 워크스테이션에서 임의 명령이 실행됩니다(SAP GUI 실행 사용자 권한으로).
영향도: 확인된 성격은 낮은 권한 공격자에 의한 피해자 클라이언트에서의 임의 명령 실행입니다(C:H/I:H/A:H, Scope Changed). 명령 실행에 성공하면 해당 워크스테이션의 파일·자격증명·연결된 세션에 대한 폭넓은 접근으로 확장될 수 있습니다. 다만 pre-auth가 아니며 사용자 상호작용과 조작된 백엔드로의 접속이 전제이므로, 실제 악용은 그 유인 조건이 갖춰져야 성립합니다. 리서치 재료 기준 실제 악용(in-the-wild) 관측 보고는 없으며 EPSS는 낮은 수준(~0.3%대)입니다(⚠️미확인 — 집계 기준, 시점에 따라 변동).
대응방안:
- 근본: SAP Security Note 3781729의 패치를 적용합니다(BC-FES-JAV 8.10 대상). 워크어라운드가 없다고 보고되므로, 패치 적용이 유일한 근본 대책입니다. 정확한 수정 버전·적용 방법은 me.sap.com의 노트 원문에서 확인해야 합니다(로그인 필요).
- 차선(즉시 패치 불가 시):
- 신뢰할 수 있는 백엔드에만 접속하도록 사용자를 통제합니다. 알 수 없는/외부의 SAP 시스템 접속을 차단하고, 접속 대상 서버 목록을 화이트리스트로 제한합니다.
- 클라이언트가 위치한 워크스테이션에서 로컬 명령/외부 프로그램 실행을 제한(애플리케이션 화이트리스트·최소 권한 계정)해, 명령 실행이 발생해도 피해 범위를 좁힙니다.
- SAP GUI 접속 트래픽을 신뢰된 네트워크 경계 내로 한정합니다(임의 외부 백엔드로의 연결 차단).
- 탐지 관점: SAP GUI 프로세스가 로컬 셸·스크립트 인터프리터·외부 실행 파일을 자식 프로세스로 생성하는 이례적 행위를 EDR로 감시합니다. 또한 사용자가 평소와 다른/미승인 백엔드에 접속하는 연결 패턴을 로깅·경보합니다.
결론
신뢰는 양방향입니다. 서버가 클라이언트를 검문하는 동안, 클라이언트도 서버가 시키는 위험한 일을 “이 서버를 이만큼 믿어도 되나”라고 되물어야 합니다. 그 되물음이 한 기능 경로에서 빠지자, 조작된 백엔드가 피해자의 기계에서 명령을 실행했습니다.
이 부류의 사고가 반복되는 이유는 분명합니다. 개발자들은 신뢰 경계를 흔히 “클라이언트를 의심하는” 한 방향으로만 그리고, 클라이언트가 서버를 의심해야 하는 반대 방향을 비워두기 때문입니다. 리치 클라이언트가 로컬에서 강력한 동작을 할 수 있는 순간, “보안 결정을 백엔드 응답에 맡기는” 구조(CWE-807)는 곧바로 원격 명령 실행의 씨앗이 됩니다. 이 결함은 우리가 다룬 다른 신뢰 불가 입력에 기반한 보안 결정, 그리고 서버가 클라이언트를 조종하는 역방향 신뢰(reverse-trust) 계열과 같은 뿌리를 공유합니다. 정석은 위험한 기능 경로마다 신뢰 수준 게이트를 일관되게 적용하고, 부족한 신뢰에서는 기본 거부하며, 로컬 실행 권한 자체를 최소로 좁히는 다층 방어입니다. 이 한 클라이언트의 틈은 SAP 노트로 닫히겠지만, “클라이언트도 서버를 의심하라”는 교훈은 다음 데스크톱 에이전트, 다음 기업용 클라이언트에서 또 시험대에 오릅니다. 그래서 우리는 도구가 아니라 방법을 남깁니다.
References / 참고자료
- NVD, “CVE-2026-66768 Detail” — 이 글이 재구성한 1차 정본(취약점 설명·CVSS·CWE). 리서치 단계에서 본문 로드 재확인이 필요하며, 팩트체크 대조 대상입니다. https://nvd.nist.gov/vuln/detail/CVE-2026-66768
- CVE.org, “CVE Record: CVE-2026-66768” — 정본 레코드(CNA=SAP SE·영향 컴포넌트·CVSS) 교차 확인용. https://www.cve.org/CVERecord?id=CVE-2026-66768
- SAP SE, “SAP Security Note 3781729” — 벤더 정본 패치 권고(수정 버전·적용). 로그인 게이트라 공개 본문 미확인. https://me.sap.com/notes/3781729
- SAP, “Security Patch Day” — 2026년 9월 패치데이 공지(공개일·묶음 노트 맥락). https://url.sap/sapsecuritypatchday
- OpenCVE, “CVE-2026-66768 Details” — CVSS 벡터·CWE-807·참조 확인(독립 집계). https://app.opencve.io/cve/CVE-2026-66768
- Layer Seven Security, “SAP Security Notes, September 2026” — 메커니즘 서술(“untrusted SAP system”)·패치데이 맥락(독립 분석). https://www.layersevensecurity.com/sap-security-notes-september-2026/
이 글은 위 원 자료를 우리 관점에서 다시 쓰고 논평을 더한 것입니다. 특정 문장·코드를 그대로 옮기지 않았으며, 자세한 재현 절차는 원문을 참고하세요. 이 제품은 폐쇄소스 상용 소프트웨어라 공개 커밋 SHA·raw 소스가 없어, 코드 인용 대신 개념 도식으로 재구성했고 파일/라인 단정을 하지 않았습니다. ⚠️미확인 표시가 붙은 사실 주장(특히 영향/수정 버전·CWE·CVSS 벡터·근본원인·공개일)은 발행 전 독립 팩트체크로 1차출처 대조가 끝나야 확정됩니다. SAP Note 3781729는 로그인 게이트라 정확한 수정 버전 문자열이 공개 확인되지 않았습니다. 혼동 주의: SAP GUI for Windows 동반 취약점 여부는 확인된 출처에서 단정할 수 없습니다(⚠️미확인).