Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
vbox-ovf-nat-tftp-prefix — VirtualBox 7.2.20 - 높음 - 로컬 - 파일 읽기 - OVF NAT TFTP 빈 접두사 | Kitploit
도구/GitHubGitHub/abraxas/vbox-ovf-nat-tftp-prefix
Privilege EscalationVulnerability AnalysisExploitationSecurity VirtualizationPapers & ResearchLabs & Practice
GitHubabraxas/vbox-ovf-nat-tftp-prefix

vbox-ovf-nat-tftp-prefix

VirtualBox 7.2.20 - 높음 - 로컬 - 파일 읽기 - OVF NAT TFTP 빈 접두사

저장소 보기
13일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - vbox-ovf-nat-tftp-prefix

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vbox-ovf-nat-tftp-prefix

vbox-ovf-nat-tftp-prefix

분류: 파일 읽기 도달 범위: UI:R 가져오기 후 로컬(게스트)

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

vbox:Machine OVF 가져오기는 ExtraData, 공유 폴더, NVRAM 경로, 시리얼 RawFile을 정리한다. 그러나 NAT enable-tftp나 TFTP @prefix는 전혀 건드리지 않는다. libslirp는 tftp_prefix가 NULL일 때만 TFTP를 비활성화한다. DrvNAT의 g_strdup("")은 NULL이 아닌 상태로 남는다. 게스트가 접두사 / 또는 빈 접두사로 etc/passwd를 RRQ하면 /etc/passwd가 된다. 게스트 이름에 포함된 ../는 여전히 거부된다.

빈 접두사 또는 / 접두사로 가져온 NAT TFTP는 게스트가 VBox UID 권한으로 호스트 파일을 RRQ할 수 있게 한다. 쓰기는 아니다. 호스트 커널도 아니다. 닫힌 ../ 검사의 잔재도 아니다.

ID아직 CVE 없음
분류파일 읽기 (게스트가 호스트 경로를 TFTP RRQ)
도달 범위vbox:Machine OVF를 UI:R로 가져온 후 로컬(게스트), 이어서 VM 시작
CWECVE-2022-21394 접두사 클래스의 잔재인 CWE-22
CVSS높음: 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
제품Oracle VM VirtualBox OSS
영향 받는 버전7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
인증게스트 내 인증 없음; 호스트 사용자가 가져오기 후 시작해야 함
라이선스GNU Affero GPL v3.0
실험 환경소스 하네스; 루프백 compose; VirtualBox는 부팅되지 않음

공격자가 할 수 있는 일

NAT 블롭에 enable-tftp와 TFTP 접두사 / 또는 빈 접두사가 설정된 vbox:Machine OVF/OVA를 전달하고, NAT 게이트웨이(10.0.2.2:69)로 TFTP RRQ를 보내는 게스트 디스크를 함께 제공한다. 호스트 사용자가 가져오기(File / Import 또는 VBoxManage import)를 수행하고 VM을 시작한다. 가져오기는 ExtraData, 공유 폴더, 시리얼 RawFile, NVRAM 경로를 정리한다. TFTP 필드는 살아남는다. 시작 시 ConsoleImplConfigCommon이 EnableTFTP를 삽입한다. 빈 접두사는 CFGM에서 생략되고, DrvNAT는 TFTPPrefix를 ""로 기본 설정한 뒤 g_strdup한다. libslirp는 이를 활성화된 것으로 취급한다.

이것이 전체 권한 집합이다. 여기에는 호스트 쓰기, VM 프로세스 힙 프리미티브, 커널 탈출이 없다.

정찰 (게스트 TFTP RRQ)

방법싱크권한
가져온 접두사 ""로 oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS를 TFTP RRQlibslirp tftp_handle_rrq 후 접두사 + / + 게스트 이름에 대한 RTFileOpen실험실에서 입증됨. 빈 접두사는 NULL이 아닌 상태로 유지된다. 구성된 경로는 /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS이다. 읽기 전용 열기가 witness 바이트를 반환했다.
가져온 접두사 /로 같은 이름을 TFTP RRQ동일실험실에서 입증됨. 구성된 경로는 //oracle/...이며, POSIX상 /oracle/...과 동일하다. witness 바이트가 반환되었다.
빈 접두사로 게스트 RRQ etc/passwd의 경로 전용 유사 사례"" + "/" + "etc/passwd"실험실에서 입증된 경로 구성. 결과는 /etc/passwd이다. 실험실은 호스트의 /etc를 열지 않는다.
VBox UID가 열 수 있는 임의의 상대 이름(홈 키, VirtualBox.xml, 호스트 /etc, Windows 현재 드라이브 루트)을 TFTP RRQ동일한 RTFileOpen추론됨. 동일한 연결 방식. 프로세스가 열 수 없는 파일은 닫힌 상태로 유지된다(File not found).

무결성 및 가용성

방법권한
TFTP WRQ차단됨. 이 TFTP 서버는 RRQ 전용이다. 쓰기 핸들러가 없다.
호스트 파일 덮어쓰기 / 생성차단됨. 읽기 전용 RTFILE_O_READ.
VM 프로세스 힙, VBoxSVC, 다른 VM, 호스트 커널차단됨. 이 잔재는 구성된 경로에 대한 파일 열기이다.
TFTP DoS범위 밖.

