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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-31431 — CVE-2026-31431 분석 및 완화 가이드: Linux 커널 crypto algif_aead 하위 시스템의 로컬 권한 상승 취약점으로, RHEL 및 OpenShift에 대한 영향 평가와 seccomp 및 SCC 강화를 포함합니다. | Kitploit
도구/GitHubGitHub/slauger/cve-2026-31431
Privilege EscalationContainer SecurityVulnerability AnalysisExploitationCloud Security
GitHubslauger/cve-2026-31431

CVE-2026-31431

CVE-2026-31431 분석 및 완화 가이드: Linux 커널 crypto algif_aead 하위 시스템의 로컬 권한 상승 취약점으로, RHEL 및 OpenShift에 대한 영향 평가와 seccomp 및 SCC 강화를 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-31431 — "Copy Fail"

Linux 커널 crypto algif_aead 서브시스템의 로컬 권한 상승 취약점.

개요

CVE-2026-31431, 일명 "Copy Fail"은 Linux 커널의 authencesn 암호화 템플릿(algif_aead)에 존재하는 로직 버그입니다. 이 취약점으로 인해 권한이 없는 로컬 사용자가 읽기 가능한 모든 파일의 페이지 캐시에 통제된 4바이트 쓰기를 수행할 수 있으며, 이를 활용하여 setuid 바이너리를 변조하고 루트 권한을 획득할 수 있습니다.

  • CVSS: 7.8 (High)
  • 영향 범위: 2017년 이후 출시된 모든 주류 Linux 커널
  • 익스플로잇: 732바이트 Python 스크립트 — 레이스 컨디션 없음, 커널별 오프셋 불필요
  • 수정: 메인라인 커밋 a664bf3d603d

타임라인

날짜이벤트
2026-03-23Linux 커널 보안 팀에 보고
2026-04-01메인라인에 패치 커밋
2026-04-22CVE 지정
2026-04-29공개 공개

영향 매트릭스

이 익스플로잇은 두 가지를 요구합니다: AF_ALG 소켓(모든 seccomp 프로필에서 기본적으로 허용됨)과 setuid 바이너리(예: /usr/bin/su). 핵심 완화 조치는 allowPrivilegeEscalation: false입니다 — 이는 Linux 커널의 no_new_privs 플래그를 prctl(PR_SET_NO_NEW_PRIVS, 1)을 통해 설정하며, 이로 인해 커널은 execve() 시 setuid/setgid 비트를 무시합니다. 익스플로잇이 변조된 setuid 바이너리 실행에 의존하므로, 이는 최종 권한 상승 단계를 차단합니다.

이는 OpenShift 전용 기능이 아닙니다 — 바닐라 Kubernetes(Pod Security Standards Restricted), Docker(--security-opt no-new-privileges), Podman에서도 동일하게 작동합니다. OpenShift는 단순히 restricted-v2 SCC를 통해 기본적으로 이를 강제하는 반면, 다른 플랫폼은 명시적 구성이 필요합니다.

RHEL 8 / RHEL 9

RHEL 8 및 RHEL 9는 취약한 코드가 포함된 커널을 제공합니다. 셸 접근 권한이 있는 권한 없는 로컬 사용자는 이를 악용하여 루트 권한을 획득할 수 있습니다. 즉시 패치하십시오.

root@kitploit:~
yum updateinfo list cves CVE-2026-31431
yum update kernel

OpenShift (4.x)

OpenShift는 취약한 커널을 제공하는 RHCOS에서 실행됩니다. 실제 영향은 워크로드의 SCC(Security Context Constraints)에 따라 달라집니다.

기본 restricted-v2 SCC를 사용하는 표준 워크로드는 allowPrivilegeEscalation: false가 강제되므로 악용할 수 없습니다.

