
CVE-2024-23997용 PoC
CVE-2024-23997 취약점에 대한 개념 증명(Proof-of-Concept)입니다.
cf) 프록시, 특히 웹 프록시는 웹 통신 중간에서 대리자 역할을 하며, 다른 주체를 대신하여 요청과 응답을 수신하고 전달합니다. 따라서 YANA가 사용하는 포트와 관계없이 프록시는 통신을 가로챌 수 있습니다. 프록시는 보안 목적이나 캐싱을 통한 검색 속도 향상을 위해 사용되지만, 많은 악성 프로그램이 이를 악용하여 사용자가 보내는 웹 통신을 도청합니다.
YANA를 사용한 예를 하나 살펴보겠습니다. 실습 환경을 구축하기 위해 Windows 10에 악성 프로그램처럼 동작하는 프록시 도구인 Burp Suite를 설치했습니다. Burp Suite는 PortSwigger에서 제공하는 네트워크 보안 진단 도구이며, 커뮤니티 버전은 무료로 사용할 수 있습니다. 이 예제를 따라 하려면 실습을 위해 네트워크 설정 변경이 필요하므로 복원이 필요하다는 점에 유의하세요.
1단계) 실제 악성 프로그램은 인터넷 설정을 변경하지 않고 Windows API, Linux API 등을 사용하여 패킷을 수신 대기합니다. 그러나 복잡성 때문에 옵션을 수동으로 활성화합니다. Windows 키를 누르고 인터넷 옵션을 검색합니다.
2단계) 연결(Connections) 탭으로 이동하여 LAN 설정 버튼을 클릭합니다.
3단계) "사용자 LAN에 프록시 서버 사용"을 체크하고 고급(Advanced) 버튼을 클릭합니다. 설정을 복원하려면 체크를 해제하기만 하면 됩니다.
4단계) 서버(Servers)의 HTTP 내용을 "127.0.0.1", "8080"으로 수정하고 예외(Exceptions)를 "<-loopback>"으로 수정한 후, 옵션 저장을 위해 확인(OK) 버튼을 클릭합니다.
5단계) Burp Suite를 엽니다.
6단계) 검증만 할 것이므로 "임시 프로젝트(메모리에 저장)"를 체크하고 다음(Next) 버튼을 클릭합니다.
7단계) "Burp 기본값 사용(Use Burp defaults)"을 선택하고 Start Burp 버튼을 클릭합니다.
8단계) Proxy 탭으로 이동한 다음 Proxy settings를 클릭하여 Proxy listeners에서 프록시가 127.0.0.1:8080으로 설정되어 있는지, Running이 체크되어 있는지 확인합니다. 또한 Proxy listeners 아래의 Response interception rules로 이동하여 "다음 규칙에 따라 응답 가로채기(Intercept response based on the following rules)"를 체크합니다. 설정 창을 닫으면 옵션이 자동으로 적용됩니다.
9단계) Proxy의 Intercept 탭으로 이동하여 "Intercept is on"인지 확인한 다음 Yana를 엽니다. Intercept가 활성화되면 모든 HTTP/HTTPS 통신이 보류되어 Intercept가 비활성화되거나 Forward를 누를 때까지 상대방에게 전송되지 않습니다.
10단계) Forward 버튼을 누르면서 Yana 백그라운드 서버에서 수신한 응답 중 HTML 응답을 찾습니다. HTML 문서의 title 태그가 Yana로 작성되어 있기 때문에 구분하기 쉽습니다.
11단계) HTML body 태그 아래에 script 태그를 사용하여 JS 코드(“<script>require('child_process').exec('C:/Windows/System32/calc.exe')</script>”)를 삽입합니다.
12단계) 그런 다음 "Intercept is on"을 비활성화하면 Yana Electron 프로그램이 패킷을 수신하고 스크립트를 실행하여 계산기 프로그램을 실행합니다.
13단계) 실습이 완료되면 인터넷 옵션으로 이동하여 프록시 서버 사용을 비활성화합니다.
이는 Yana에서 nodeIntegration 옵션이 활성화되어 있기 때문입니다. 이 옵션이 비활성화되어 있더라도 다양한 다른 방법을 사용하여 HTML에서 Node.js 코드를 실행하는 것이 가능해집니다. Yana의 권한으로 실행되며, Yana가 관리자 또는 루트 권한으로 실행 중이라면 주입된 악성 코드도 해당 권한으로 실행될 수 있습니다. 따라서 앞서 언급한 바와 같이, 프로그램 간 통신에서 HTTP 프로토콜보다 가로채기가 더 어려운 File 프로토콜과 같은 프로토콜을 사용하여 HTML 페이지를 가져와 표시하는 것이 더 안전합니다.