이 잔재가 부여하지 않는 것

  • 기본 새 VM: Main이 fEnableTFTP를 false로 기록합니다(Settings.cpp NATEngine 생성자).
  • NAT 네트워크: VBoxNetSlirpNAT는 home이 존재할 때 항상 tftp_path를 <VirtualBox home>/TFTP로 설정합니다. RRQ는 해당 접두사 아래에 유지됩니다.
  • vbox:Machine 블롭이 없는 일반 OVF는 이 NAT TFTP 쌍을 복사하지 않습니다.
  • 게스트 파일명 ../와 후행 /는 여전히 "Access violation"을 발생시킵니다. 이는 이미 종료된 CVE-2022-21394 경로 탐색입니다.
  • 비어 있지 않은 접두사 아래의 의도된 PXE는 격리된 상태로 유지됩니다(랩에서는 /work/tftp/boot.pxe).
  • NULL 접두사는 TFTP를 비활성화합니다. 열리지 않습니다.
  • 공유 폴더, ExtraData, 직렬 RawFile, NVRAM 대상은 이 가져오기 경로에서 여전히 정리됩니다.
  • 3D 없음, Guest Additions 없음, VRDP 없음, PUEL 아님.

이 어플라이언스를 가져와 VM을 시작하는 실제 호스트는 게스트에게 VBox UID가 열 수 있는 모든 경로에 대한 읽기 권한을 부여합니다. 랩은 해당 경로 탐색의 소스 하네스입니다. VirtualBox는 부팅되지 않습니다.

발견 방법

저는 VirtualBox/virtualbox v7.2.20(f2792cf44)을 고정했습니다. NAT와 OVF를 탐색했습니다. 7.2는 NAT를 번들 libslirp 4.9.3으로 전환했습니다. .ova에서 공유 폴더를 존중하는 것은 이미 위험으로 간주되어 제거됩니다. TFTP는 그 목록에 없었습니다.

Settings.cpp는 여전히 vbox:Machine 가져오기 시 NAT enable-tftp와 TFTP/@prefix를 읽습니다:

elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);

ApplianceImplImport.cpp:6147은(는) 그들이 기억한 모든 것을 정리합니다:

config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
    config.sanitizeImportedExtraData();

이 네 본문은 strTFTPPrefix나 fEnableTFTP를 언급하지 않는다.

시작 시 ConsoleImplConfigCommon.cpp:2286-2292는 TFTPPrefix가 비어 있지 않을 때만 삽입하고 EnableTFTP는 항상 삽입한다. DrvNAT.cpp:1656-1665는 해당 키를 생략한 구형 VM에 대해 EnableTFTP를 true로 기본 설정한 다음:

rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;

slirp.c:698은 g_strdup입니다. 빈 값은 non-NULL로 유지됩니다. tftp.c:353-357은 NULL일 때만 비활성화합니다. 364-370은 prefix, /, guest 이름을 앞에 붙입니다. 398-407은 ../를 거부합니다. 그런 다음 빌드된 경로에 대해 RTFileOpen을 수행합니다.

이미 기록된 잘못된 접근: guest ../를 잔여물로 취급(CVE-2022-21394, 여전히 거부됨); 기본 신규 VM을 영향받는 것으로 취급; NAT Network home/TFTP를 이 잔여물로 취급; WRQ 쓰기를 주장; 호스트 커널을 주장. 극적 과장: 호스트 /etc/passwd 열기. 오라클은 /oracle 아래의 witness 파일입니다.

Lab

python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py

또는

cd lab
./run.sh

pin 새니타이저의 소스 하네스, DrvNAT 빈 문자열 기본값, g_strdup, 그리고 libslirp tftp_handle_rrq. Docker compose 프로젝트 vbox-ovf-nat-tftp-prefix. 루프백 전용. VirtualBox는 부팅되지 않음. Witness VBOX-OVF-NAT-TFTP-PREFIX-WITNESS가 /oracle/...에 심어져 있음. 제어 PXE 파일은 /work/tftp/boot.pxe. 마지막 줄:

SUCCESS vbox-ovf-nat-tftp-prefix sanitize-miss=yes null-disable=yes empty-prefix-read=yes slash-prefix-read=yes dotdot-reject=yes VBOX-OVF-NAT-TFTP-PREFIX-WITNESS

수정 사항

vbox:Machine 가져오기 시 ExtraData와 공유 폴더를 지우는 것과 동일한 방식으로 nat.fEnableTFTP와 nat.strTFTPPrefix를 정리하십시오. 접두사가 제한된 디렉터리가 아니면 닫힌 상태로 실패하십시오. 빈 문자열을 NULL로 처리하여 libslirp가 TFTP를 비활성화하도록 하십시오. tftp_prefix에 g_strdup("")를 사용하지 마십시오.

참고 자료

  • github.com/VirtualBox/virtualbox 태그 v7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
  • Settings.cpp NAT TFTP 읽기 (4873, 4888-4894) 및 가져오기 정리기 (9654-9682)
  • ApplianceImplImport.cpp i_importVBoxMachine (6147-6151)
  • ConsoleImplConfigCommon.cpp (2286-2292)
  • DrvNAT.cpp (1656-1665)
  • slirp.c g_strdup (698)
  • tftp.c (353-407)
  • CVE-2022-21394는 게스트 TFTP 이름의 ../를 차단했습니다. 이 잔여 항목은 OVF로 심어진 접두사입니다

연락처

도구 다운로드