
무기화된 개념 증명(PoC)으로, CVE-2026-43499(GhostLock) — 로컬 권한 상승을 가능하게 하는 Linux 커널 rtmutex 버그를 대상으로 합니다. 배포판별 익스플로잇 체인, 기술 문서, 신뢰성 테스트를 포함합니다.
CVE-2026-43499 (ghostlock)에 대한 무기화 연구입니다.
rtmutex remove_water() 프록시 경로 버그로, 태스크의 pi_blocked_on이 자체 팝된 커널 스택 프레임에 매달리게 됩니다.
버그 클래스와 원본 익스플로잇 전략은 nebusec의 공로입니다 (여기 그들의 글)
이 저장소의 모든 것은 각 배포판별로 제가 직접 작업한 것입니다:
각 커널 계열은 실질적으로 다른 프리미티브가 필요하며, 그래서 이 작업이 매우 흥미롭습니다.
Ghostlock의 트리거는 완전히 권한이 없는 상태에서 가능합니다 (퓨텍스 3개, 스레드 2개, 네임스페이스 없음). 매달린 포인터를 root로 바꾸는 프로세스는 각 배포판마다 다릅니다. 이는 프레임 지오메트리, 완화 조치, 그리고 "알려진 커널 주소에서의 제어된 바이트"의 의미가 모두 다르기 때문입니다. 이 저장소는 대상 계열별 체인을 수집할 것입니다.
| 대상 | 체인 | 스테이징 | 상태 |
|---|---|---|---|
RHEL/CentOS 7 — 3.10.0-1160.102.1.el7 | el7/ — physmap-별칭 페이지 + auxv 페인터 + sched_setscheduler 워크 | 네임스페이스 내 root (권한 있는 컨테이너) | 작동 중, 깨끗한 부팅에서 40/40 스트레스 테스트 |
RHEL/CentOS 7 — 3.10.0-693.el7 | 동일 체인, 측정된 프레임 지오메트리 | 동일 | 구성 요소 10/10 검증 완료; 스트레스 테스트만 대기 중 |
각 하위 디렉토리의 WRITEUP.md에서 전체 기술 분석, 근본 원인, 기본 6.x 시대 체인이 이전되지 않는 이유,
프리미티브 발견 사항, 대신 구축한 것, 측정된 프레임 지오메트리 및 신뢰성 관련 데이터를 확인하세요.
어려운 부분 - 워크는 위조된 웨이터의 ->lock을 발견된 잠금과 대조 검증합니다 (3.10의 BUG_ON(w->lock != lock)), 따라서 알고 있는 주소의 커널 주소 지정 가능 메모리에 가짜 구조체가 필요합니다. 이것이 커널마다 크게 다른 부분입니다 (nebusec이 활용한 6.x 시대 CPU 항목 영역 트릭은 3.10에 존재하지 않으며, el7은 직접 베이스 맵을 무작위화합니다 등). 각 글은 자체 답변을 문서화합니다.
버그 및 트리거: 권한, 사용자 네임스페이스, 그 어떤 것도 필요 없습니다. 모든 로컬 사용자가 작동합니다.
각 무기화는 자체 스테이징을 명시합니다 해당 글에서. el7 체인은 네임스페이스 내 root에서 스테이징됩니다 (실제로: 권한 있는 컨테이너로의 모든 RCE - 이는 MYSQL 인스턴스의 UDF 플러그인 경로를 통해 검증되었으며, 매우 일반적인 위치입니다). 스테이징 후 커널 측 작업은 다음만 사용합니다:
/proc/self/pagemap (네임스페이스 내 CAP_SYS_ADMIN)/proc/kcore (el7의 네임스페이스 내 CAP_SYS_RAWIO)/proc/kallsyms (kptr_restrict=0 또는 CAP_SYSLOG)이들 중 어느 것도 취약점 자체가 아니며, 아직 구축하지 않은 정보 유출을 대신하는 스테이징 편의 기능일 뿐입니다.
특히 el7에서는 구조적 이유로 완전히 권한이 없는 체인이 차단됩니다 (3.10의 BUG_ON, CEA 없음, 커널 .data의 정적 가짜 잠금 쌍 없음, pagemap PFN 게이팅).
el7 글에는 전체 분석과 연구 방향, 주로 헤드 주소 정보 유출 프리미티브가 있습니다.
panic_on_oops=1 호스트에서는 잘못된 워크가 패닉을 일으켜 시스템이 죽을 수 있으므로, 테스트 시 위협 모델의 일부로 취급하세요.el7/
WRITEUP.md el7 체인에 대한 전체 기술 문서
ghostlock_el7.c 테스트된 두 커널 모두를 위한 단일 파일 PoC
3bfdc63936dd ("rtmutex: Use waiter::task instead of current in
remove_waiter()"); NPD 후속 조치 40a25d59e85b