
LG Root Exploit
LG 루트 익스플로잇
작성자: [email protected]
특별 감사: Juggie, 업데이트에서 이상한 바이너리(spritebud)를 지적해 주어 이 취약점을 발견하게 된 것에 감사드립니다.
주제: LG Android 기기에 OEM으로 설치된 Sprite Software의 백업 소프트웨어에서 발생하는 경쟁 조건(Race condition)
CVE ID: CVE-2013-3685
영향: 최소한의 사용자 상호작용으로 로컬에서 악용될 수 있는 취약점으로, 루트 사용자 권한으로 코드를 실행하게 됩니다. 특정 상황에서는 기기 사용자가 인지하지 못한 채 이 취약점을 악용할 수 있습니다.
제품: "Backup" "spritebud"
공급업체: Sprite Software LG Electronics 잠재적으로 다른 업체
영향을 받는 버전: spritebud 1.3.24 backup 2.5.4105 다른 버전도 영향을 받을 가능성이 있습니다.
영향을 받는 기기 (펌웨어 구성에 따라 다름): LG-E971 LG Optimus G LG-E973 LG Optimus G LG-E975 LG Optimus G LG-E975K LG Optimus G LG-E975T LG Optimus G LG-E976 LG Optimus G LG-E977 LG Optimus G LG-F100K LG Optimus Vu LG-F100L LG Optimus Vu LG-F100S LG Optimus Vu LG-F120K LG Optimus Vu LG-F120L LG Optimus LTE Tag LG-F120S LG Optimus LTE Tag LG-F160K LG Optimus LTE 2 LG-F160L LG Optimus LTE 2 LG-F160LV LG Optimus LTE 2 LG-F160S LG Optimus LTE 2 LG-F180K LG Optimus G LG-F180L LG Optimus G LG-F180S LG Optimus G LG-F200K LG Optimus Vu 2 LG-F200L LG Optimus Vu 2 LG-F200S LG Optimus Vu 2 LG-F240K LG Optimus G Pro LG-F240L LG Optimus G Pro LG-F240S LG Optimus G Pro LG-F260K LG Optimus LTE 3 LG-F260L LG Optimus LTE 3 LG-F260S LG Optimus LTE 3 LG-L21 LG Optimus G LG-LG870 LG (Unknown) LG-LS860 LG Mach LG-LS970 LG Optimus G LG-P760 LG Optimus L9 LG-P769 LG Optimus L9 LG-P780 LG Optimus L7 LG-P875 LG Optimus F5 LG-P875h LG Optimus F5 LG-P880 LG Optimus 4X HD LG-P940 LG Prada LG-SU540 LG Prada 3.0 LG-SU870 LG Optimus 3D Cube LG-US780 LG Lollipop 다른 기기도 영향을 받을 가능성이 있습니다.
제품 정보: "Backup"과 "spritebud"는 Sprite Software가 작성하고 LG Android 스마트폰에 탑재된 설정 및 애플리케이션 백업/복원 시스템입니다. "Backup"은 최종 사용자용 프런트엔드 앱이고, "spritebud"는 백업 및 복원 기능을 수행하는 서비스입니다.
세부 사항: "spritebud" 데몬은 init 스크립트에 의해 시작되며 루트 사용자로 실행됩니다. 유닉스 소켓에서 수신 대기하는 이 데몬은 "Backup" 앱의 지시를 받아들입니다. "spritebud"가 루트 사용자로 실행되고 있기 때문에 조작된 백업을 사용하면 임의의 파일에 쓰기, 권한 변경, 소유권 변경을 할 수 있습니다.
조작된 백업에는 익스플로잇 애플리케이션인 "com.cunninglogic.lgpwn"의 복원 데이터가 포함되어 있습니다. 데이터에는 익스플로잇 시간 창을 늘리기 위한 50mb 더미 파일(a), su 바이너리(b), su를 설치하는 스크립트(c), 스크립트 경로가 담긴 텍스트 파일(d)이 포함됩니다. 모든 파일은 애플리케이션이 소유하며, 전 세계 사용자가 쓰기/읽기/실행할 수 있습니다. 모든 파일은 알파벳 순서로 복원됩니다. 전체 백업은 압축 후 약 2mb입니다. 이 백업의 구조는 다음과 같습니다:
drwxrwxrwx u0_a114 u0_a114 2013-05-28 20:13 files
./files:
복원이 시작되기 전에 익스플로잇 앱이 실행되어 프로세스를 감시하고 대기합니다. 복원 중에 spritebud 데몬은 먼저 files 디렉터리를 만든 다음 해당 디렉터리의 권한과 소유자를 설정합니다. 그다음 "a" 파일(우리의 50mb 더미 파일)을 압축 해제하고 복원합니다. "a"의 복원이 진행되는 동안 익스플로잇 애플리케이션은 스크립트(c)의 전체 경로가 담긴 텍스트 파일 "d"를 /sys/kernel/uevent_helper에 심볼릭 링크할 시간을 갖게 됩니다. "d" 파일이 복원되면 우리의 경로가 uevent_helper에 기록됩니다. 핫플러그 이벤트가 발생하면(수 초마다 발생), uevent_helper에 포함된 경로가 커널에 의해 실행되고 우리의 스크립트(c)가 실행되어 su 바이너리(b)를 설치합니다.