
CVE-2026-31431을 분석하여, Linux 커널 AF_ALG AEAD 취약점에 대한 안전한 탐지기, 실험실 내 LPE 익스플로잇, 그리고 검증을 위한 QEMU 기반 A/B 커널 실습 환경을 제공합니다.
algif_aead "Copy Fail": 분석CVE-2026-31431(CVSS 3.1 7.8 HIGH,
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)에 대한 보안 연구: AF_ALG AEAD 인터페이스 체인의 세 가지 조합 가능한 설계
결함이 **결정적이고 경쟁 조건이 없는 4바이트 페이지 캐시 쓰기(읽기 가능한 모든 파일의 임의 오프셋)**로 이어집니다 —
디스크 복사본은 깨끗하게 유지되므로 온디스크 체크섬은 아무것도 감지하지 못합니다.
공개 익스플로잇("Copy Fail", Theori/Xint)은 732바이트의 Python으로 이를 로컬
루트(LPE)로 전환합니다. 이 버그는 2017년부터 2026년까지 모든 커널에 존재했습니다.
72548b093ee3(2017)은 _aead_recvmsg가 제자리에서(in-place) 복호화하도록 만들어
요청의 태그 페이지를 쓰기 가능한 대상 SGL에 연결했습니다.splice(file → pipe → socket)은 해당 태그 슬롯에 읽기 가능한 모든 파일의 페이지 캐시 페이지를
공급합니다(제로 카피).authencesn은 4바이트 ESN 스크래치 — 그 값은 sendmsg 페이로드의
AAD[4..8)에 실려 옵니다 — 를 정확히 dst[assoclen + cryptlen],
즉 첫 번째 태그 바이트(선택한 파일 오프셋)에 씁니다. 이는 태그 검증
발생하므로 요청조차도 쓰기를 수행합니다.-EBADMSG| 주장 | 증거 |
|---|---|
| 근본 원인은 블로그가 아닌 수정 커밋과 커널 소스에서 도출됨 | finding-sheet |
| 공개 PoC 디코딩이 syscall 시퀀스에 대해 종단 간 검증됨 | finding-sheet |
| 델타가 정확히 수정 커밋인 랩 A/B 커널, 둘 다 부팅됨 | lab/scripts/build.sh + lab/out/ab-diffstat.txt |
취약 커널이 AF_ALG를 통해 authencesn AEAD 복호화를 실행함(스모크) | lab/scripts/run.sh vuln → SMOKE=ok |
동반 커밋 없는 되돌리기가 crypto_authenc_esn_decrypt에서 패닉 발생(원래 발견) | lab/scripts/run.sh patched → NULL 역참조, 재현 가능 |
| 안전한 탐지기: 취약 커널에서 VULNERABLE(EBADMSG에도 쓰기 발생, 디스크 CLEAN 유지), 전체 수정에서 NOT-DETECTED | 랩의 poc/detector.c → DETECTOR-RESULT 라인 |
| 랩 내 LPE 완결: uid 1000이 SUID 바이너리의 페이지 캐시 4바이트를 패치하고 root 전용 플래그를 읽음; 블록 레벨 debugfs 읽기를 통해 디스크 복사본이 원본임이 입증됨 | poc/lpe.c + lab/rootfs/tools/secretgate.c → LPE-RESULT: ROOT-FLAG-CAPTURED, DISKCLEAN=ok |
| 고정된 랩에서 공개 페이지 캐시 쓰기를 출처 표기와 함께 재현 | 위 탐지기 출력 + lab README |
| SGL 스트레스: 두 커널에서 5가지 형태 — 충돌 없음, 커널 중단 없음(정직한 부정 결과) + 문서화된 AF_ALG 계약 특이점 2건 | 랩의 poc/sgl-stress.c → SGL-STRESS 라인 |
# Docker에서 세 커널 + 도구 + 프로브 디스크 빌드(첫 실행 약 15분)
lab/scripts/build.sh
# A/B/C 오라클 부팅(Docker의 QEMU, 가능하면 KVM)
lab/scripts/run.sh vuln # DETECTOR VULNERABLE + LPE ROOT-FLAG-CAPTURED + DISKCLEAN=ok
lab/scripts/run.sh patchedfull # DETECTOR NOT-DETECTED + LPE NOT-VULNERABLE
lab/scripts/run.sh patched # authencesn NULL 역참조(동반 커밋 수정 격차)
완성된 페이지 캐시 쓰기 체인은 Theori / Xint Code("Copy Fail", 공식 신고자)의
게시된 접근 방식을 출처 표기와 함께 따릅니다 — finding-sheet의
선행 연구 섹션을 참조하세요. 이 저장소의 독창적 작업: 수정 커밋에 고정된 메커니즘
맵, 불완전한 수정 시리즈 발견(동반 커밋 없는 되돌리기의 authencesn 패닉 및 그
안정 릴리스 기간), 우리가 소유하지 않은 파일을 절대 건드리지 않는 안전한
페이지 캐시 대 디스크 차등 탐지기, 특수 제작된 SUID 대상(secretgate — 실제
세계의 바이너리는 절대 대상이 되지 않음)에 대한 랩 내 LPE 완결, SGL 엣지
탐구(정직한 부정 결과 + 문서화된 AF_ALG 계약 특이점 2건), 그리고 8개 수정
커밋 모두의 검증된 브랜치 출처 추적.
| 문서 | 설명 |
|---|---|
| docs/finding-sheet.md | 한 페이지 데이터시트: 버전, CVSS, 근본 원인, 수정 커밋, 공격 표면 |
| docs/report-ptes.md | PTES 구조 보고서(7단계) + 랩 증거 |
| docs/research-writeup.md | 조사 내러티브 — 방법론, 막다른 길, 이식 가능한 교훈, 선행 연구 비교 |
docs/ finding sheet · PTES 보고서 · 연구 기록
poc/ detector.c(안전한 오라클) · lpe.c(랩 내 LPE) · sgl-stress.c(SGL 탐구)
lab/ QEMU 커널 랩: 5.15.203 ± 수정(A/B) + 동반 커밋 이후 5.15.y(C)
lab/rootfs/ secretgate.c — 특수 제작된 SUID 대상(공격 대상이 되는 유일한 것)
72548b093ee3 "crypto: algif_aead - copy AAD from src to dst" (2017)a664bf3d603d "crypto: algif_aead - Revert to operating out-of-place"
(+ 안정 브랜치 백포트 8건 — finding-sheet 참조)교육용 연구 산출물입니다. 소유한 시스템이나 명시적으로 테스트 권한이 부여된 시스템에서만 실행하세요. 이 취약점은 패치되었습니다 — 2026 안정 브랜치 이상의 최신 커널을 실행하세요.