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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2024-21980-poc — CVE-2024-21980 익스플로잇: 명령 버퍼 강제 우회를 통해 폐기된 SEV-SNP 게스트의 임의 메모리를 복호화하는 AMD SEV 펌웨어 대상 공격. | Kitploit
도구/GitHubGitHub/freax13/cve-2024-21980-poc
Encryption/Decryption ToolsVulnerability AnalysisExploitationHardware SecurityPayload DevelopmentBinary Exploitation
GitHubfreax13/cve-2024-21980-poc

cve-2024-21980-poc

CVE-2024-21980 익스플로잇: 명령 버퍼 강제 우회를 통해 폐기된 SEV-SNP 게스트의 임의 메모리를 복호화하는 AMD SEV 펌웨어 대상 공격.

저장소 보기
81592년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

SEV 펌웨어 취약점

이 저장소는 SEV 펌웨어의 취약점에 대한 익스플로잇을 포함합니다. 이 익스플로잇은 SEV-SNP 게스트가 폐기(decommission)된 후 임의 메모리를 복호화할 수 있도록 합니다.

버전 1.55.16 (현재 최신 버전)에서 테스트되었습니다.

근본 원인

SEV 펌웨어에는 모든 명령어에 대한 함수 포인터와 명령어와 관련된 몇 가지 추가 속성을 포함하는 master_handler_table이라는 테이블이 있습니다. 그 추가 속성 중 두 가지는 cmd_buf_type과 snp_cmd_buf_enforcement입니다. cmd_buf_type은 명령어 버퍼를 호스트 메모리로 복사하거나 호스트 메모리에서 복사해야 하는지 여부를 결정합니다. snp_cmd_buf_enforcement는 이러한 복사 작업이 명령어 버퍼를 지원하는 메모리가 FIRMWARE 또는 DEFAULT 상태에 있는지 확인하는 검사를 받아야 하는지 여부를 결정합니다. cmd_buf_type이 CMD_BUF_OUTPUT_ONLY, CMD_BUF_INPUT_AND_OUTPUT, 또는 CMD_BUF_INPUT_AND_OUTPUT_ERROR 중 하나인 명령어는 모두 snp_cmd_buf_enforcement가 true로 설정되어야 합니다. 그렇지 않으면 명령어 출력을 다시 쓰면 RMP 보호 영역 내에서 메모리 손상이 발생할 수 있습니다. snp_cmd_buf_enforcement는 한 가지 예외를 제외하고 이러한 모든 명령어에 대해 true입니다. 바로 SEV_MCMD_ID_ATTESTATION입니다. 이 명령어는 cmd_buf_type이 CMD_BUF_INPUT_AND_OUTPUT_ERROR로 설정되어 있지만 snp_cmd_buf_enforcement는 false로 설정되어 있습니다. 결과적으로 RMP로 보호된 메모리를 가리키는 명령어 버퍼로 SEV_MCMD_ID_ATTESTATION을 실행하고 출력이 다시 쓰여질 때 해당 메모리가 손상될 수 있습니다.

SEV_MCMD_ID_ATTESTATION이 왜 예외가 되어야 하는지 알 수 없으며, 오타나 복사-붙여넣기 실수일 가능성이 있어 보입니다.

익스플로잇

SEV_MCMD_ID_ATTESTATION은 명령어 버퍼의 단일 필드 length(4바이트)에만 쓰기 때문에 해당 바이트만 메모리 손상에 사용할 수 있습니다. SEV_MCMD_ID_ATTESTATION은 항상 동일한 값인 0x000000d0을 씁니다. 다행히 명령어 버퍼에 정렬 요구 사항이 없으므로 명령어 버퍼를 반복적으로 이동하여 더 넓은 범위의 연속 메모리를 손상시킬 수 있습니다. 이를 사용하여 게스트 컨텍스트 페이지의 처음 16바이트를 정적 패턴으로 손상시킬 것입니다. 이 처음 16바이트는 UMC 키 시드를 포함하므로 이를 정적 값으로 강제하면 게스트의 암호화 키를 정적 값으로 강제할 수 있습니다.

여기에 제공된 익스플로잇은 SWPSIRT-2684/CVE-2023-31355에 대해 제공한 익스플로잇을 기반으로 합니다.

취약점을 악용하려면 다음 단계를 수행할 수 있습니다:

  1. SEV 또는 SEV-ES 게스트를 실행합니다. 이는 SEV_MCMD_ID_ATTESTATION에 필요합니다. 이 게스트를 계속 실행 상태로 유지합니다.
  2. 피해자 게스트를 위해 주소 0x2000에 게스트 컨텍스트 페이지를 생성합니다. RMP 보호 영역 내의 다른 주소도 가능하지만 고정 주소는 디버깅에 유용합니다.
  3. 취약점을 사용하여 피해자 게스트의 UMC 키 시드를 손상시킵니다.
  4. 피해자 게스트 컨텍스트 페이지를 활성화하고 피해자 게스트를 실행 및 실행합니다.
  5. 피해자 게스트를 폐기합니다.
  6. 공격자 게스트를 위해 주소 0x2000에 게스트 컨텍스트 페이지를 생성합니다. 이는 1단계에서 사용한 것과 동일한 주소여야 합니다.
  7. 취약점을 사용하여 공격자 게스트의 UMC 키 시드를 손상시킵니다.
  8. 공격자 게스트 컨텍스트 페이지를 활성화하고 디버그 플래그를 활성화하여 실행합니다.
  9. 피해자 게스트의 메모리를 공격자 게스트에 할당합니다.
  10. SNP_DBG_ENCRYPT 명령어를 사용하여 공격자 게스트의 컨텍스트 페이지를 사용하여 피해자 게스트의 메모리를 복호화합니다. 피해자 게스트와 공격자 게스트가 UMC 키 시드를 공유하므로 이 작업이 성공합니다.

영향

영향은 최소한 SWPSIRT-2684와 동일해야 합니다. 현재 이 버그가 폐기되기 전에 실행 중인 게스트의 메모리를 복호화하는 데 사용될 수 있는지는 불분명합니다.

완화

snp_cmd_buf_enforcement는 SEV_MCMD_ID_ATTESTATION에 대해 true로 설정되어야 합니다.

흥미롭게도 Linux KVM 호스트 지원 패치는 업데이트할 필요가 없습니다. 왜냐하면 이미 SEV_CMD_ATTESTATION_REPORT를 sev_cmd_buf_writable에서 명령어 버퍼가 FIRMWARE 상태여야 하는 명령어로 나열하고 있기 때문입니다. 다른 하이퍼바이저의 경우 변경이 필요할 수도 있고 필요하지 않을 수도 있습니다.

PoC 사용법

도구 다운로드