
cve-2026-46331-audit script
CVE-2026-46331(일명 pedit COW)에 대한 읽기 전용 감사 스크립트입니다. 이는 Linux 커널의 net/sched act_pedit 동작에서 발생하는 부분적 COW(쓰기 시 복사) 버그로, 로컬의 권한이 없는 사용자가 페이지 캐시 메모리를 손상시키고 루트로 권한을 상승시킬 수 있습니다.
____ _____ ____ ___ _____ ____ _____ __
| _ \| ____| _ \_ _|_ _| / ___/ _ \ \ / /
| |_) | _| | | | | | | | | | | | | \ \ /\ / /
| __/| |___| |_| | | | | | |__| |_| |\ V V /
|_| |_____|____/___| |_| \____\___/ \_/\_/
CVE-2026-46331 net/sched act_pedit partial COW
tcf_pedit_act()는 tcfp_off_max_hint를 사용하여 키 루프 이전에 skb_ensure_writable()에 대한 COW 범위를 한 번 계산합니다. 타입 키는 힌트가 포함하지 않는 런타임 헤더 오프셋을 추가하므로, 결국 쓰기의 일부가 COW 처리된 영역 밖에서 발생하게 됩니다. 결과적으로 공유된 페이지 캐시 페이지가 손상되고, 캐시된 setuid 바이너리(전형적인 대상: /bin/su)가 메모리에서 오염될 수 있습니다. 디스크 상의 해시는 깨끗하게 유지됩니다. 파일 무결성 모니터는 이를 감지하지 못합니다.
Dirty COW(CVE-2016-5195), Dirty Pipe(CVE-2022-0847), Copy Fail(CVE-2026-31431), Dirty Frag(CVE-2026-46300)와 동일한 버그 패밀리입니다. 진입 지점은 다르지만 페이지 소유권 실패는 동일합니다.
완전한 읽기 전용 진단입니다. 모듈을 로드하지 않으며, sysctl을 건드리지 않고, PoC를 실행하지 않습니다. 프로덕션에서 실행해도 안전하도록 설계되었습니다.
act_pedit 접근 가능성을 조사합니다:
lsmod)modinfo)/boot/config-$(uname -r), /proc/config.gz, modules.builtin)modprobe.d의 blacklist 또는 install ... /bin/true 오버라이드로 차단됨tc action pedit 규칙을 나열합니다 (정보 제공, 변경 없음).user.max_user_namespaces, kernel.unprivileged_userns_clone, Ubuntu AppArmor userns 제한./etc/os-release를 기준으로 한 공급업체 패치 매트릭스 휴리스틱 (RHEL 8/9/10, Debian 11/12/13/14, Ubuntu 18.04→26.04, SUSE, Amazon Linux, Arch 계열 롤링).sudo ./cve-2026-46331-audit.sh # 전체 텍스트 보고서
sudo ./cve-2026-46331-audit.sh --json # 기계 판독 가능 JSON, 배너 없음
sudo ./cve-2026-46331-audit.sh --quiet --no-hunt # 대량 스캔용 한 줄 판정
sudo ./cve-2026-46331-audit.sh --since 2026-06-01 # IoC 헌트 기간 확장
sudo ./cve-2026-46331-audit.sh --no-banner # ASCII 배너 없는 텍스트 보고서
전체 실행 결과는 examples/sample-output.txt를, JSON 형식은 examples/sample-output.json을 참조하십시오.
점수는 다음 요소의 가중치 조합입니다:
최대 100으로 제한됩니다. 약 70 이상은 다중 테넌트/CI/Kubernetes 노드에서 긴급으로 처리해야 합니다. 20 미만은 일반적으로 호스트가 괜찮다는 확인입니다.
ansible -i inventory all -m script \
-a "cve-2026-46331-audit.sh --json --quiet --no-hunt" \
--become \
| tee /tmp/audit.jsonl
그런 다음 jq로 집계:
grep -v '^[a-z]' /tmp/audit.jsonl | jq -s 'group_by(.verdict) | map({verdict: .[0].verdict, hosts: length})'
- name: audit CVE-2026-46331
ansible.builtin.script: cve-2026-46331-audit.sh --quiet --no-hunt
register: audit
failed_when: audit.rc == 2
changed_when: false
선호도 순서입니다. 스크립트는 발견된 내용에 따라 적절한 조치를 권장합니다.
# 옵션 1: act_pedit를 사용하지 않는다면 차단합니다.
tc actions list action pedit # 이 작업을 수행하기 전에 반드시 비어 있어야 함
echo 'install act_pedit /bin/true' | sudo tee /etc/modprobe.d/disable-act_pedit.conf
lsmod | grep -q act_pedit && sudo rmmod act_pedit
# 옵션 2: 권한 없는 사용자 네임스페이스를 제한합니다.
# 루트리스 Podman/Docker, 브라우저 샌드박스, Flatpak, 권한 없는 unshare, 일부 CI 샌드박스가 손상됩니다.
sudo sysctl -w user.max_user_namespaces=0 # EL 계열
sudo sysctl -w kernel.unprivileged_userns_clone=0 # Debian/Ubuntu
실제 수정은 공급업체 커널 업데이트 후 재부팅입니다. 재부팅 후 uname -r만이 이를 증명합니다.
이것은 동일한 아키텍처 결함의 다섯 번째 반복입니다. 각각은 직접적인 원인을 수정했지만, 근본 원인은 수정하지 못했습니다: 소유권 경계를 넘어 페이지를 공유하는 제로 카피 빠른 경로에서, 모든 작성자가 바이트를 변경하기 전에 프라이버시를 증명해야 하는 수백 개의 호출 사이트에서 발생하는 문제입니다.
Rust-in-kernel은 소유권 유형을 통해 이러한 클래스를 정확히 해결합니다. 내일 net/sched에는 나타나지 않을 것입니다.
MIT. LICENSE를 참조하십시오.
소유하거나 감사가 명시적으로 허가된 시스템에 대한 공인된 방어 용도로 사용하십시오. 이 스크립트는 공개 PoC를 실행하지 않으며, 시스템 상태를 변경하지 않고, 모듈을 로드하지 않습니다. 판정은 진단(triage)으로 간주해야 하며, 침해 증명 또는 안전 증명으로 간주하지 마십시오.
| CVE | CVE-2026-46331 |
| 구성 요소 | Linux 커널 net/sched / act_pedit |
| 클래스 | 부분적 COW → 페이지 캐시 손상 → LPE |
| 공격 벡터 | 로컬 (CAP_NET_ADMIN, 일반적으로 권한 없는 userns를 통해 획득) |
| 업스트림 영향 범위 | 5.18 .. 7.1-rc6 |
| 업스트림 수정 | 7.1-rc7 |
| 공개 PoC | packet_edit_meme (RHEL 10, Debian 13, Ubuntu 24.04.4에서 확인됨) |
| Red Hat 심각도 | 중요 |
| SUSE CVSS 3.1 | 7.8 (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H) |
auditd 및 journalctl 사용 (--since로 구성 가능한 기간).PATCHED / NOT_APPLICABLE / MITIGATED / VULNERABLE / UNKNOWN.| 코드 | 의미 |
|---|
| 0 | PATCHED 또는 NOT_APPLICABLE (커널이 버그 이전 버전) |
| 1 | MITIGATED (완화 조치 활성화, 커널은 여전히 취약, 패치 권장) |
| 2 | VULNERABLE (하나 이상의 필수 조건 충족, 수정된 커널 없음) |
| 3 | UNKNOWN (공유/CI/Kubernetes 환경에서는 의심스러운 것으로 간주) |
| 4 | ERROR (스크립트 실행 불가; 도구 누락 또는 환경 문제) |
| 신호 | 가중치 |
|---|
공급업체 판정 VULNERABLE | +50 |
공급업체 판정 UNKNOWN | +30 |
act_pedit가 커널에 내장됨 | +25 |
act_pedit 로드 가능, 오버라이드 없음 | +20 |
act_pedit 로드 가능, 오버라이드 활성화 | +5 |
act_pedit 현재 로드됨 | +5 |
| 권한 없는 userns 접근 가능, AppArmor 게이트 없음 | +15 |
| 권한 없는 userns 접근 가능, AppArmor 게이트 활성화 | +8 |
| 헌트 기간 내 IoC 발견 | +10 |
| CVE | 연도 | 서브시스템 | 프리미티브 |
|---|
| CVE-2016-5195 | 2016 | mm | 읽기 전용 매핑에 대한 COW 경쟁 |
| CVE-2022-0847 | 2022 | pipe / splice | pipe_buffer 플래그 누출이 페이지 캐시로 |
| CVE-2026-31431 | 2026 | crypto AF_ALG/AEAD | 읽기 전용 파일 캐시에 대한 제자리 암호화 |
| CVE-2026-46300 | 2026 | XFRM ESP-in-TCP | skbuff 공유 프래그먼트 마커 손실 |
| CVE-2026-46331 | 2026 | net/sched act_pedit | 지연 해결된 타입 키 오프셋으로 인한 부분적 COW |