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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
LoongBleed — Loongson LA464/LA664 프로세서에서 LASX 벡터 레지스터의 정의되지 않은 상위 비트를 통해 마이크로아키텍처 데이터 유출을 시연하는 개념 증명으로, ZenBleed와 유사합니다. | Kitploit
도구/GitHubGitHub/jiegec/loongbleed
Embedded Systems SecurityVulnerability AnalysisExploitationHardware HackingHardware SecurityPapers & ResearchLearning & Education
GitHubjiegec/loongbleed

LoongBleed

Loongson LA464/LA664 프로세서에서 LASX 벡터 레지스터의 정의되지 않은 상위 비트를 통해 마이크로아키텍처 데이터 유출을 시연하는 개념 증명으로, ZenBleed와 유사합니다.

저장소 보기
17251개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

LoongBleed

中文

LoongBleed는 ZenBleed (CVE-2023-20593)와 개념적으로 유사한 하드웨어 취약점으로, LSX(128비트 SIMD)와 LASX(256비트 SIMD)를 모두 구현한 Loongson LA464/LA664 프로세서에 영향을 미칩니다.

LoongArch에서 LSX $vr 레지스터(128비트)는 LASX $xr 레지스터(256비트)의 하위 절반과 별칭(alias) 관계에 있습니다. LSX 명령어와 기본 부동소수점 연산은 하위 128비트(또는 그 일부)에만 작동하도록 정의되어 있으며, 해당 $xr 레지스터의 상위 비트는 정의되지 않습니다. 그러나 마이크로아키텍처 결함으로 인해 이러한 연산이 $xr의 상위 128비트를 통해 데이터를 유출할 수 있으며, 이는 권한 경계를 넘거나 SMT 형제 스레드 간에 민감한 데이터를 노출시킵니다.

