이 블로그를 찾아온 검색어 중에 ezpdfwflauncher 가 있었다. 그대로 검색하면 거의 아무것도 나오지 않는다. 실제 파일 이름은 ezPDFWSLauncher.exe 이고, S 를 F 로 잘못 읽거나 친 것으로 보인다. WS 는 WebSocket 의 약자다. 이름이 이상해서 검색했다면 지금 PC 에 이 파일이 있다는 뜻일 텐데, 결론부터 말하면 이 파일은 한 번 확인해 볼 필요가 있다.

정체: ezPDF Reader G4C 의 WebSocket 런처

ezPDF 는 국내 회사 유니닥스(Unidocs)의 PDF 제품군이다. 그중 G4C 라는 이름이 붙은 ezPDF Reader G4C 는 정부24 같은 공공기관 사이트가 민원 서류를 화면에 띄우고 인쇄하게 하려고 배포하던 뷰어다. G4C 는 원래 정부 민원 서비스(Government for Citizen)를 가리키던 이름이다.

ezPDFWSLauncher.exe 는 이 뷰어에 딸린 런처다. 공개된 프로세스 정보를 모아 보면 다음과 같다.

  • 보통 C:\Program Files (x86)\Unidocs\ezPDFReader2.0G\ 아래에 있다
  • 시작 프로그램 목록에서는 "ezPDF WebSocket G4C Service Launcher Module" 이라는 이름으로 잡힌다
  • 창 없이 뒤에서 돌면서 포트를 열고, 웹 페이지가 그 포트로 말을 걸면 PDF 뷰어를 띄운다

이 연재 3·4편에서 본 RAON K 나 위즈베라 핸들러와 같은 구조다. 웹 페이지가 PC 의 로컬 포트에 요청을 보내고, 그 포트를 열고 있는 프로그램이 브라우저 대신 PC 에서 일을 한다.

내 PC 에도 유니닥스 제품이 셋 있었다. ezPDF Desk 4.0, ezPDF Editor Uno 1.2.0.1, ezPDF Builder Supreme 이다. 그런데 이 세 제품의 설치 폴더를 모두 뒤져도 런처 실행 파일은 없었다. 있었던 것은 ezPDFDesk.exe, ezPDFEditorUno.exe, PDF 프린터 드라이버를 붙이고 떼는 ezpdfadddrv.exe·ezpdfdeldrv.exe 같은 것들뿐이다. 이름에 ezPDF 가 들어 있다고 모두 같은 프로그램이 아니라는 것, 런처는 Reader G4C 에 딸린 구성 요소라는 것을 여기서 확인할 수 있다.

2021년 KISA 권고: 원격 명령 실행 취약점

이 런처가 문제가 된 것은 2021년 8월이다. 한국인터넷진흥원(KISA)이 ezPDF Reader 2.0~3.0 버전에서 원격 명령 실행 취약점이 발견됐다며 구버전 삭제와 보안 업데이트를 권고했다. 당시 보도에 따르면 정부24 등 공공기관 홈페이지에서 쓰이던 ezPDF Reader G4C 의 취약 버전은 2.0.2.23 이었다.

이 취약점은 CVE-2021-26605 로 등록되어 있다. 등록된 설명을 요약하면, ezPDF 런처가 JSON-RPC 통신으로 받은 입력값을 제대로 검증하지 않은 채 실행해서 공격자가 임의의 명령을 실행할 수 있었다는 내용이다. 앞에서 본 구조를 떠올리면 왜 위험한지 바로 보인다. 런처는 "웹 페이지가 보낸 요청을 받아 PC 에서 무언가를 실행하는" 프로그램이다. 요청 내용을 검증하지 않으면, 공공기관 사이트가 아닌 공격자의 페이지가 같은 포트로 조작한 요청을 보내 PC 에서 원하는 명령을 실행시킬 수 있다. 브라우저의 보안 경계 바깥에 문을 하나 열어 두는 셈이라, 이런 로컬 에이전트는 입력 검증이 무너지면 피해가 크다.

같은 보도에서 기업이나 기관이 구매한 ezPDF Editor 3.0, 네이버 소프트웨어 자료실의 배포판은 이 취약점과 관계없다고 밝혔다. 내 PC 의 Desk·Editor Uno·Builder 처럼 런처가 없는 제품은 해당되지 않는다.

확인하고 지우는 방법

PC 에 이 파일이 있다면 먼저 버전부터 본다. 설정 → 앱 → 설치된 앱에서 "ezPDF Reader" 로 시작하는 항목을 찾는다. 2.x 나 3.x 구버전, 특히 ezPDF Reader G4C 2.0.2.23 이 있다면 지우는 것이 맞다. 정부24 같은 사이트에서 다시 PDF 를 열 일이 생기면 그때 사이트가 안내하는 새 버전을 받으면 된다.

PowerShell 로 한 번에 찾으려면 설치 목록에서 이름으로 거른다.

Get-ItemProperty HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*,
                 HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
    Where-Object DisplayName -match 'ezPDF' |
    Select-Object DisplayName, DisplayVersion, UninstallString

당시 유니닥스는 취약한 버전을 골라 지워 주는 자동 삭제 프로그램도 홈페이지에 공개했다. 설치된 앱 목록에서 지워지지 않거나 목록에 없는데 파일만 남아 있다면, 작업 관리자에서 ezPDFWSLauncher.exe 를 끝내고 시작 프로그램 목록에서 해당 항목을 끈 뒤 폴더를 지운다.

로컬 포트를 열고 웹 페이지의 요청을 받아 PC 에서 일을 하는 프로그램은 편리한 만큼, 입력 검증 하나가 무너지면 브라우저 바깥으로 문이 열린다. 쓰지 않는 런처를 남겨 두지 말아야 하는 이유다.

다음 편은 공공·금융 사이트에서 증명서를 출력할 때 같이 들어와, 화면 캡처와 화면 공유를 막아 버리곤 하는 마크애니의 Image SAFER 다.