상승된 SCC(anyuid, privileged, 또는 allowPrivilegeEscalation: true를 허용하는 사용자 정의 SCC)로 실행되는 Pod는 취약합니다. 여기에는 일반적으로 다음이 포함됩니다:

  • CI/CD 빌드 Pod (Jenkins 에이전트, 사용자 정의 SCC를 사용하는 Tekton)
  • anyuid가 필요한 레거시 애플리케이션
  • 인프라 Pod (모니터링, 로깅, 스토리지)

직접 노드 접근(예: oc debug node/ 사용)은 항상 취약합니다 — 표준 로컬 권한 상승이며, 컨테이너 격리가 관련되지 않습니다.

테스트

클러스터에서 익스플로잇 전제 조건이 충족되는지 확인하기 위한 테스트 Pod가 제공됩니다. 이는 취약점을 악용하려고 시도하지 않습니다 — 다음만 확인합니다:

  1. AF_ALG 소켓을 생성할 수 있습니까? (커널 공격 표면 도달 가능)
  2. no_new_privs가 설정되어 있습니까? (setuid 권한 상승 차단)
  3. 컨테이너 이미지에 setuid 바이너리가 있습니까?
  4. 기본 노드의 커널 버전

사용법 (Pod)

root@kitploit:~
oc apply -f test-pod.yaml
oc logs cve-2026-31431-check
oc delete -f test-pod.yaml

사용법 (Deployment)

Deployment 변형을 사용하여 복제본 확장 또는 Pod 안티-어피니티를 통해 여러 노드에서 테스트할 수 있습니다:

root@kitploit:~
oc apply -f test-deployment.yaml
oc logs -l app=cve-2026-31431-check
oc delete -f test-deployment.yaml

종료 코드

코드의미
0악용 불가 — AF_ALG 소켓이 seccomp에 의해 차단됨
1부분 노출 — AF_ALG 도달 가능하지만 setuid가 no_new_privs에 의해 차단됨
2취약 — 모든 익스플로잇 전제 조건 충족

기본 OpenShift에서의 예상 결과

restricted-v2 SCC를 사용하는 표준 OpenShift 클러스터에서는 종료 코드 1(부분 노출)이 표시되어야 합니다: AF_ALG 소켓을 생성할 수 있지만(RuntimeDefault seccomp는 이를 차단하지 않음), no_new_privs가 setuid 권한 상승 단계를 방지합니다. 공개된 PoC는 작동하지 않지만, 커널 수준 취약점은 여전히 도달 가능합니다 — 패치가 권장됩니다.

완화 조치

1. 커널 패치 (P0)

이것이 유일한 완전한 수정입니다. 모든 노드의 커널을 업데이트하고 재부팅하십시오.

OpenShift의 경우, 수정 사항이 포함된 RHCOS 버전으로 업데이트하고 롤링 노드 재부팅을 수행하십시오.

2. algif_aead 모듈 비활성화 (임시 해결책)

algif_aead가 로드 가능한 모듈(CONFIG_CRYPTO_USER_API_AEAD=m)로 컴파일된 경우:

root@kitploit:~
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true

algif_aead가 내장(=y)된 경우에는 작동하지 않습니다, 이는 RHCOS의 경우입니다. 다음으로 확인하십시오:

root@kitploit:~
modinfo algif_aead 2>&1 | grep builtin
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)

3. seccomp를 통한 AF_ALG 차단 (OpenShift)

커널 모듈이 내장된 경우, 패치 전 컨테이너를 위한 유일한 완화 조치는 사용자 정의 seccomp 프로필을 통해 socket(AF_ALG, ...) syscall을 차단하는 것입니다.

MachineConfig를 통한 seccomp 프로필 배포

모든 노드에 프로필을 배치하기 위한 MachineConfig를 생성합니다(컨트롤 플레인 노드의 경우 role: master로 반복):

