Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2020-0022 — 안드로이드 8-9를 위한 제로클릭 블루투스 RCE 익스플로잇 (CVE-2020-0022)으로, 힙 스프레이, 주소 누출 및 JOP 체인 실행을 통해 BlueFrag 취약점을 이용한 원격 코드 실행을 수행합니다. | Kitploit
도구/GitHubGitHub/kalibb/cve-2020-0022
Android SecurityBluetooth SecurityExploitationReverse EngineeringShellcodeDebuggersCTFMobile SecurityLearning & EducationRemote Access ToolPayload DevelopmentBinary Exploitation
177개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHubkalibb/cve-2020-0022

CVE-2020-0022

안드로이드 8-9를 위한 제로클릭 블루투스 RCE 익스플로잇 (CVE-2020-0022)으로, 힙 스프레이, 주소 누출 및 JOP 체인 실행을 통해 BlueFrag 취약점을 이용한 원격 코드 실행을 수행합니다.

저장소 보기

CVE-2020-0022

Insinuator의 놀라운 블로그 게시물과 코드에 많은 감사를 전합니다!

결과

Insinuator 게시물에 언급된 모든 단계가 완료되었으며, 그 이상도 수행되었습니다. 이러한 단계는 README.md 파일에 넣기에는 많으므로 위에서 언급한 Insinuator의 게시물을 확인해 주세요.

익스플로잇은 다음 지점까지 완전히 완료되었습니다:

  1. 공격자가 제어하는 충분히 큰 메모리 영역의 주소가 유출됩니다
  2. 프로그램 카운터가 사용자 지정 주소를 가리키도록 수정됩니다
  3. 실패 확률이 크게 감소할 때까지 자동으로 재시도됩니다
  4. 코드는 연결 해제 시간과 메모리 검색 속도 측면에서 최적화되어 더 이상의 최적화는 익스플로잇의 안정성을 손상시킬 정도로 이루어졌습니다

차이점 및 개선 사항

이 익스플로잇은 다음 측면에서 Insinuator의 구현과 다릅니다:

  1. C로 작성되었습니다 (파이썬 대신, 제가 C를 좋아하기 때문입니다)
  2. 모듈 방식으로 작성되어 각 모듈이 특정 작업을 담당합니다
  3. 주변에 있던 Pixel 3 XL (Android 9, PQ3A.190801.002, 보안 패치 레벨 2019-08-01)에서 테스트되었습니다
  4. 이 전화기/타겟에서 더 잘 작동했기 때문에 libicuuc.so 대신 libandroid_runtime.so의 주소를 유출합니다
  5. 두 가지 예제 JOP 체인이 구현되어 있습니다. 하나는 execv를 직접 호출하고, 다른 하나는 fork를 호출한 후 execv를 호출합니다
  6. 함수와 가젯의 오프셋을 추출하는 사용자 지정 Ghidra 스크립트가 함께 제공됩니다 (다른 타겟으로 익스플로잇을 이식하기 쉽도록)

데모/스크린샷

다음은 익스플로잇이 PC를 수정하여 사용자 지정 주소를 가리키도록 하는 비디오 데모입니다: PoC Demo Video

체인의 첫 번째 반복은 jop_experiment에서 볼 수 있습니다. 이 체인은 fork를 호출하지 않고 execv를 직접 호출합니다. 커밋 ca28fdf에서 찾을 수 있습니다. 이 체인을 사용할 때 발생하는 상황은 다음과 같습니다: Execv Chain

체인의 두 번째 반복은 fork를 호출한 다음 execv를 호출하는 것입니다. 이 체인의 전체 세부 정보는 여기에서 확인할 수 있습니다. 이 체인을 사용할 때 발생하는 상황은 다음과 같습니다: Fork Chain

다행히도 Pixel 3 XL에는 Bluetooth 프로세스가 fork 및/또는 execv를 호출하지 못하도록 하는 보호 기능이 있습니다. 지식 공유나 자랑 측면에서 제 작업은 여기까지입니다. 더 고급 기술을 작성하여 공유하면 블랙햇에게 너무 도움이 될 수 있습니다.

