[공격] 분석 — CVE-2026-50259
A stack‑based buffer overflow in X.Org’s _XkbSetMapChecks() can be triggered by a low‑privilege local client to achieve root execution on vulnerable X server/Xwayland instances, and must be patched immediately.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00165 · 악용난이도 hard
🔍 공격 기법
- 공격 표면: X 서버와 Xwayland가 제공하는 X11 프로토콜의
XkbSetMap요청. 클라이언트는key type index파라미터를 조작해 스택에 할당된 고정 크기 버퍼mapWidths[256]에 쓰게 된다. - 트리거 조건: 로컬 사용자(또는 해당 사용자의 권한을 가진 악성 X 클라이언트)가 X 서버에 연결할 수 있어야 함 (
AV:L). 요청 조작 난이도 낮음(AC:L), 공격자는 이미 로컬 계정 보유(PR:L), 사용자 상호작용 불필요(UI:N). - 단계:
- 정찰 –
XQueryExtension,XGetProperty등을 이용해 대상 시스템에 X 서버가 실행 중이며 버전이 취약 범위(< 21.1.23 / < 24.1.12)인지 확인한다. - 초기 접근 – 악성 X 클라이언트를 로컬에서 실행하거나 기존 세션을 탈취해 X 서버와 연결한다.
- 실행·권한 획득 – 조작된
key type index값을 포함한XkbSetMap패킷을 전송,mapWidths버퍼를 오버플로시켜 스택에 저장된 반환 주소 등을 덮어쓴다. 이 단계에서 ROP 체인이나 쉘코드가 실행될 수 있다. X 서버가 루트 권한으로 실행 중이면 바로 root 권한을 획득한다. - 지속 – 확보한 루트 권한으로 영구적인 백도어(예: systemd 서비스, cron 작업)나
~/.Xauthority파일을 변조해 재부팅 후에도 지속 가능하게 만든다. - 영향 – X 서버 다운(Denial‑of‑Service) 및 전체 시스템 장악이 가능하다.
- 정찰 –
악용 가능성: AV:L·AC:L·PR:L·UI:N 벡터는 로컬 사용자만 있으면 복잡도 없이(단순 파라미터 변조) 공격이 가능함을 의미합니다. 실제로 X 서버가 제공하는 XKB SetMap 요청에서 키 타입 인덱스를 조작하면 고정‑크기 스택 버퍼인 mapWidths[256]에 임의 오프셋으로 쓰기가 이루어져 오버플로우가 발생합니다. 이 엔드포인트는 로컬 Unix 도메인 소켓(또는 X11 포워딩이 활성화된 경우 TCP)으로 노출되며, 공격자는 동일 호스트에서 실행 중인 악성 X 클라이언트를 통해 해당 요청을 전송할 수 있습니다. EPSS 0.00165라는 실측값은 아직 대규모 악용 사례가 드물지만, 일부 탐지 기록이 존재함을 보여주어 이론적 심각도와 별개로 실제 위협 가능성을 뒷받침합니다. KEV에 등재되지 않은 점은 현재까지 공개된 공격 체인이 널리 활용되고 있지는 않음을 의미하지만, X 서버가 루트 권한으로 실행될 경우 권한 상승이 가능한 고위험 시나리오가 존재합니다. 따라서 난이도는 “hard”로 평가되며, 이는 로컬 접근·X 프로토콜 파라미터 조작이라는 전제조건을 만족해야 하지만, 조건이 충족되면 복잡도 없이 실행될 수 있음을 반영한 결과입니다.
💥 영향 분석
- 성공 시 X 서버가 비정상 종료하거나 메모리 손상이 발생해 사용자 세션이 끊긴다.
- X 서버가 루트 권한으로 실행 중인 경우, 공격자는 즉시 root 쉘을 얻어 시스템 전체에 대한 완전 통제권을 획득한다.
🔗 관련 취약점·체이닝
- CWE‑121 (Stack‑Based Buffer Overflow) – 본 결함 자체가 스택 오버플로우이며, 기존에 존재하는 동일 유형의 로컬 권한 상승 버그와 연계해 공격 표면을 확대할 수 있다.
- 추정: 다른 X11 확장(예: XInput)에서 발견된 메모리 손상 취약점과 결합하면, 먼저 X 서버를 불안정하게 만든 뒤 본 오버플로우를 이용해 권한 상승을 완성할 가능성이 있다.
- 추정: 시스템에
sudo설정 오류나 setuid 바이너리가 존재한다면, 해당 바이너리를 통해 로컬 권한을 높인 후 X 서버와 연계해 루트 권한을 확보하는 체인이 구성될 수 있다.
🔎 탐지
- X 서버 로그(
/var/log/Xorg.0.log)에 비정상적인XkbSetMap요청이 기록되거나, “BadLength” 오류가 반복적으로 발생하는 경우. - auditd 규칙으로
execve이벤트와 함께/usr/bin/Xorg프로세스의 비정상 종료(SIGSEGV) 감시. - IDS/IPS에서 X11 프로토콜 내
key type index값이 255를 초과하는 패킷을 탐지하도록 시그니처 추가.
🛡️ 완화 방안
- 즉시 조치: 공급업체가 제공한 최신 패치를 적용한다( X.Org X server ≥ 21.1.23, Xwayland ≥ 24.1.12 ).
- 구성 변경: X 서버를 루트 없이 실행하도록
systemd옵션(User=)을 사용하고, 불필요한 XKB 확장을 비활성화한다. - 접근 제한:
xhost -로 외부 클라이언트를 차단하고, MIT‑MAGIC‑COOKIE 인증만 허용한다. SSH 터널링으로 X 포워딩을 사용할 경우, `ForwardX11Trusted
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00165 · exploit=hard · in_scope=None