독립적 발견에 관한 참고 — 동일한 근본 하드웨어 결함이 CISPA Helmholtz Center for Information Security의 연구진에 의해 LoongLeak이라는 이름으로 독립적으로 발견되어 발표되었으며 (https://loongleakattack.com/), USENIX Security 2026에서 "LoongLeak: Architectural Cross-Privilege-Boundary Data Leakage on LoongArch CPUs"라는 제목으로 발표되었습니다. 우리의 작업은 LoongLeak 팀과 독립적으로 개발되었으며, 두 그룹 모두 Loongson LA464/LA664 프로세서가 LASX $xr 레지스터의 정의되지 않은 상위 비트를 통해 데이터를 유출한다는 동일한 결론에 도달했습니다. 우리가 유출을 유발하는 데 사용하는 명령어는 LoongLeak 논문에서 보고된 것과 동일하지 않다는 점에 유의하십시오. 우리의 PoC는 동일한 근본 하드웨어 결함을 재현하기 위해 다른 가젯 집합(vor.v, vld, fld.d, fld.s)에 의존합니다. 또한 유출이 vor.v와 같은 순수 레지스터-레지스터 명령어(메모리 로드 없음)로도 유발될 수 있기 때문에, 우리의 분석은 근본 원인이 물리적 레지스터 재사용일 가능성이 높다고 봅니다. 즉, 재사용된 물리적 레지스터의 상위 비트가 지워지지 않아 이전 레지스터 점유자의 잔여 데이터가 유출되는 것입니다. 이는 유출된 데이터를 L1 데이터 캐시에 기인하는 LoongLeak 논문의 분석과 다릅니다.

타임라인

  • 2026-05-12 — Loongson에 취약점을 보고했습니다.
  • 2026-06-09 — Loongson이 이는 이미 알려진 취약점의 독립적 발견임을 확인했습니다.
  • 2026-08-17 — Loongson이 LoongLeak 취약점에 관한 공지를 공식 발표했습니다 (공식 발표).
  • 2026-08-18 — 이 저장소가 공개되었습니다.

작동 방식

개념 증명(proof-of-concept)은 다음과 같이 작동합니다:

  1. xvld를 통해 $xrN 레지스터에 전부 0인 데이터를 로드합니다.
  2. 하위 128비트(또는 그 일부)만 건드려야 하는 명령어(LSX 또는 기본 부동소수점)를 실행합니다.
  3. xvst를 통해 전체 256비트 레지스터를 다시 저장합니다.
  4. 전체 256비트를 원래 값과 비교합니다. 상위 또는 하위 128비트가 예상된 0 값과 다르면 유출이 발생한 것입니다.

PoC는 물리적 코어에 고정된 스레드에서 이 가젯을 16개의 아키텍처 벡터 레지스터($xr0–$xr15)에 걸쳐 반복적으로 실행합니다. 명령어 실행 후 나타나는 0이 아닌 값은 마이크로아키텍처가 잔여 데이터나 교차 컨텍스트 데이터를 아키텍처 레지스터 상태로 전파했음을 나타냅니다.

가젯

PoC는 --gadget으로 선택할 수 있는 여러 테스트 명령어를 지원합니다:

GadgetInstructionDescriptionLeaks on LA664Leaks on LA464
vorvor.v $vrN, $vrN, $vrN$vrN과 자기 자신의 비트 ORYesNo
vldvld $vrN, …메모리에서 $vrN으로의 128비트 로드YesYes
fld.dfld.d $fN, …$fN으로의 64비트 부동소수점 로드 ($vrN 하위 64비트의 별칭)YesYes
fld.sfld.s $fN, …$fN으로의 32비트 부동소수점 로드 ($vrN 하위 32비트의 별칭)YesYes

LA664에서는 네 가지 가젯 모두 유출을 노출하며, 벡터당 최대 192비트를 유출합니다. LA464에서는 vld, fld.d, fld.s가 유출하며(벡터당 최대 224비트), 기본 vor.v 가젯은 LA464에서 유출하지 않습니다.

사용법

Usage: ./loongbleed_poc [OPTIONS]

Options:
  -a, --all                Launch one thread pinned to each physical core.
                           By default only thread on CPU 0 is launched.
  -g, --gadget [vor|vld|fld.d|fld.s]
                           Use different instructions for testing.
  -h, --help               Show this help and exit.

예시

# Single-thread mode on CPU 0
./run.sh

# Single-thread mode with vld gadget (required for LA464)
./run.sh --gadget vld

# All physical cores, default gadget
./run.sh -a

# All cores with fld.d gadget
./run.sh --all --gadget fld.d

공격 시나리오

LA664 (예: Loongson 3C6000/D)

피해자 스레드가 하나의 논리 CPU에서 민감한 데이터를 처리하는 동안 PoC가 SMT 형제 스레드에서 레지스터를 탐색합니다. 스누핑 스레드는 유출된 상위 비트에서 피해자 데이터의 조각을 관찰할 수 있습니다.

# Terminal 1 — start LoongBleed on CPU 0
./run.sh

# Terminal 2 — victim workload on the SMT sibling (CPU 1)
while true; do numactl -C 1 sort < /etc/shadow > /dev/null; done

자동화된 설정을 위해서는 제공된 스크립트를 사용하십시오:

./poc_la664.sh

이 스크립트는 CPU 1(CPU 0의 SMT 형제)에서 sort 워크로드를 생성하고, 기본 가젯으로 CPU 0에서 LoongBleed를 실행합니다.

LA464

피해자 스레드가 하나의 CPU에서 민감한 데이터를 처리하는 동안 PoC가 동일한 코어에서 레지스터를 탐색합니다. 기본 vor.v 가젯은 LA464에서 유출하지 않으므로 --gadget vld가 필요합니다.

# Terminal 1 — start LoongBleed on CPU 0
./run.sh --gadget vld

# Terminal 2 — victim workload on the same core
while true; do numactl -C 0 sort < /etc/shadow > /dev/null; done

자동화된 설정을 위해서는:

./poc_la464.sh

이 스크립트는 CPU 0에서 sort 워크로드를 생성하고 --gadget vld로 LoongBleed를 실행합니다.

빌드

PoC는 외부 의존성이 없는 단일 파일 C++ 프로그램입니다.

g++ -std=c++11 -O2 -march=native -pthread -o loongbleed_poc loongbleed_poc.cpp

또는 제공된 스크립트를 사용하십시오:

./run.sh
# or, on LA464:
./run.sh --gadget vld

출력 해석

유출이 감지되고 유출된 바이트에 최소 8개의 연속된 출력 가능 ASCII 문자 (0x20–0x7e)가 포함된 경우, PoC는 다음을 출력합니다:

[cpu   0] LEAK chunk=14 data=0x7461646e756f4620_6572617774666f53_0000000000000000_0000000000000000 ascii=............Software Foundat
  • cpu — 감지 스레드가 고정된 논리 CPU
  • chunk — 16개의 벡터 레지스터 슬롯($xr0–$xr15) 중 트리거한 슬롯
  • data — 명령어 실행 후 $xrN에서 다시 읽어온 전체 256비트 값으로, data3_data2_data1_data0 형식으로 표시되며:
    • data0 = 비트 [63:0] (결과의 최하위 64비트)
    • data1 = 비트 [127:64] (하위 128비트 절반의 상위 64비트)
    • data2 = 비트 [191:128] (상위 128비트 절반의 하위 64비트)
    • data3 = 비트 [255:192] (상위 128비트 절반의 상위 64비트)
  • ascii — 유출된 28바이트 윈도우(결과의 바이트 4–31, 즉 상위 224비트에서 최하위 32비트를 제외한 부분)의 출력 가능한 해석. 출력 불가능한 바이트는 .로 표시됩니다.

상위 128비트(data2 또는 data3)에 0이 아닌 값이 있으면 마이크로아키텍처 데이터 유출을 나타냅니다.

발견 경위

이 취약점은 Chips and Cheese의 기사 "Loongson's LSX and LASX Vector Extensions"를 읽던 중 발견되었습니다. 이 기사는 벡터 명령어가 일부 임의의 데이터 잔여물을 남길 수 있다고 언급했습니다. 이는 레지스터 리네이밍이 레지스터를 지우지 않을 수 있다는 가설로 이어졌으며 — ZenBleed와 유사한 메커니즘으로 — 이론상 커널 공간 데이터를 유출할 수 있게 합니다. 이후 이 가설을 검증하기 위한 실험을 수행했고, 실제로 유출이 발생하며 Loongson 3A5000과 3A6000 모두에서 재현되었습니다.

면책 조항

이 프로젝트는 교육 및 보안 연구 목적으로만 제공됩니다.

도구 다운로드