
비파괴적 탐지기로, XCP-ng 8.3 Dom0에서 CVE-2026-31431(Copy Fail) 로컬 권한 상승 취약점을 탐지하며, 페이지 캐시 손상 테스트를 통해 커널 취약점을 검증합니다.
CVE-2026-31431("Copy Fail")에 대한 안전하고 비파괴적인 탐지 스크립트로, 2026년 5월 5일 보안 업데이트 이전의 XCP-ng 8.3 LTS에서 검증되었습니다.
⚠️ 승인된 사용만 허용됩니다. 이 스크립트는 소유한 시스템 또는 명시적으로 테스트 승인을 받은 시스템에서만 실행하십시오.
CVE-2026-31431은 "Copy Fail"로 불리며, Linux 커널의 algif_aead 암호화 인터페이스에서 발생하는 로컬 권한 상승(LPE) 취약점입니다. 2017년에 도입된 authencesn 템플릿의 논리적 결함으로 인해 권한이 없는 로컬 사용자가 읽기 가능한 모든 파일의 커널 페이지 캐시에 통제된 4바이트 쓰기를 수행할 수 있으며, 이를 통해 root로 권한을 상승시킬 수 있습니다.
a664bf3d603dXCP-ng의 Dom0 제어 도메인은 Linux 커널에서 실행되며 하이퍼바이저 관리 계층입니다. CI/CD 파이프라인, 모니터링 에이전트, 백업 도구 또는 자동화를 위해 생성된 서비스 계정을 포함하여 Dom0에 셸 액세스 권한이 있는 모든 권한 없는 사용자는 이 취약점을 악용하여 root 권한을 얻을 수 있습니다. Dom0에서 root 권한을 얻으면 해당 호스트의 모든 게스트 VM이 손상됩니다.
기본 XCP-ng 설치에서는 비-root 사용자로 실행되는 프로세스가 거의 없으므로 노출 범위가 최소화됩니다. 실제 위험은 운영자가 셸 액세스를 제한하지 않고 합법적인 목적으로 서비스 계정을 추가함에 따라 시간이 지나면서 누적됩니다.
Dom0 서비스 계정을 감사하십시오:
awk -F: '$7 ~ /bash|sh/' /etc/passwd
이것은 실험실 탐지기이며 권한 상승 도구가 아닙니다. 다음을 수행합니다:
algif_aead / authencesn 페이지 캐시 스크래치 쓰기 프리미티브 트리거 시도시스템 바이너리, /etc/passwd 및 기타 시스템 파일은 절대 건드리지 않습니다. 페이지 캐시 손상은 메모리 내에서만 발생하며 디스크에 기록되지 않습니다.
os.splice 필요)python3 xcp_ng_cve_2026_31431_tester.py
| 코드 | 의미 |
|---|---|
0 | 손상이 관찰되지 않음 — 시스템이 패치되었거나 algif_aead가 비활성화되었을 가능성이 있음 |
1 | 트리거 오류 — algif_aead를 사용할 수 없거나 차단되었을 수 있음 |
2 | 취약함 — 페이지 캐시 손상 확인됨 |
참고: 패치된 시스템에서 종료 코드
1은 스크립트 오류가 아닌 예상된 동작입니다.authencesn이 커널 수준에서 비활성화된 경우(XCP-ng 5월 5일 수정에서와 같이) 소켓 바인드가 실패하고 스크립트는 코드1로 종료됩니다.
| 날짜 | 이벤트 |
|---|---|
| 2026년 4월 29일 | CVE-2026-31431 공개 공개 |
| 2026년 5월 4일 | VATES가 VSA-2026-013 게시 |
| 2026년 5월 5일 | XCP-ng 8.3 LTS 5월 보안 업데이트 출시 — 커널 수정 제공 |
XCP-ng 호스트를 업데이트하고 재부팅하십시오:
yum update
reboot
재부팅 후 업데이트된 커널이 실행 중인지 확인하십시오:
uname -r
패치 적용 후 이 탐지 스크립트를 다시 실행하십시오. 패치된 시스템은 취약한 authencesn 템플릿이 더 이상 없으므로 종료 코드 1(트리거 오류)을 반환합니다.
참고: XCP-ng 수정은 취약한
authencesn구성 요소를 제거한 결과로 IPSec ESN 지원을 비활성화합니다. 대부분의 환경에서 실질적인 영향은 없습니다. VATES는 향후 패치에서 적절한 수정으로 이 기능을 복원할 수 있다고 밝혔습니다.
완화 조치를 적용하기 전에 algif_aead가 모듈(=m)로 컴파일되었는지 또는 커널에 내장(=y)되었는지 확인하십시오:
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
=m — 모듈 기반; modprobe 블랙리스트가 작동함=y — 커널에 내장됨; modprobe 블랙리스트는 조용히 실패하며 보호 기능을 제공하지 않음=y인 RHEL 계열 커널의 경우 대신 grubby 부팅 매개변수를 사용하십시오:
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
이 스크립트는 rootsecdev의 원본 작업을 수정한 파생물입니다. 재배포 전에 업스트림 저장소의 라이선스를 확인하고 사용이 해당 조건을 준수하는지 확인하십시오.
이 스크립트는 2026년 5월 5일 기준 패치되지 않은 커널을 실행하는 XCP-ng 8.3 LTS에서 검증되었습니다. 아직 적용하지 않았다면 공식 VATES 보안 업데이트를 즉시 적용하십시오.