익스플로잇 결론

이 익스플로잇은 완전하다고 생각합니다. 향후 개선 사항은 다음과 같습니다:

  • 사용자 지정 셸코드를 실행하기 위해 dlsym을 호출한 다음 mprotect를 호출하는 JOP 체인 작성
  • 다양한 타겟에 대한 오프셋 데이터베이스 수집 및 저장
  • 상대적 보편성을 목표로 여러 타겟에서 익스플로잇 테스트
  • 루트 권한을 얻기 위해 OS 수준 익스플로잇과 체인 연결 (이전 CVE-2019-2215 익스플로잇과 같이)
  • 그 외...

이 모든 것은 이 프로젝트를 재미있는 지식 공유 프로젝트에서 무기화될 수 있는 블랙햇 익스플로잇으로 바꾸므로, 지금으로서는 제 여정이 여기서 끝납니다.... 질문이 있으시면 언제든지 연락해 주세요.

사용법

익스플로잇을 실행하려면 다음을 실행하세요:

root@kitploit:~
make build run ARGS="00:00:00:00:00:00" 

여기서 00:00:00:00:00:00은 타겟/피해자 장치의 MAC 주소입니다. make clean 외에 나머지 빌드 타겟은 익스플로잇을 수정, 개선 또는 재구현하려는 경우에만 도움이 되므로 자세히 언급할 필요가 없습니다.

디버깅

  • Android gdbserver 바이너리는 NDK 폴더에서 찾을 수 있습니다
  • 이를 사용하여 타겟을 디버깅하세요 (권장하지 않음):
root@kitploit:~
# On target
/data/local/tmp/gdbserver 0.0.0.0:1234 --attach $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')

# On host
adb forward tcp:1234 tcp:1234
gdb-multiarch -q -x ./gdbinit
  • Termux의 gdb를 통해 전화기에서 직접 디버깅 (권장):
root@kitploit:~
# On host
adb push ./gdbinit /data/local/tmp/gdbinit

# On target
su
/data/data/com.termux/files/usr/bin/gdb -q -x /data/local/tmp/gdbinit -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}') 
# OR
/data/data/com.termux/files/usr/bin/gdb -q -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}') 

작동이 중단된 경우 공격자 머신에서 Bluetooth 서비스를 다시 시작할 수 있습니다:

root@kitploit:~
sudo systemctl restart bluetooth.service

참고 사항

이 섹션에서는 이 익스플로잇 개발 중 관찰된 몇 가지 현상을 설명합니다:

  • 원격 타겟의 시간 초과를 방지하기 위해 (HCI 소켓 fd를 생성할 때) SSP가 꺼집니다:

SSP PIN Timeout

  • get_message_loop을 통해 사용되는 base::MessageLoop 객체의 vtable을 수정하는 의도치 않은 오버플로로 인해 타겟이 충돌할 가능성을 줄이기 위해 힙 클리너 패킷을 스프레이하고 있습니다:

CFI MessageLoop Crash

  • 이 부분은 insinuator 게시물에서 잘 설명되지 않았습니다. 우리는 partial_packets unordered_map의 각 항목에 대해 하나의 연결 리스트 항목을 포함하는 32바이트 malloc 청크를 대상으로 하여 패킷의 주소를 유출하고 있었습니다. 이는 map_experiment를 통해 알아냈습니다. map_experiment가 실제 프로그램에서 유출된 것과 일치하지 않아서, insinuator의 패턴을 따르고 다른 패턴을 사용했습니다 (이것도 실험을 통해 찾았습니다).
map_experiment의 결과 Map 실험 결과
  • 충돌과 PC 덮어쓰기가 chrome 시그널 객체를 성공적으로 충돌시킵니다

LibChrome Signal object crash

  • JOP 체인은 jop_experiment를 사용하여 시뮬레이션되었습니다. 전체 (첫 번째, execv 전용) JOP 체인은 JOP_PLAN.md에 설명되어 있습니다

JOP Experiment Result

도구 다운로드