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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
qemu-colo-l4-oob — QEMU 11.1.2 - High - 로컬/원격 - OOB - COLO filter-rewriter short IPv4 L4 힙 오버플로 | Kitploit
도구/GitHubGitHub/abraxas/qemu-colo-l4-oob
Memory ForensicsVulnerability AnalysisExploitationFuzzingPapers & ResearchBinary Exploitation
GitHubabraxas/qemu-colo-l4-oob

qemu-colo-l4-oob

QEMU 11.1.2 - High - 로컬/원격 - OOB - COLO filter-rewriter short IPv4 L4 힙 오버플로

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - qemu-colo-l4-oob

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  qemu-colo-l4-oob

qemu-colo-l4-oob

QEMU v11.1.2 (4fc49f46dc95d4a27de2509e7fceb2931e91faeb) - COLO filter-rewriter

분류: OOB (힙 버퍼 오버플로 READ/WRITE). 도달 범위: 로컬(게스트) / 원격(COLO 피어).

parse_packet_early는 L2에 더해 ip_hl*4가 들어맞기만 하면 IPv4를 받아들인다. 최소 L4 헤더를 요구하지 않는다. 이어서 fill_connection_key는 남은 길이를 확인하지 않고 transport_header에서 4바이트를 읽는다. filter-rewriter는 g_malloc0(size)로 프레임을 복사하는데, SYN이 연결을 TCPS_SYN_RECEIVED로 옮긴 뒤 conn->offset != 0인 ACK가 오면, 캡처된 길이가 전송 헤더에서 끝나는 경우 th_ack / th_seq를 그 청크 너머에 쓴다.

COLO는 기본값이 아니다. -object filter-rewriter(및 colo-compare)가 구성된 경우에 켜진다. 해당 rewriter에서의 게스트 TX/RX는 가상화 보안 모델에 포함된다. primary_in / secondary_in 상의 COLO 피어는 네트워크 프로토콜이며, 역시 신뢰할 수 없다.

34바이트 IPv4/TCP 프레임이면 filter-rewriter에서 ASan 힙 버퍼 오버플로 READ를 일으키기에 충분하다.

ID아직 CVE 없음
CWECWE-125 / CWE-787
CVSSHigh: 8.2 CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
제품QEMU
영향 받음v11.1.2 (4fc49f46), COLO rewriter/compare 활성화 시
인증COLO rewriter netdev 상의 게스트, 또는 COLO compare 피어
라이선스GNU Affero GPL v3.0
랩127.0.0.1:18770 / 18771 루프백 소켓

공격자가 할 수 있는 일

누가: COLO가 활성화된 NIC 상의 신뢰할 수 없는 게스트, 또는 적대적인 COLO compare 피어. 게스트-호스트 / 피어-호스트. QEMU 사용자 공간 힙.

무결성 / 정찰 (랩에서 입증됨)

방법싱크권한
전체 헤더 SYN 이후의 짧은 IPv4/TCP ACK (34바이트 프레임, 길이가 전송 헤더에서 끝남)filter-rewriter handle_primary_tcp_pkt / fill_connection_keyfilter-rewriter에서 ASan 힙 버퍼 오버플로 READ. 전체 헤더 TCP를 제어하면 QEMU는 살아 있다.
동일한 L4 하한 누락parse_packet_early net/colo.c:43-98버퍼 내에 L4 헤더가 없는데도 패킷이 TCP로 분류된다.

무결성 (추론됨, 동일한 경계 누락)

SYN 이후 conn->offset != 0이면 rewriter는 net/filter-rewriter.c:112-114 및 :216-218에서 th_ack / th_seq를 저장한다. IP 옵션(ip_hl > 5)은 그 쓰기를 다음 힙 청크로 밀어낸다. 게스트가 트리거할 수 있는 호스트 힙 WRITE.

colo-compare fill_pkt_tcp_info는 pkt->size와 대조하지 않고 th_off<<2로 header_size를 설정한다. payload_size는 언더플로한다. colo_compare_packet_payload는 두 패킷 할당 너머로 수십 킬로바이트를 memcmp한다. 크래시와 호스트 힙 READ.

가용성 (랩에서 입증됨)

rewriter READ 시 ASan 하에서 QEMU가 중단된다. ASan이 없으면 이는 하이퍼바이저 프로세스 내의 실제 힙 OOB이다.

닫혀 있는 인접 표면

  • 이 핀의 TAP / socket / bridge / l2tpv3 / stream / dgram 길이 경로는 경계가 지켜지는 것으로 보였다(net_fill_rstate가 packet_len > NET_BUFSIZE를 거부).
  • 해시테이블 리셋 시 무제한 COLO 연결 테이블 누수는 할당 강화 문제이지 이 잔여 결함이 아니다.
  • 커널 PwnEscape / Vghost: QEMU 범위 밖.
  • COLO 없는 기본 QEMU: rewriter가 켜지지 않는다. 이 잔여 결함은 COLO가 구성되어야 한다.

랩은 RIP 제어나 게스트-호스트 셸을 입증하지 않는다. 분류는 COLO가 활성화된 netdev에서의 QEMU 프로세스 힙 OOB이다.

발견 방법

net/colo.c를 읽으며 L4를 포함하는 길이 하한을 찾았습니다. 하한은 Ethernet에 VLAN과 vnet_hdr를 더한 값입니다. ip_hl은 짧은 꼬리에서 가져옵니다. 그런 다음 fill_connection_key가 transport_header를 신뢰합니다. filter-rewriter는 항상 struct tcp_hdr의 오프셋 13에서 th_flags를 로드합니다.

잘못된 접근: TAP 길이를 COLO 경계로 취급(다른 경로); 오버플로를 첫 패킷으로 전송(rewriter는 conn->offset이 활성화되도록 SYN이 먼저 필요); colo-compare th_off 언더플로를 주 증거로 삼음(rewriter READ가 먼저 발생).

실습

cd lab
./run.sh

오직 루프백 소켓 127.0.0.1:18770(filter-rewriter netdev)과 18771(colo-compare)만을 대상으로 합니다. Pin은 github.com/qemu/QEMU 태그 v11.1.2 / 4fc49f46에서 클론되었습니다. ASan. configure 시점에 COLO 프록시가 활성화됩니다. Witness 전용입니다.

SUCCESS qemu-colo-l4-oob asan=heap-buffer-overflow access=READ sink=filter-rewriter control=alive QEMU-COLO-L4-OOB-WITNESS

재현: python3 qemu-colo-l4-oob-Abraxas-Labs.py.

수정 사항

parse_packet_early는 IP 헤더 뒤에 전체 L4 헤더(TCP 20, UDP 8, SCTP 12, AH 8)를 요구해야 하며, size가 transport_header에서 끝나거나 그 이전에서 끝나는 경우 거부해야 합니다. fill_connection_key와 재작성기(rewriter)의 th_* 저장은 남은 길이를 확인해야 합니다. colo-compare는 payload_size를 계산하기 전에 pkt->size에 맞지 않는 th_off<<2를 거부해야 합니다.

참고 자료

  • github.com/qemu/QEMU 태그 v11.1.2 커밋 4fc49f46dc95d4a27de2509e7fceb2931e91faeb
  • parse_packet_early · filter-rewriter
  • 동일 고정 버전: qemu-xhci-complete-uaf · qemu-nvme-sgl-bar
  • 시리즈: QEMU 11.1.2 leftovers
  • CWE-125 · CWE-787

라이선스

GNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 실습 환경 전용입니다. 보증은 제공되지 않습니다.

도구 다운로드