flawopen.com/Teardowns/cve-2026-31431-linux-algif-aead-copy-fail
CVE-2026-31431: Linux 커널 Copy Fail 취약점
Copy Fail은 Linux AF_ALG의 AEAD 경로에 있는 로컬 권한 상승 취약점입니다. in-place 최적화가 소스와 대상 매핑을 혼동했고, 업스트림 수정은 out-of-place 처리를 복원했으며 CISA는 CVE를 KEV에 추가했습니다.[1], [2], [5]
사서가 복사본에 표시해야 하는데 기계의 지름길로 연필이 원본에 닿는 상황을 생각해 보세요. in-place 지름길은 결과용 쓰기가 다른 매핑 페이지에 도달하게 할 수 있었습니다. 수정은 소스와 대상을 분리해 처리합니다.[3], [8]
핵심 개념 및 용어
AEAD- 연관 데이터 인증 암호화: 데이터를 암호화하고 추가 비암호화 메타데이터를 인증합니다.[8]
algif_aead- AEAD용 AF_ALG 구현이며 취약한 소스/대상 처리 경로를 포함합니다.[3]
Page cache- 파일 내용을 위한 커널 메모리 캐시입니다. 매핑 페이지 쓰기는 디스크 기록 전 읽기에 영향을 줄 수 있습니다.[8]
프레임워크 매핑
- 이 가이드에서 설명하는 약점의 CWE 참조: CWE-669 CWE-1288
- CISA KEV — 추가일 2026-05-01 — CVE-2026-31431
근본 원인 분석 (Root Cause)
2017년 변경 72548b093ee3은 algif_aead에 in-place 최적화를 도입했습니다. 소스와 대상은 서로 다른 매핑일 수 있습니다. authencesn은 임시 데이터를 예상 출력 영역 밖에 쓸 수 있고, in-place scatterlist는 splice()로 전달된 파일의 page cache 페이지에 기록할 수 있었습니다. Linux CVE 공지는 associated data 복사를 유지하면서 out-of-place 처리로 되돌리는 것을 수정으로 설명합니다. 로컬 접근과 취약 경로 활성화가 필요합니다. CVSS 7.8(AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)이며 인증 없는 원격 진입점은 아닙니다.[1], [3], [8], [7], [9], [10]
단계별 공격 실행 흐름
쓰기가 출력 경계를 넘음
authencesn의 임시 데이터가 출력 영역 밖에 쓰여 splice()로 전달된 파일의 page cache에 도달할 수 있습니다.[8]
소스 코드 비교: 취약한 구현 vs 보안 패치
개념을 요약한 내용이며 커널 원문 코드나 컴파일 가능한 패치가 아닙니다. 업스트림 공지는 서로 다른 매핑 때문에 associated data 복사는 유지하고 72548b093ee3을 대부분 되돌린다고 설명합니다.[3], [2]
소스 코드 발췌: crypto/algif_aead.c (_aead_recvmsg)
/* 수정 전: 암호화 작업을 같은 버퍼에서 제자리 수행합니다. */
rsgl_src = areq->first_rsgl.sgl.sg;
if (ctx->enc) {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, processed);
af_alg_pull_tsgl(sk, processed, NULL, 0);
} else {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, outlen);
/* 인증 태그용 TX scatterlist를 구성하고 연결합니다. */
areq->tsgl_entries = af_alg_count_tsgl(sk, processed, processed - as);
/* ... */
}
aead_request_set_crypt(&areq->cra_u.aead_req, rsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
/* 수정 후: 요청별 소스 scatterlist를 유지합니다. */
processed = used + ctx->aead_assoclen;
areq->tsgl_entries = af_alg_count_tsgl(sk, processed);
/* areq->tsgl을 할당하고 초기화한 다음 TX 페이지를 여기에 추가합니다. */
af_alg_pull_tsgl(sk, processed, areq->tsgl);
tsgl_src = areq->tsgl;
/* 연관 데이터를 복사하되 소스와 대상은 분리합니다. */
rsgl_src = areq->first_rsgl.sgl.sg;
memcpy_sglist(rsgl_src, tsgl_src, ctx->aead_assoclen);
aead_request_set_crypt(&areq->cra_u.aead_req, tsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓배포판 지원 경로로 커널을 업데이트하고 패키지 공지에서
CVE-2026-31431수정 여부를 확인하세요. 일반 upstream 버전만으로 판단하지 마세요.[1], [5], [7] - ✓공유 커널과 신뢰할 수 없는 로컬 사용자가 있는 다중 테넌트 호스트, 빌드 워커, 컨테이너 노드를 우선 처리하세요.[5], [7]
- ✓즉시 업데이트할 수 없다면 OS 공급업체가 문서화한 완화책만 적용하고 영향을 검증하세요. 코드가 커널에 내장됐을 수 있습니다.[5], [7]
- ✓불변 이미지 및 백포트가 적용된 LTS 분기를 포함해 전체 커널 목록과 패키지 출처를 검토하세요.[5], [7]
- ✓컨테이너는 호스트 커널을 공유하므로 로컬 권한 상승은 namespace 격리를 약화할 수 있습니다.[5], [8]
- ✓패치 후 공급업체 백포트를 추적하고 미수정 호스트를 해결 과제로 관리하세요. KEV 등재는 패치를 대신하지 않습니다.[1], [5]
출처
- Linux kernel CVE notice for CVE-2026-31431
- Upstream stable patch: revert algif_aead to out-of-place operation
- Stable patch source with the algif_aead.c code diff
- CVE record and CVSS vector
- Canadian Centre for Cyber Security alert AL26-009
- CISA Known Exploited Vulnerabilities catalog entry
- Red Hat CVE analysis and affected product status
- Xint technical disclosure: Copy Fail — 732 Bytes to Root on Linux
- MITRE CWE-1288: Improper Validation of Consistency within Input
- MITRE CWE-669: Incorrect Resource Transfer Between Spheres
- NVD — CVE-2026-31431 weakness mapping (source: redhat-SADP)