KDE Plasma에서 샌드박스를 깨는 임의 코드 실행 취약점
2 hours ago
2
- KDE Plasma의 창 관리 동작 때문에 샌드박스된 앱이 사용자의 클릭을 계기로 호스트 임의 바이너리를 실행할 수 있음이 PoC로 확인됨
- 핵심 원인은 KWin이 앱이 제공한 app_id를 신뢰하고, 실제 .desktop 파일 매칭 없이 /proc/PID/cmdline 기반 실행 경로를 남겨둔 데 있음
- PoC는 Arch Linux 호스트와 Flatpak 앱, 수정된 Mesa eglgears_wayland를 조합해 /usr/bin/kcalc가 샌드박스 밖에서 실행되는 흐름을 재현함
- 사용자가 작업 표시줄 아이콘의 Open New Window를 선택하거나 중간 클릭하면 대상 프로세스가 app.slice cgroup과 호스트 마운트 네임스페이스에서 노출된 상태로 시작됨
- 완화하려면 샌드박스의 security context, XdpAppInfo, control groups에서 앱 ID를 확인하고, .desktop 파일과 맞지 않는 창에는 새 창 실행을 막아야 함
PoC가 보여준 샌드박스 탈출 흐름
- 악성 샌드박스 앱은 사용자가 Open New Window를 호출하는 순간 다른 앱으로 가장해 호스트에서 임의 바이너리를 실행할 수 있음
- PoC는 Flatpak으로 재현됐지만, 보안 컨텍스트 지원 여부와 관계없이 다른 샌드박스에도 적용될 수 있다고 정리함
- 실험 구성은 다음과 같음
- Arch Linux 호스트
- 빌드 의존성 wget, unzip, meson
- 권한을 부여하지 않은 Flatpak 앱 io.github.johannesboehler2.BmiCalculator
- 샌드박스 안에서 빌드가 쉽지 않아 악성 바이너리 경로만 Flatpak에 전달
- 지정 대상 바이너리 /usr/bin/kcalc
- 악성 바이너리를 실행하면 작업 표시줄에는 KCalc 아이콘이 표시됨
- 사용자가 우클릭 후 Open New Window를 선택하면 /usr/bin/kcalc가 샌드박스 밖에서 시작됨
- 실행 위치는 app.slice cgroup
- 마운트 네임스페이스는 호스트 쪽
- 결과적으로 완전히 노출된 상태로 실행됨
발견 과정과 단서
- KDE Plasma에서 Portable 샌드박스를 QEMU 가상 머신으로 테스트하던 중, 일부 창이 적절한 .desktop 파일과 연결되지 않아 작업 표시줄에 일반 Wayland 아이콘으로 표시됨
- 이 현상은 KWin trusts on Apps fully for app_id로 보고됐으며, 앱이 다른 앱으로 가장할 수 있는 문제로 이어짐
- 이후 작업 표시줄에서 실수로 중간 클릭을 하자 기본 동작으로 Open New Window가 호출됨
- 새 창은 실행됐지만 저장된 로그인 자격 증명과 수정된 설정을 사용하지 않았고, KWin Debug Console의 PID와 procfs의 control groups 및 rootfs 정보를 함께 확인하면서 샌드박스 탈출이 드러남
취약점의 작동 방식
- KWin이 창을 실제 .desktop 파일에 연결하지 못하더라도, 실행할 argv0를 찾는 경로가 남아 있음
- 실험 결과 /proc/PID/cmdline을 통해 값을 읽는다는 추측이 맞았음
- 문제는 기존 애플리케이션 인스턴스를 샌드박스 밖에서 실행하는 수준에 그치지 않음
- 권한 없는 프로세스를 포함한 모든 프로세스는 argv0를 바꿀 수 있음
- 마운트 네임스페이스도 선택지가 될 수 있지만 덜 유연하다고 정리함
- 앱 제공 app_id에 대한 보호 부재와 /proc/PID/cmdline 읽기의 불안전성이 결합해 호스트에서 임의 코드 실행이 가능해짐
데모와 실제 공격 시나리오
- 데모 코드는 GalaxySnail이 작성했으며, Mesa의 eglgears-wayland를 사용함
- 데모 흐름은 다음과 같음
- mesa-demos-argv0 저장소를 클론
- src/egl/opengl/eglgears.c의 main 함수 안 지정 명령을 원하는 명령으로 수정
- meson setup build && meson compile -C build로 빌드
- ./build/src/egl/opengl/eglgears_wayland 실행
- 작업 표시줄 아이콘 중간 클릭 또는 컨텍스트 메뉴에서 Open New Window 선택
- 지정한 악성 바이너리가 시작됨
- 실제 공격에서는 $HOME 아래에 셸 스크립트를 생성하는 방식이 가능함
- $HOME은 일반적으로 호스트에서도 같은 경로에 있음
- 악성 앱은 argv0를 조용히 생성하거나 다운로드한 바이너리로 바꿀 수 있음
- 사용자가 Open New Window를 클릭하거나 실수로 앱 아이콘을 중간 클릭하면 세션을 완전히 제어할 수 있음
제안된 수정 방향
- KDE Plasma가 이 익스플로잇을 막으려면 앱이 제공한 ID를 그대로 신뢰하지 않아야 함
- 앱 ID는 다음 경로에서 얻어야 한다고 제안함
- 샌드박스의 security context
- XdpAppInfo
- control groups
- 특정 창이 .desktop 파일과 매칭되지 않으면 Open New Window를 허용하지 않아야 함
- KDE Security 메일로부터 업데이트를 받지 못한 상태임
공개 타임라인
- 원래 메일에서 arbitrary code execution을 RCE로 잘못 표기함
- 모든 이벤트는 UTC+8, 24시간 형식 기준임
- 2026년 4월 1일 23:51, 첫 메일을 security@kde.org로 보냄
- 2026년 4월 2일 00:15, David Edmundson이 보고를 확인하는 답장을 보냄
- 2026년 4월 2일 00:24, David Edmundson은 해당 기능이 .desktop 파일의 Exec=를 사용하며 임의 코드 실행에 쓰일 수 없다고 생각한다고 답함
- 2026년 4월 2일 11:59, GalaxySnail의 도움으로 .desktop 파일에 의존하지 않는 다른 PoC가 동작함을 확인함
- 2026년 4월 2일 18:26, 익스플로잇 파일과 설명을 포함한 후속 메일을 security@kde.org로 보냈지만 응답을 받지 못함
- 2026년 5월 2일 11:59, Plasma 6.7 Beta에서 익스플로잇이 패치되지 않았음을 확인함
- 2026년 7월 2일 18:30, 익스플로잇이 활성 상태로 90일 대기 기간을 넘겨 공개를 진행함
- 패치되지 않았고 후속 답장을 받지 못했으며 일반적인 90일 대기 기간이 지난 뒤, 인식 제고를 위해 공개를 결정함
- KDE 개발자를 비판하려는 시도는 아니며, OSS 프로젝트가 최근 스팸에 시달리고 인간에게도 처리 용량의 한계가 있지만 프로세스는 더 나아질 수 있다고 덧붙임
-
Homepage
-
Tech blog
- KDE Plasma에서 샌드박스를 깨는 임의 코드 실행 취약점