root@kitploit:~
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 99-worker-seccomp-deny-af-alg
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - path: /var/lib/kubelet/seccomp/deny-af-alg.json
          mode: 0644
          contents:
            source: data:application/json;charset=utf-8;base64,ewogICJkZWZhdWx0QWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIiwKICAic3lzY2FsbHMiOiBbCiAgICB7CiAgICAgICJuYW1lcyI6IFsic29ja2V0Il0sCiAgICAgICJhY3Rpb24iOiAiU0NNUF9BQ1RfRVJSTk8iLAogICAgICAiYXJncyI6IFsKICAgICAgICB7CiAgICAgICAgICAiaW5kZXgiOiAwLAogICAgICAgICAgInZhbHVlIjogMzgsCiAgICAgICAgICAib3AiOiAiU0NNUF9DTVBfRVEiCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXQp9

base64 콘텐츠는 다음으로 디코딩됩니다:

root@kitploit:~
{
  "defaultAction": "SCMP_ACT_ALLOW",
  "syscalls": [
    {
      "names": ["socket"],
      "action": "SCMP_ACT_ERRNO",
      "args": [
        {
          "index": 0,
          "value": 38,
          "op": "SCMP_CMP_EQ"
        }
      ]
    }
  ]
}

참고: MachineConfig 적용 시 롤링 노드 재부팅이 트리거됩니다.

Pod 사양에서 프로필 참조

root@kitploit:~
securityContext:
  seccompProfile:
    type: Localhost
    localhostProfile: deny-af-alg.json

클러스터 전체 대안

Pod 사양을 수정하지 않고 모든 컨테이너를 보호하려면, 기존 프로필에 AF_ALG 필터 규칙을 추가하여 MachineConfig를 통해 CRI-O 기본 seccomp 프로필(/etc/crio/seccomp.json)을 재정의하십시오.

4. SCC 감사

상승된 권한으로 실행되는 Pod 식별:

root@kitploit:~
# restricted-v2를 사용하지 않는 Pod 찾기
oc get pods -A -o json | jq -r '
  .items[] |
  select(.metadata.annotations["openshift.io/scc"] != "restricted-v2") |
  "\(.metadata.namespace)/\(.metadata.name) → \(.metadata.annotations["openshift.io/scc"])"
'

이것들이 전체 익스플로잇 체인이 작동하는 Pod입니다. 이러한 워크로드를 실행하는 노드에 대해 패치 또는 seccomp 완화를 우선적으로 적용하십시오.

AF_ALG 비활성화의 영향

AF_ALG 소켓 차단은 대부분의 워크로드에 무시할 수 있는 영향을 미칩니다. 다음은 영향을 받지 않습니다:

  • dm-crypt / LUKS
  • kTLS
  • IPsec
  • OpenSSL / GnuTLS (표준 빌드)

OpenSSL afalg 엔진을 사용하도록 명시적으로 구성된 애플리케이션만 영향을 받습니다.

참고 자료

  • Copy Fail — 프로젝트 페이지
  • Red Hat CVE-2026-31431
  • NVD — CVE-2026-31431
  • RuntimeDefault는 AF_ALG를 차단하지 않음 (juliet.sh)
  • Xint — Copy Fail 분석
  • The Register — Linux 암호화 코드 결함
도구 다운로드
환경allowPrivilegeEscalation컨테이너 루트호스트 루트위험도
RHEL 8 / RHEL 9 (로컬 사용자)n/an/a예치명적
OpenShift 노드 (셸 접근, 예: oc debug node/)n/an/a예치명적
OpenShift Pod — restricted-v2 SCC (기본값)false아니요아니요낮음
OpenShift Pod — anyuid SCCtrue예아니요 (네임스페이스 격리)높음
OpenShift Pod — privileged SCCtrue예예 (격리 없음)치명적
OpenShift Pod — 사용자 정의 SCC상황에 따라 다름상황에 따라 다름상황에 따라 다름감사 필요
Kubernetes Pod — PSS Restrictedfalse아니요아니요낮음
Kubernetes Pod — PSS Baseline / 정책 없음true (기본값)예아니요높음
Docker / Podman — --security-opt no-new-privilegesfalse아니요아니요낮음
Docker / Podman — 기본값true예아니요높음