LG webOS에서 발생한 제로클릭 취약점이다. Shodan 기준, 인터넷에 직접 노출된 LG webOS 기기는 약 42,000대에 달한다.

대상 환경
Version: webOS 10.2.2-5901 (Build 33.31.23)
취약점 체인
- SSG R2R 페어링 우회 — 포트
3001로 보낸 PIN을 무조건적으로 정답 PIN으로 그대로 받아들임. 이를 통해 인증을 우회하여 페어링을 성립시킬 수 있으며, 앱 실행 권한을 얻을 수 있음. - 네이티브 권한 획득 (미공개 — 미패치) — 권한 있는 네이티브 컨텍스트를 유지한 채 공격자 페이지를 로드시켜, 그 페이지가 네이티브 호출을 수행하게 만듦. 아직 수정되지 않아 상세는 비공개.
- 미서명 IPK 설치 — 디스크의 devmode 플래그 하나로만 게이팅되는
dev/install이 서명 검증을 건너뜀. 그 플래그마저 Luna 호출로 켤 수 있어, 미서명 IPK를 설치하고 임의 코드를 실행함.
코드 레벨 분석
1. SSG R2R 페어링 우회
파일: com.webos.service.secondscreen.gateway/helpers/system/pairing-manager.js
R2R 모드에서 서버는 클라이언트가 보낸 r2rPin의 존재 와 길이(PIN_LENGTH = 8)만 확인한다. TV가 생성한 정답 PIN과 비교하는 단계가 없다:
if (!!options.r2rMode) {
if (!!options.r2rPin === false) {
return Q.reject("r2rPin does not exist");
} else if (options.r2rPin.length !== this.PIN_LENGTH) {
return Q.reject("r2rPin.length is not PIN_LENGTH");
}
}
이후 그 값을 그대로 정답 PIN으로 저장하고, 사용자에게 보여줄 팝업은 R2R 모드에서 빈 문자열로 단락된다:
if (!!this.pairingRequests[pairingRequestId].r2rMode) {
pin = this.pairingRequests[pairingRequestId].r2rPin; // 공격자 제어
} else {
pin = this.generatePin(); // 정상: 랜덤 8자리
}
this.pairingRequests[pairingRequestId].pin = pin; // 정답 PIN으로 저장
공격자는 register 때 보낸 값과 같은 PIN을 ssap://pairing/setPin으로 제출하면 페어링이 성립한다. 매니페스트의 signatures[].signature가 비어 있어도 통과해 PROTECTED 등급의 LAUNCH 권한까지 얻는다.
2. 네이티브 권한 획득 (미공개)
이 단계는 아직 패치되지 않아 상세를 공개하지 않는다.
취약점 1로 얻은 앱 실행 권한을 발판으로, 권한 있는 네이티브 IPC 컨텍스트를 유지한 채 공격자가 제어하는 외부 웹 페이지를 로드시키는 결함이다. 그 결과 공격자 페이지의 스크립트가 네이티브 호출을 직접 수행할 수 있게 되고, 이것이 취약점 3의 setDevMode·dev/install 호출로 이어진다. 영향받는 구체적 컴포넌트·권한·코드·재현 방법은 수정 전까지 비공개한다.
3. 미서명 IPK 설치
파일: usr/sbin/appinstalld
취약점 2로 얻은 권한 있는 네이티브 컨텍스트 는 setDevMode로 devmode 플래그를 직접 켤 수 있다. 정상 사용 시 필요한 passphrase 입력은 LG Developer UI에만 있고 LS2 메서드 레벨엔 없다:
luna://com.webos.service.devmode/setDevMode {"enabled": true}
플래그가 켜지면 dev/install이 프로덕션 경로와 달리 서명 검증(pkgverifier/verifyIpk)을 부르지 않고 미서명 IPK를 state:"installed"로 수락한다. 설치된 type:"native" IPK를 실행하면 임의 코드 실행이 가능하다.
근본 원인 (Root Cause)
- RC-1 · SSG R2R 페어링 (CWE-287, Improper Authentication) — R2R은 본래 LG 내부 통합 클라이언트(
cis) 전용으로 설계된 “신뢰 경로”인데, SSG는 호출자가 정말 그 내부 클라이언트인지 검증하지 않는다. 그래서 TV가 생성한 비밀 PIN 대신 공격자가 보낸 값 이 정답 PIN으로 쓰이고 팝업도 뜨지 않는다. 신뢰의 근거가 “호출자 신원”이 아니라 “호출자의 선언”에 있는 것이 핵심이다. (최신 버전에서 R2R 기능은 제거되었다.) - RC-2 (CWE-668, Exposure to Wrong Sphere) — 과도한 네이티브 권한을 가진 채 임의의 외부 콘텐츠를 그 권한 컨텍스트에서 실행한다. 외부 페이지가 앱의 신원을 물려받는 confused-deputy 구조다. (미패치 — 상세 비공개.)
- RC-3 · 미서명 설치 (CWE-494, No Integrity Check) —
dev/install은 프로덕션 경로와 달리 서명 검증(pkgverifier)을 부르지 않고 오직 디스크 플래그 하나로만 막혀 있다. 게다가 그 플래그를 켜는setDevMode의 passphrase 검증은 LG Developer UI에만 있고 LS2 메서드 레벨엔 없다. 무결성 게이트에 암호학적 앵커가 없는 것이 근본 원인이다.
영향
- 사용자 상호작용 없이 LG webOS에서 임의 OS 명령 실행.
- 사용자가 공격을 알아챌 수 있는 가시적 흔적은 화면이 한 번 깜빡이는 것뿐이다.
데모
같은 네트워크의 공격자가 TV의 IP만으로, 사용자 조작 없이 원격 코드 실행에 성공하는 데모.
공개 타임라인
- 2026-05-27 — LG PSRT(제품 보안 대응팀)에 취약점 3건을 리포트.
- 2026-05-28 — LG PSRT 접수 확인, 개발팀 전달 예정 회신.
- 2026-06-09 — 진행 상황 문의.
- 2026-06-09 — LG PSRT 회신:
- 취약점 1 (SSG R2R 페어링 우회) — 벤더가 이미 인지하고 있던 취약점이라는 회신.
- 취약점 2 (본문 미공개) — 유효 취약점으로 인정된다는 회신.
- 취약점 3 (미서명 IPK 설치) — 의도된 기능이라는 회신.
- 2026-08-24 — 취약점 1 패치 확인
익스플로잇 코드와 상세 페이로드는 공개하지 않습니다. 필요한 경우 별도로 문의주시기 바랍니다.