시스템별 CVE 영향도 / 패치 상태 / 조치 진행 / 조치결과 검증을 단일 Go 바이너리 로 자동화하는 CLI 감사 도구.
Audit CVE impact, remediation, and verification across systems with a single static Go binary.
본 도구는 임시 조치(모듈 차단, 설정 토글 등) 경로에 집중한다. 영구 조치(패키지 업데이트)는 사용자가 배포판 패키지 매니저로 별도 적용해야 한다. 정책: 도구가 자동 실행하는 것은 임시조치뿐이며
apt/dnf/zypper는 호출하지 않는다 — 패키지 업데이트가 불가한 상황에서 즉시 적용 가능한 조치를 제공하는 것이 본 도구의 역할.
최근 점검 — 2026-09-27. 새 릴리즈가 없는 기간에도 CISA KEV / NVD 신규 등재를 주기적으로 살펴
doc/CVE-STATUS.md의 §1~§4 분류에 반영한다. 자동 처리(§1) 추가가 없는 점검도 같은 문서 "변경 이력"에 한 줄 기록 — 운영자가 "그 사이 새 위협이 있었는지·없었는지"를 단일 출처로 확인할 수 있도록 한다.
| 구분 | 건수 | 확인 명령 |
|---|---|---|
| 직접 차단 (§1) — 도구가 겨냥해 임시조치를 적용하는 CVE | 15건 | cpa --list |
| 부수 차단 (§2) — 같은 조치에 얹혀 함께 막히는 CVE | 89건 | cpa --covered |
| 전체 차단 (§1 + §2) | 104건 |
§2 89건은 대표 항목 16건 + 같은 차단 경로로 함께 막히는 동반 CVE 73건이다 (
cifs경로 41건 ·openvswitch경로 7건 ·sctp경로 9건 ·kafs(rxrpc 의존) 경로 4건 · userns 전제 kernelCTF 익스플로잇 12건). 동반 CVE 는 차단 근거와 caveat 이 대표 항목과 같아doc/CVE-STATUS.md§2 에서 대표 항목에 누적 기록하지만, 실제로 차단되는 CVE 이므로 건수에는 그대로 포함한다.§2 는 §1 조치가 실제로 걸려 있는 호스트에서만 성립한다(활성 사용 게이트로 조치가 Skip 되면 성립하지 않음). 위 89건은 전체 목록이고, 내 호스트에서 지금 몇 건이 실제로 막혀 있는지는
cpa --covered가 assess 를 돌려 판정해 알려준다. §2 중 CVE-2026-53362(ipv6_frag_escape)는 CISA KEV 등재분(2026-08-27)이고, CVE-2026-74469(DiagSpill)는 공개 root PoC 보유분(2026-09-18)이다. 2026-09-27 증가분 46건 = 그 주 NVD 재판정 sweep 32건 + Google kernelCTF 제출 익스플로잇 소급 분류 14건 (userns 전제 13건은 Stage 17, AF_ALG 경유 authencesn 1건은 Stage 3/11 이 막는다 — 전부 동작하는 익스플로잇이 있다).
| CVE | 별칭 | 영향 컴포넌트 | 임시 조치 (도구 자동) |
|---|---|---|---|
| CVE-2026-31431 | Copy Fail (CISA KEV 2026-05-01) | Linux 커널 algif_aead (AF_ALG + splice) |
로더블(=m): 모듈 차단·언로드 · built-in(=y, RHEL 흔함, Stage 11): grubby --update-kernel=ALL --args=initcall_blacklist=algif_aead_init + 재부팅 |
| CVE-2026-43284 | Dirty Frag #1 | Linux 커널 esp4/esp6 (IPsec) |
두 모듈 차단·언로드 (IPsec 사용 환경 주의) |
| CVE-2026-43500 | Dirty Frag #2 | Linux 커널 rxrpc/afs |
두 모듈 차단·언로드 |
| CVE-2026-46300 | Fragnesia | Linux 커널 XFRM ESP-in-TCP (esp4/esp6/rxrpc) |
세 모듈 차단·언로드 (43284/43500과 모듈 일부 공유) |
| CVE-2026-23918 | Apache HTTP/2 double-free | Apache HTTPD mod_http2 (< 2.4.67) — Stage 12 추가 |
<IfModule http2_module>Protocols http/1.1</IfModule> 드롭인 conf + systemctl reload (모듈은 적재 유지, HTTP/2 협상만 차단) |
| CVE-2026-46333 | ssh-keysign-pwn (ptrace exit-race) | Linux 커널 __ptrace_may_access() (Yama LSM) — Stage 13 추가 |
/etc/sysctl.d/cpa-cve-2026-46333.conf 드롭인 + sysctl -w kernel.yama.ptrace_scope=2 (즉시 적용 + 재부팅 후 유지). ⚠ 부분 차단 — 벤더 커널 패치 권장 |
| CVE-2026-46243 | CIFSwitch | Linux 커널 CIFS 클라이언트 cifs.spnego upcall (cifs 모듈) — Stage 14 추가 |
install cifs /bin/false + blacklist cifs + modprobe -r cifs. ⚠ 활성 CIFS/SMB 마운트가 있으면 미적용(언로드 시 마운트 끊김) — 커널 업데이트 또는 언마운트 후 재실행 |
| CVE-2026-46331 | Pedit COW | Linux 커널 tc act_pedit 패킷 에디터 액션 (페이지 캐시 손상 LPE) — Stage 16 추가 |
install act_pedit /bin/false + blacklist act_pedit + modprobe -r act_pedit. ⚠ 활성 tc pedit 사용 시 미적용(차단 시 tc 규칙 손상) — 커널 업데이트 또는 액션 제거 후 재실행 |
| CVE-2026-53264 | net/sched tc_action UAF | Linux 커널 net/sched/act_api.c tc action UAF LPE (코어, 모듈 아님) — Stage 17 추가 |
userns 차단 sysctl(user.max_user_namespaces=0 · Debian/Ubuntu kernel.unprivileged_userns_clone=0 우선) 드롭인 + sysctl -w. ⚠ 활성 userns 사용 시 미적용(rootless 컨테이너/샌드박스 파손 방지) — 커널 업데이트 또는 userns 중단 후 재실행 |
| CVE-2026-64531 | OVSwrap | Linux 커널 Open vSwitch 데이터패스 nla_len(u16) 정수 오버플로 → 메모리 손상 LPE (openvswitch 모듈) — Stage 18 추가 |
install openvswitch /bin/false + blacklist openvswitch + modprobe -r openvswitch. ⚠ 활성 OVS 데이터패스 사용 시 미적용(호스트 네트워킹 절단 방지) — 커널 업데이트 또는 OVS 중단 후 재실행. ⚠ 모듈이 자동 로드(Generic Netlink family 해석)되므로 미로드 호스트도 취약으로 판정 |
| CVE-2026-64564 | SCTPhantom | Linux 커널 SCTP ASCONF transport use-after-free → LPE·컨테이너 탈출 (sctp 모듈) — Stage 19 추가 |
install sctp /bin/false + blacklist sctp + modprobe -r sctp (Red Hat 공식 권고와 동일한 형태). ⚠ 활성 SCTP 사용 시 미적용(SIGTRAN 등 응용 중단 방지). ⚠ 자동 로드(SCTP 소켓 생성)되므로 미로드 호스트도 취약 — 단 모듈 파일이 없으면(RHEL 계열 kernel-modules-extra 미설치) 자동 로드 불가로 OK 판정 |
| CVE-2026-53266 | ebt_snat ARP rewrite (CISA KEV) | Linux 커널 ebtables SNAT 타깃의 ARP 송신 MAC 재작성이 splice 페이지에 직접 write → 페이지 캐시 손상 (ebt_snat 모듈) — Stage 21 추가 |
install ebt_snat /bin/false + blacklist ebt_snat + modprobe -r ebt_snat. ⚠ SNAT 규칙 사용 시 미적용(브리지 SNAT 손상 방지). ⚠ 자동 로드에 CAP_NET_ADMIN 이 필요하지만 비특권 userns·컨테이너로 얻을 수 있고 KEV 등재분이라 미로드 호스트도 취약 판정 — 모듈 파일이 없으면 OK |
| CVE-2026-68121 | PPPoEject | Linux 커널 pppoe_sendmsg() stale skb head UAF → LPE (pppoe 모듈, 공개 root PoC) — Stage 22 추가 |
install pppoe /bin/false + blacklist pppoe + modprobe -r pppoe. ⚠ 활성 PPPoE 세션 시 미적용. ⚠ 비특권 PPPoE 소켓 생성으로 자동 로드되므로 미로드 호스트도 취약 판정 — 모듈 파일이 없으면 OK. 공용 pppox 는 건드리지 않음 |
| CVE-2026-80844 | DirtyAH6 | Linux 커널 IPv6 AH ipv6_rearrange_rthdr() 의 segments_left 미검증 → LPE (ah6 모듈, 공개 root PoC) — Stage 23 추가 |
install ah6 /bin/false + blacklist ah6 + modprobe -r ah6. ⚠ IPv6 AH SA 사용 시 미적용(AH 를 쓰는 호스트가 곧 원격 crash 노출 호스트라 커널 업데이트 필요). 자동 로드에 CAP_NET_ADMIN 이 필요해 미로드는 OK(차단 권장). ⚠ esp4/esp6 차단으로는 안 막힘 |
| CVE-2026-23274 | xt_IDLETIMER ALARM label reuse | Linux 커널 xt_IDLETIMER rev0 규칙이 rev1 ALARM 타이머 라벨을 재사용 → 미초기화 timer_list 조작 LPE (kernelCTF 익스플로잇) — Stage 24 추가 |
install xt_IDLETIMER /bin/false + blacklist xt_IDLETIMER + modprobe -r xt_IDLETIMER. ⚠ IDLETIMER 규칙 사용 시 미적용. 자동 로드에 CAP_NET_ADMIN 이 필요해 미로드는 OK(차단 권장). ⚠ RHEL 9 는 벤더 수정 보류(Fix deferred) 라 이 차단이 사실상 유일한 대책 |
처음 4개 CVE는 Linux 커널 모듈 LPE, CVE-2026-23918은 첫 비-커널(데몬) 사례, CVE-2026-46333은 첫 비-모듈 커널 CVE(Yama LSM sysctl), CVE-2026-46243(CIFSwitch)은 모듈 차단(Pattern A)에 활성 사용 게이트를 처음 결합한 사례, CVE-2026-46331(Pedit COW)은 §1 Dirty Frag 패밀리(페이지 캐시 손상 LPE)에 tc pedit 사용 게이트를 적용한 사례, CVE-2026-53264(net/sched tc_action UAF)는 취약 코드가 tc 코어(모듈 아님)라 모듈 차단 대신 userns 차단 sysctl + 활성 userns 게이트를 쓴 첫 사례, CVE-2026-64531(OVSwrap)은 Pattern A로 복귀하면서 모듈이 자동 로드되는 탓에 "미로드"도 안전이 아니라고 판정하는 첫 사례, CVE-2026-64564(SCTPhantom)은 거기에 "모듈 파일이 아예 없으면 취약이 아니다" 판정을 더한 첫 사례(RHEL 계열 kernel-modules-extra 분리 — 커널 버전만 보면 과잉 보고가 된다). CVE-2026-53266(ebt_snat)은 자동 로드에 CAP_NET_ADMIN 이 필요한데도 KEV 등재 + 차단 비용 0 을 근거로 미로드를 취약으로 판정한 첫 사례(act_pedit 판정과 가르는 기준을 문서화). CVE-2026-68121(PPPoEject)·-80844(DirtyAH6)·-23274(xt_IDLETIMER)은 같은 틀을 그대로 쓴 추가분으로, 비특권 자동 로드인 PPPoEject 는 "미로드도 취약", CAP_NET_ADMIN 뒤에서만 적재되는 DirtyAH6·xt_IDLETIMER 는 act_pedit 처럼 "미로드 = OK(차단 권장)" 으로 판정한다(판정이 OK 여도 조치 시 차단은 적용). 영구 해결은 모두 벤더 패키지 업데이트.
본 도구가 검토한 CVE는 4가지로 분류한다. 위 "지원하는 CVE" 표는 §1만 보여주며, 나머지 분류·근거·출처는 doc/CVE-STATUS.md에서 단일 색인으로 관리한다.
| § | 분류 | 현재 항목 (2026-09-27) | cpa --list |
|---|---|---|---|
| §1 | 처리 반영 (Implemented) | 위 표의 15건 | ✅ 노출 |
| §2 | 영향 있으나 이미 차단됨 | CVE-2026-31635 (DirtyDecrypt) — rxrpc 변종, CVE-2026-43500/46300 임시조치로 함께 차단 · CVE-2026-49975 (HTTP/2 Bomb, oss-sec 2026-06-03) — Apache 경로는 Stage 12 (CVE-2026-23918) Protocols http/1.1 드롭인이 HTTP/2 협상 자체를 차단하므로 함께 차단 · CVE-2026-43503 (DirtyClone, SKB shared-frag LPE) — §1 esp4/esp6 차단(CVE-2026-43284/46300)이 ESP 경유 시연 익스플로잇을 함께 차단; 단 결함은 범용 skb라 커널 패치 필수 (최종 검토 2026-06-28) · CVE-2026-64597 / -64598 (커널 SMB 클라이언트 double-free / 잘못된 에러 포인터, 9.8·8.8) — 결함이 cifs 모듈에 있어 §1 CVE-2026-46243(Stage 14) 차단으로 함께 차단; ⚠ 단 Stage 14 는 활성 SMB 마운트 시 Skipped 되고 노출 호스트가 정확히 그 호스트라 SMB 운영 시 커널 업데이트 필수 (2026-08-14) · CVE-2026-72338 (tc act_pedit TOCTOU heap OOB write, ZDI 제보) — 결함 모듈 act_pedit 은 §1 Stage 16(Pedit COW)이, 무기화에 필요한 CAP_NET_ADMIN 획득 경로(userns)는 §1 Stage 17(53264)이 차단하는 이중 차단 첫 사례; ⚠ 두 조치 다 Skip 되는 호스트는 커널 업데이트 필수 · CVE-2026-74465 (Open vSwitch meter attach UAF, ZDI 제보) — §1 Stage 18(OVSwrap) openvswitch 차단으로 함께 차단, 68123·74464·31678(2026-09-11 추가) 도 본 항목에 포함 추적 (2026-08-21) · 🔴 CVE-2026-53362 (ipv6_frag_escape — IPv6 fraggap heap OOB → 컨테이너 탈출→호스트 root, 공개 PoC, CISA KEV 2026-08-27 / FCEB 08-30) — 익스플로잇이 비특권 userns 를 전제하고 Red Hat(RHSB-2026-009)·CIQ 공식 임시조치 user.max_user_namespaces=0 가 §1 Stage 17(53264) 의 knob 과 동일해 함께 차단 (§2 중 벤더 공식 완화와 §1 조치가 일치하는 첫 사례); ⚠ Stage 17 은 활성 userns 시 Skipped 라 rootless Podman·컨테이너 운영 호스트는 커널 업데이트 필수 (2026-08-28) · CVE-2026-52924 / -52929 / -68162 / -68376 (커널 SCTP 4건 — stale COOKIE-ECHO outqueue 9.8 · add-stream 롤백 미완 7.5 · auth_enable sysctl UAF 7.8 · sctp_cookie.auth_hmacs 크기 오산 8.1) — 전부 sctp 모듈이라 §1 CVE-2026-64564(SCTPhantom, Stage 19) 차단으로 함께 차단; NebuSec 이 2026-09-07 oss-sec 에 공개 익스플로잇과 함께 드롭한 22건 배치 중 5건이 이미 cpa 차단 범위 안이었다(나머지 1건은 위 openvswitch 31678); ⚠ Stage 19 는 활성 SCTP 사용 시 Skipped 라 SCTP 운영 호스트는 커널 업데이트 필수 (2026-09-11) · [2026-09-20 신규 5건] 🔴 CVE-2026-74469 (DiagSpill — SCTP transport_count 16비트 wrap → sctp_diag 응답 밖으로 약 8 MiB 유출, 비특권→root, 공개 PoC) — sctp_diag.ko 가 sctp.ko 에 모듈 의존하므로 §1 Stage 19 차단으로 함께 차단; quartet 4건 중 Stage 17(userns) 이 못 막는 유일한 건인데 모듈 차단이 별개 축으로 덮은 사례 · CVE-2026-80994 / -89488 (openvswitch flow mask UAF · CT limit teardown UAF, 각 7.8) — Stage 18 경로, 89488 은 비특권 userns 만으로 성립해 Stage 17 이 이중으로 차단 · CVE-2026-89638 (smb client 가 cifsacl/modefromsid/POSIX 마운트에서 쓰기 후 setuid/setgid 비트를 안 지움, 7.8) — Stage 14 cifs 경로, 악성 서버 전제가 아니라 정상 마운트에서 성립 · CVE-2026-80976 (SRv6 seg6 IP6CB 미초기화, 9.8) — CONFIG_IPV6_SEG6_LWTUNNEL 이 bool(내장) 이라 Pattern A 불가하나 도달 경로가 userns/netns 전제라 Stage 17 이 차단 (2026-09-20) · [2026-09-20 §2 재판정 sweep 으로 추가 17건] — triage 규칙(§3 발굴용)에 안 걸리는 "이미 차단 중인 모듈의 평범한 결함" 을 §1 모듈 목록으로 창 전체를 다시 훑어 발굴: cifs 12건(2026-09-11 SMB 클라이언트 하드닝 배치 — CVE-2026-89633·-89636·-89637 9.8, -89630·-89631·-89634 9.1, -89632 8.2, -89641 7.8, -89639·-89640 7.1, -89642·-90125) · sctp 4건(CVE-2026-89478·-89479 9.8, -89476·-89477 7.5) · openvswitch 1건(CVE-2026-89487 7.8) · [2026-09-27 재판정 sweep 32건] cifs 22건(09-24~25 SMB 클라이언트 배치 — ⭐ CVE-2026-97564 는 §1 CIFSwitch 수정(3da1fdf4efbc)이 빠져 있던 cifs.idmap key type 판, -97555 8.8 · -93787 8.1 등) · kafs 5건(CVE-2026-97583 대표 UAF 7.5 · -97584 7.8 · -97585·-97586 · 09-20 보류분 -80878) — AFS 클라이언트 실제 모듈명은 kafs 라 Stage 5 의 afs 라인은 직접 차단이 안 되지만, kafs 가 rxrpc 에 모듈 의존해 Stage 5·9 의 rxrpc 차단으로 함께 못 뜬다(커널·kmod 소스 확인) · sctp 2건(CVE-2026-98130 8.1 ZDI 제보 · -98123 원격 soft lockup) · openvswitch 1건(CVE-2026-97611 7.8) · Stage 17(userns) 2건(CVE-2026-97602 inet frags IPv6 재조립 OOB write — 설명문이 비특권 netns 전제 LPE 를 명시 · CVE-2026-98122 vxlan MDB UAF) · [2026-09-27 kernelCTF 제출 익스플로잇 소급 분류 14건] CVE-2026-23111 외 12건(nf_tables 6 · ipset · macvlan 2 · bonding 2 · af_packet · sch_teql — 제출 문서가 전부 "User namespaces required: Yes" → Stage 17 이 비특권 진입 차단; 23111 은 Stage 17 이전 판정이던 §4 에서 이동) · CVE-2026-23060(authencesn 짧은 AAD, 권한·userns 불요 — 유저공간 입구가 AF_ALG algif_aead 뿐이라 §1 Copy Fail 조치가 차단) |
❌ 미노출 |
| §3 | 처리 예정 (Backlog) | 🔵 P3 CVE-2026-72390 (sch_teql slaves 리스트 UAF, ZDI 제보) — Pattern A 에 그대로 맞고 teql 은 사실상 미사용이라 차단 운영 영향이 가장 작으나, MODULE_ALIAS 부재 + qdisc id 가 teql0 이라 자동 로드가 성립하지 않아(직접 확인) 관리자가 명시적으로 적재하지 않으면 비특권 도달 불가 → P3. Red Hat Moderate·공개 PoC 없음 (2026-08-21) · [2026-09-11 신규 7건 — NebuSec 배치, 전부 공개 익스플로잇 보유 · 2026-09-27 xt_IDLETIMER 1건 §1 이동 → 6건 잔류] 🟠 P1 CVE-2026-43502 (ZcopyReaper) rds/rds_tcp zerocopy send 정리 UAF, openSUSE 6.4 에서 LPE 실증 — capability 도 userns 도 불요라 §1 Stage 17 로 안 막히고 Pattern A 모듈 차단이 유일한 임시조치 · 🟠 P1 CVE-2026-31659 / -63834 batman-adv (글로벌 TT 16bit wrap 9.8 / tp_meter unacked 리스트 무제한) · 🟠 P1 CVE-2026-80714 ip_vs one-packet 플래그 동기 conn 전파 9.8 — 차단 시 LVS·keepalived·k8s IPVS 마비 위험이 커 활성 사용 게이트가 필수 · 🟠 P1 CVE-2026-74597 ip6_tunnel ip6ip6_err() skb→cb 미초기화 9.8 · 🟠 P1 CVE-2026-43042 mpls_router platform_label seqcount 부재 OOB · xt_IDLETIMER rev0 의 ALARM 타이머 라벨 재사용ebt_snat 1건 §1 이동 → 2건 잔류] 🔴 CVE-2025-39964 (af_alg 동시 쓰기 레이스, CNA 7.8) — ⚠ §1 Stage 3/11 이 막는 algif_aead 의 부모 모듈 af_alg 에 결함이 있고 algif_skcipher 도 같은 af_alg_sendmsg() 를 호출하므로 §2 가 아니다; 조치는 차단 대상을 af_alg 로 올리는 것(기존 조치의 상위집합) · ebt_snat ARP sender HW address 재작성이 splice 페이지에 직접 write, 8.8 S:C) — 세 건 중 차단 비용 최저tls rx_list 길이 0 레코드가 recvmsg 레코드 타입 처리 우회, CNA 9.8 AV:N) — kTLS 사용처가 있어 활성 사용 게이트 필요 · [2026-09-20 신규 — 🟠 P1 quartet 2건, 공개 root PoC · 2026-09-27 2건 모두 §1 이동 → 잔류 0] ah6 — ipv6_rearrange_rthdr() 가 segments_left <= segments 미검증, raw HDRINCL 로 포인터를 4,064바이트 되돌림; ⚠ §1 esp4/esp6 차단으로 안 막힌다(AH 는 별도 모듈)pppoe — dev_hard_header() 가 head 를 재할당해도 stale 포인터 사용tun — 차단 부적합 가능성 높음(VPN·libvirt·컨테이너가 전부 의존); §1 Stage 18 이 공개된 유일한 전파 경로(OVS)를, Stage 17 이 비특권 진입을 끊지만 취약 코드는 tun 에 있어 §2 아님. 전체 구현 순서는 doc/CVE-STATUS.md §3 "구현 순서 결정 (2026-09-20)" 표 · [2026-09-27] ⚠ P0 3건의 조치기한(2026-09-21) 경과 — 점검 시점엔 미착수였고, 같은 날 ebt_snat 은 Stage 21 로 구현했으나 af_alg·tls 는 미착수(판정이 애매해 보류 — 아래). tls 에 권한·userns 없이 root 를 딴 kernelCTF 익스플로잇 2건(CVE-2026-31533·-23240, 둘 다 9.8)과 tls+sockmap 조합 거부 수정(-93824)이 더해져 긴급도가 올라갔다(구현 시 §2 로 이동할 동반 CVE) · NebuSec 7건 트리거 미발동, 구현 시 함께 덮일 동반 CVE 기록(rds 8건 · ip_vs 2건) · sch_teql 에 같은 모듈의 kernelCTF 익스플로잇(CVE-2026-23074, COS built-in)이 있었으나 배포판은 자동 로드 불가라 P3 유지 · [2026-09-27 구현 판단 — "애매한 것은 구현하지 않음"] 남은 §3 중 보류: af_alg(RHEL built-in → initcall·재부팅 + Stage 3/11 과 포함관계 설계 필요) · tls(kTLS 사용 판정 불명확) · ip6_tunnel(터널 장치가 모듈 참조를 안 잡아 사용 게이트 신뢰 불가, ip6_gre·ip6_vti 의존) · mpls_router(MPLS 포워딩 사용 판정 신호 부재) · ip_vs(차단=LVS/k8s 마비) · batman-adv(메시 인터페이스의 모듈 참조 불명확) · tun(VPN·podman 의존) — 재판단 대상: rds/rds_tcp(판정은 비교적 명확, RHEL 9 비영향·모듈 부재) |
❌ 미노출 |
| §4 | 조치 안 함 (Reviewed — No Action) | CVE-2025-34291 (Langflow CORS, KEV 2026-05-21) · CVE-2026-2005/-2006 (PostgreSQL pgcrypto) · CVE-2026-32710 (MariaDB JSON) · CVE-2026-33032 (nginx-ui MCP) · CVE-2026-34926 (Trend Micro Apex One, KEV 2026-05-21) · CVE-2026-42945 (NGINX Rift) · CVE-2026-20182 (Cisco SD-WAN) · CVE-2026-3854 (GitHub Enterprise) · CVE-2026-35414 (SplitSSHell) · CVE-2026-48172 (LiteSpeed cPanel, KEV 2026-05-26) · CVE-2026-8398 (DAEMON Tools 공급망, KEV 2026-05-27) · CVE-2026-45321 (TanStack npm, KEV 2026-05-27) · CVE-2026-48027 (Nx Console, KEV 2026-05-27) · CVE-2026-46098 (Linux CAIF UAF, NVD 2026-05-27) · CVE-2026-9082 (Drupal Core PostgreSQL SQLi, KEV 2026-05-22) · CVE-2022-0492 (Linux cgroups v1 release_agent, KEV 2026-06-02) · CVE-2025-48595 (Android Framework, KEV 2026-06-02) · CVE-2026-45247 (Mirasvit Magento Cache Warmer, KEV 2026-06-03) · af_unix GC vs MSG_PEEK UAF, 비특권 컨테이너 탈출, 공개 PoC) — 코어 af_unix 라 차단 불가 + 53362 와 달리 userns 전제가 아니라 Stage 17 로도 미커버 → 커널 업데이트 필수, 모니터링 대상 (규칙 7 로 발굴, 2026-08-28) · CVE-2022-0995 (커널 watch_queue OOB write, KEV 2026-08-26 / FCEB 09-09) — 커널 5.17(2022-03)에서 이미 수정된 결함이 PageJack 기법으로 재부상, 코어 built-in + 빌드타임 옵션이라 임시조치 여지 없음(Debian 빌드 비영향) · CVE-2023-49105 (ownCloud) · CVE-2026-66384 (JFrog Artifactory) · CVE-2021-23758 (Ajax.NET) · CVE-2015-3246 (Red Hat libuser) · CVE-2015-5287 (Red Hat ABRT) · CVE-2026-8452 (Citrix NetScaler) · CVE-2019-1068 (MS SQL Server) · CVE-2026-60004 (Gitea) · CVE-2026-21962 (Oracle HTTP Server) · CVE-2026-73570 (Zimbra) — 2026-08-20~27 KEV, 전부 범위 외 · 🔴 CVE-2026-80521 (af_unix GC scc_entry UAF, Kyle Zeng 제보 — ⚠ 2026-09-22 DepthFirst 가 Ubuntu 26.04 컨테이너 탈출→호스트 root 익스플로잇 공개, Ubuntu LTS 미패치) — 53361 과 같은 af_unix GC 코드의 두 번째 결함, 코어 built-in + userns 비전제라 Stage 17 로도 미커버 → 커널 업데이트 필수, 모니터링 대상 (규칙 9 로 발굴, 2026-09-04) · CVE-2026-78002 (rsyslog RainerScript replace() heap overflow) — 기본 설정 미노출 + 안전한 전역 토글 부재(고객 룰셋을 들어내야 함) + DoS 급 · CVE-2026-82078/-81578 (PaperCut NG/MF) · CVE-2026-59822 (BerriAI LiteLLM) · CVE-2026-48710 (Starlette) · CVE-2026-49869 (Kestra OSS) · CVE-2026-82329 (JFrog Artifactory) · CVE-2026-9586 (Sangoma Switchvox) · CVE-2026-83548/-83549 (SonicWall SMA1000) — 2026-08-31~09-02 KEV, 전부 범위 외 · 🔴 CVE-2026-80848 (xfrm/espintcp close 중 UAF, ZDI 제보) — espintcp 는 CONFIG_INET_ESPINTCP 가 bool(내장) 이고 부팅 시 TCP ULP 로 등록돼 setsockopt(TCP_ULP,"espintcp") 로 바로 닿는다. §1 esp4/esp6 모듈 차단(43284·46300)으로 안 막힌다(커널 소스 직접 확인) → Pattern A 불가·커널 업데이트 필수, 모니터링 · CVE-2026-80725 (net/gro BIG TCP 집계 조건 검증 누락, 9.8) — 코어 GRO, 토글 부재 · CVE-2026-80726 (KVM x86/mmu child shadow page role.invalid, 9.3) — KVM 차단 = 가상화 마비(Januscape·Zapscape 와 동일 결) · CVE-2026-80530 (XFS exchange-range reflink 플래그, 7.1) — RefluXFS(64600) 와 같은 XFS 계열, 루트 파일시스템이라 차단 불가 · CVE-2026-80864 (RDMA/rxe responder UAF) — 규칙 6 이 잡았으나 rdma_rxe 는 소프트웨어 RoCE 로 서버 기본 미사용 · CVE-2026-80724 (ptp vmclock 읽기전용 매핑의 mprotect 승격, 8.8) — 규칙 5 로 잡힌 색인 지연분, 게스트→호스트 시각 데이터 손상 한정 · NebuSec 22건 배치 중 §4 10건 — CVE-2026-74581(ipv6 fib6 rule suppress UAF 9.8) · -74480(bridge multicast fast-leave 9.8) · -72255 / -52912(nf_queue × br_netfilter fake dst) · -72137(xfrm nat_keepalive double free 9.8) · -64560(posix-cpu-timers exec race UAF) · -52933(io_uring poll 부호 비교) · -52923(SysV IPC next_id 범위) · -43501(ipv6 RPL SRH headroom 9.8, 기본 rpl_seg_enabled=0 실측 확인) · -43074(eventpoll RCU free UAF) — 전부 코어 built-in 이거나(epoll·io_uring·SysV IPC·posix-timers·xfrm·ipv6 core) 차단 시 운영이 마비(bridge 는 컨테이너/VM 필수)라 Pattern A 부적합 · CVE-2026-86060/-67277 (MikroTik RouterOS) · CVE-2026-19490 (Citrix NetScaler) · CVE-2025-25249 (Fortinet) · CVE-2026-87491/-85046 (Chromium V8) · CVE-2026-20079 (Cisco Secure FMC) · CVE-2026-75650 (Adobe Commerce/Magento) · CVE-2026-81963/-85880 (MS Windows) · CVE-2026-86218 (N-able N-central) — 2026-09-04~09-10 KEV 11건, Linux 커널 0건, 전부 범위 외 · [2026-09-20 신규] CVE-2026-89775 (KVM/arm64 VNCR TLB 무효화 시 음수 S1 walk level → guest-to-host escape, 9.3, Hyunwoo Kim 2026-09-16 공개) — KVM 차단 = 가상화 마비(Januscape·Zapscape·80726 과 동일 결) + arm64 한정 · CVE-2026-89610 (ntfs run length 볼륨 경계 초과, 9.8 — 악성 이미지 마운트 전제) · CVE-2026-81003 (net/iucv ingress device 미검증, 8.1 — s390 전용) · CVE-2026-90000 (HID rmi 언더사이즈 리포트 OOB, 8.8 — 물리 장치 전제) · CVE-2026-89507 / -92525 (RDMA ucma 핸들러 락 누락 · rxe num_sge 미검증) — 소프트웨어 RoCE 로 서버 기본 미사용 · CVE-2026-89579 (bpf bloom filter 32비트 사이징) · CVE-2026-89791 / -90046 / -89767 (perf mmap UAF · mm/page_alloc UP NMI · overlayfs double end_creating()) — 전부 코어 built-in · CVE-2026-90203 (Squashfs 음수 오프셋) · CVE-2026-90053/-90058/-90099 (net/sched sch_htb 홉 무제한 · qdisc_pkt_len 미바운드 · 분류기 memcg 미계정) — DoS 급 + 비특권 경로는 Stage 17 이 차단 · CVE-2026-90057 (slip hangup UAF) — 직렬 IP 로 사장 · CVE-2026-76461 (Cisco Secure Email Gateway SQLi→root) · CVE-2026-76460 (Cisco ISE 특권 API 오용) · CVE-2026-84869 (ConnectWise ScreenConnect) · CVE-2026-42016/-42018 (JFrog Artifactory) · CVE-2026-85706 (GitLab CE/EE 경로 순회) · CVE-2026-87886 (Acronis Backup cPanel/Plesk) · CVE-2026-58704 (Google Pixel 모뎀) — 2026-09-10~09-18 KEV 13건 중 Linux 커널 3건은 §3 P0 으로 등록, 나머지 10건은 범위 외 · [2026-09-27 신규] 🔴 CVE-2026-52910 (reuseport cBPF 프로그램 RCU 유예 없는 해제 UAF — 권한·userns 불요, kernelCTF 제출 + 2026-09-22 컨테이너 탈출 PoC 공개) — 코어라 차단 수단 없음, 모니터링 대상 · kernelCTF 코어 5건 — CVE-2026-23394(af_unix GC, 53361·80521 의 선행 결함) · -23271 / -64556 / -74753(perf, 비특권 perf 로 도달 — perf_event_paranoid 는 배포판별 의미가 달라 안전한 전역 값 부재) · -64563(rhashtable, NETLINK_SOCK_DIAG) · CVE-2026-97941(SLUB ABA race, Hyunwoo Kim — 7.2inner_protocol → OVS 4 GiB memcpy, 근본 원인 코어) · -98096(SRv6, 기본 seg6_enabled=0) · ksmbd 11건 · nfsd/sunrpc 20여 건 · RDMA · bpf 검증기 약 40건(비특권 eBPF 기본 비활성) · 비커널: CVE-2026-96512(sudo TZ 가 시간 제한 규칙에 영향 — 우회는 sudoers 수정이라 자동화 부적합) · CVE-2026-86805(glibc $ORIGIN TOCTOU — fs.protected_hardlinks=1 기본값이 완화) · Exim 4.100.1(비기본 설정) · libextractor · ntfs-3g · rsyslog · inetutils · fetchmail · expat · CVE-2026-7273(Zyxel) · -85102/-93616(Check Point) · -93952(VeloCloud) · -94127(F5 BIG-IP APM) · -5430(WSO2) · -71362(Adobe Commerce) · -65660(SharePoint) · -67279(RouterOS) · -87902(WordPress Core) — 2026-09-21~25 KEV 10건, Linux 커널 0건, 전부 범위 외 |
❌ 미노출 |
각 항목의 분류 근거·자동화 적합성 평가·인용 출처는 doc/CVE-STATUS.md 본문, 외부 자료 URL은 doc/references.md 참조.
각 커널 CVE 플러그인은 자체 conf 파일을 /etc/modprobe.d/에 별도로 작성하므로(cpa-cve-<id>.conf), 모듈이 겹쳐도 한 CVE의 rollback이 다른 CVE의 차단을 의도치 않게 해제하지 않는다. 차단 라인은 install X /bin/false (modprobe 호출 시 명시적 exit 1) + blacklist X (udev/aliases 자동 로드 차단)를 동시 기록 (defense-in-depth).
CVE-2026-31431은 algif_aead의 빌드 형태에 따라 두 경로를 자동 분기 — 로더블(=m)이면 modprobe 차단, RHEL 계열에 흔한 built-in(=y)이면 커널 명령행에 initcall_blacklist=algif_aead_init 인자 추가 (grubby 미존재 시 /etc/default/grub 수기 가이드).
CVE-2026-23918은 detected Apache binary(apache2/httpd)에 따라 /etc/apache2/conf-enabled/ 또는 /etc/httpd/conf.d/에 드롭인 파일을 작성. graceful reload(systemctl reload)로 무중단 적용 — 워커가 받는 새 연결부터 HTTP/1.1만 협상.
CVE-2026-46333 (ssh-keysign-pwn / ptrace exit-race)은 Yama LSM 활성 여부를 먼저 확인 (/proc/sys/kernel/yama/ptrace_scope 존재). 활성이면 /etc/sysctl.d/cpa-cve-2026-46333.conf 드롭인을 작성하고 sysctl -w kernel.yama.ptrace_scope=2로 즉시 반영 — 재부팅 후에는 systemd-sysctl.service가 자동 재적용하므로 재부팅 불요. conf 본문에 # previous=N을 기록해 rollback 시 이전 값을 복원한다. Yama LSM 미활성 커널에서는 임시조치 불가로 안내만 표기. 결함의 본질이 __ptrace_may_access() 논리 결함이므로 ptrace_scope=2는 부분 차단 — 운영자는 가능한 빨리 벤더 커널 패키지 업데이트를 적용해야 한다.
CVE-2026-46243 (CIFSwitch)은 cifs 모듈을 Pattern A로 차단하되, 다른 모듈 차단 플러그인과 달리 활성 CIFS/SMB 마운트 여부를 먼저 확인한다 (/proc/mounts의 cifs/smb3 fstype). 활성 마운트가 있으면 conf 작성·언로드를 모두 건너뛰고(StatusSkipped) 안내만 출력 — 재부팅 시 fstab의 CIFS 마운트가 blacklist cifs로 깨지는 것을 막기 위함이다. 운영자는 벤더 커널 업데이트(권장) 또는 CIFS 언마운트 후 재실행으로 강제 차단을 선택한다. 공격 체인의 3가지 요구 조건(cifs-utils 설치 · unprivileged userns 활성 · cifs 로드) 중 모듈 로드를 끊는 접근이다.
CVE-2026-46331 (Pedit COW)은 act_pedit(tc 패킷 에디터 액션) 모듈을 Pattern A로 차단하며, CIFSwitch와 동일하게 활성 사용 여부를 먼저 확인한다 — 모듈 usecount(/proc/modules)>0이면 활성 tc pedit 액션이 있다는 뜻이므로 conf 작성·언로드를 건너뛰고(StatusSkipped) 안내만 출력한다. act_pedit는 §1 Dirty Frag 패밀리와 같은 페이지 캐시 손상 LPE 클래스다. PF_RING 등 패킷 캡처 프레임워크는 tc 액션과 별개 서브시스템이라 act_pedit 차단 영향을 받지 않는다.
커널 버전 영향 범위 (Stage 15): 커널 모듈 CVE 플러그인은 실행 커널이 결함 도입 버전 미만이면 (취약 코드가 아직 없으므로) 영향 없음으로 판정한다. 영향 범위 안이면 verdict는 그대로 두되 일반 출력은 간결하게 유지 — 실행 커널 버전·영구 수정 버전·"배포판 백포트 적용 여부는 버전으로 단정 불가" 같은 상세는 --verbose일 때만 여러 줄로 보여주고, 일반 출력 마지막에 --verbose 안내를 표시한다. 커널 ≥ 수정버전 → 패치됨 단정은 의도적으로 하지 않는다 — 배포판 백포트와 ABI 번호 차이로 인한 false negative(미패치를 패치됨으로 오판)를 피하기 위함이며, 정확한 패치 확인은 배포판 보안 트래커(USN/RHSA/DSA)로 한다.
SHA256SUMS 의 항목은 원본 파일명(cpa-linux-amd64 / cpa-linux-arm64)으로 기록되므로, 다운로드 시 원본 파일명을 유지해야 검증이 동작한다 (아래 참고 박스).
# linux/amd64 예시 — 원본 파일명으로 받아 검증 후 이름 변경
curl -L -O https://github.com/barmi/cve-patch-auditor/releases/latest/download/cpa-linux-amd64
curl -L -O https://github.com/barmi/cve-patch-auditor/releases/latest/download/SHA256SUMS
# 무결성 검증 (`cpa-linux-amd64: OK` 가 출력돼야 함)
shasum -a 256 -c SHA256SUMS --ignore-missing
# 검증 통과 후 실행 편의를 위해 짧은 이름으로 변경
mv cpa-linux-amd64 cpa
chmod +x cpa
./cpa --version참고 —
no file was verified에러가 난다면 (#1)curl -L -o cpa ...(소문자-o)로 받으면 작업 디렉토리에cpa-linux-amd64파일이 없어shasum -c --ignore-missing이 SHA256SUMS의 모든 항목을 "missing"으로 건너뛰고 검증된 파일이 0개 →shasum: SHA256SUMS: no file was verified로 종료된다 (WSL/Ubuntu 등에서 동일). 위 예시처럼-O(대문자)로 원본 파일명을 유지한 채 먼저 검증하고, 그 다음mv로 이름을 바꿔야 한다.또는 SHA256SUMS를 받지 않고 한 줄로 해시만 대조해도 된다:
# 기대 해시 (SHA256SUMS의 cpa-linux-amd64 행) 와 실측 해시를 직접 비교 curl -sL https://github.com/barmi/cve-patch-auditor/releases/latest/download/SHA256SUMS \ | awk '$2=="cpa-linux-amd64"{print $1}' shasum -a 256 cpa | awk '{print $1}'
git clone https://github.com/barmi/cve-patch-auditor.git
cd cve-patch-auditor
make build # 호스트용
make dist # linux amd64+arm64 정적 바이너리 (bin/)요구사항: Go 1.23 이상 (현재 개발은 1.26). 외부 모듈 의존 0.
$ cpa --help
USAGE
cpa [flags]
FLAGS
-h, --help 이 도움말 표시
-v, --version 버전 정보 표시
--list 내장된 CVE 플러그인 목록 표시
--covered 현재 호스트의 조치로 함께 차단되는 CVE(§2) 트리·개수 표시
--cve=ID 처리할 CVE 지정 (반복 가능; 미지정 시 전체)
--phase=NAMES 처리할 phase 쉼표 구분
(assess,remediate,verify,rollback;
기본 assess,remediate,verify)
--rollback 기본 phase 대신 rollback만 수행
(--apply 또는 --dry-run 명시 필수: 파괴적 작업)
--apply 실제 변경 적용 (없으면 dry-run으로 강제)
--dry-run dry-run 모드 (--apply가 있어도 우선 적용)
--no-elevate sudo 자동 권한 상승 비활성
--json 결과를 stdout에 한 줄당 JSON으로 출력
--report=FILE 마크다운 리포트 파일 경로
--log-file=FILE 로그 파일 경로 (기본: 실행파일 옆 cpa.log)
--verbose 상세 출력 (CVE별 커널 버전 상세 + DEBUG 레벨 로그)
--no-log 파일 로그 비활성 (stderr만)
--lang=LANG 언어 강제 지정 (en|ko; 기본 환경에서 자동 감지)
--upgrade 최신 릴리즈 확인 (--apply 없으면 정보만 출력)
(--upgrade --apply: GitHub Release 자산 다운로드 + SHA256 검증 + 원자적 교체)
cpa --upgrade로 최신 GitHub Release를 확인하고 (--apply와 함께 쓰면) 자기 자신을 안전하게 교체할 수 있다.
# 1) 새 버전 확인만 (root 불필요)
cpa --upgrade
# 출력 예:
# GitHub에서 최신 릴리즈 확인 중...
# 업그레이드 가능: v0.2.0 → v0.2.1 (자산 cpa-linux-amd64, 6342144 bytes)
# sha256: 1a2b3c4d...
# 2) 실제 교체 (필요 시 sudo 자동 재실행)
sudo cpa --upgrade --apply
# 또는 사용자 디렉토리(~/bin 등)에 설치돼 있으면 sudo 없이도 동작
cpa --upgrade --apply동작:
- GitHub
/releases/latest에서 최신 메타데이터 조회 (인증 불필요). - 현재 OS/ARCH에 해당하는 자산 선택 — 현재 배포 자산은
cpa-linux-amd64/cpa-linux-arm64만 제공. macOS/Windows에서는 "unsupported platform" 안내. - 자산과
SHA256SUMS를 함께 다운로드 → 자산의 실측 SHA256과 기대 해시 일치 검증. 불일치 시 즉시 실패하고 임시 파일을 삭제, 실행 중인 바이너리는 그대로 보존. os.Rename으로 원자적 교체. 실행 중이던 프로세스는 그대로 종료 후 다음 실행부터 새 바이너리 사용.
--apply 사용 시 binary가 위치한 디렉토리에 쓰기 권한이 없으면 자동으로 sudo 재실행. --no-elevate 지정 시에는 명시적 에러로 종료(자동 sudo 비활성).
- 환경 자동 감지:
LC_ALL>LC_MESSAGES>LANG.ko또는ko_*이면 한국어, 그 외(또는 미설정)면 영어. --lang=ko/--lang=en으로 강제 가능. 그 외 값은 거부 (exit 2).- 사용자-보이는 모든 메시지(usage, CLI 안내·에러, plugin Summary, 마크다운 리포트 헤더·배지)가 두 언어를 모두 지원.
- 단, JSON 로그(
cpa.log)의msg필드는 기계 가독 키로 의도되어 다국어화하지 않음.
참고 — 한글 설명이 필요한 분들은
--lang=ko를 추가하세요.$LANG을 자동으로 읽어서 처리하지만, 대부분의 서버 환경은LANG=en_US.UTF-8또는C.UTF-8로 설정돼 있어 기본은 영어로 보입니다. (실제로 본 저장소 운영자의 환경도LANG=en.) 예시:cpa --lang=ko --help
# 1) 영향 평가만 (root 불필요, 변경 없음)
cpa --phase assess
# 2) 전부 한 번에 (dry-run; 무엇이 일어날지 미리 확인)
cpa
# 3) 실제 적용 — sudo로 재실행되며 모듈 차단·언로드 수행
cpa --apply
# 4) 특정 CVE만
cpa --cve CVE-2026-31431 --apply
# 5) 롤백 (적용한 차단 파일 제거) — --apply 또는 --dry-run 명시 필수
cpa --rollback --dry-run --cve CVE-2026-31431 # 미리보기
cpa --rollback --apply --cve CVE-2026-31431 # 실제 롤백 (sudo)
# 6) 마크다운 리포트 생성
cpa --report /tmp/cpa-report.md
# 7) JSON 라인 출력 (다른 도구·SIEM 연동)
cpa --json
# 8) 지금 적용된 조치로 "덤으로" 함께 막히는 CVE 확인 (root 불필요, 변경 없음)
cpa --coveredcpa의 §1 임시조치는 겨냥한 CVE 외에 같은 경로를 쓰는 다른 CVE도 함께 막는다
(doc/CVE-STATUS.md §2). --covered는 그 관계를 현재 호스트 기준으로 보여준다.
정적 목록이 아니라 각 §1 플러그인의 assess를 실제로 돌려 판정하는 것이 핵심이다 — §2 관계는 조건부라서, 활성 사용 게이트로 조치가 Skip된 호스트에서는 성립하지 않는다. (예: 활성 SMB 마운트 호스트에서는 CIFSwitch 조치가 Skip되고, 바로 그 호스트가 CVE-2026-64597/-64598 노출 호스트다.) assess는 읽기 전용이라 root 없이 안전하게 실행된다.
$ cpa --covered
현재 호스트의 §1 임시조치로 함께 차단되는 CVE (§2 부수 차단)
CVE-2026-46243 [적용됨] CIFSwitch
└ [차단됨] CVE-2026-64597 (SMB 클라이언트 double-free)
결함이 cifs 모듈에 있어 본 조치로 함께 차단된다
주의: 활성 SMB 마운트 호스트는 본 조치가 Skip 된다 — ...
같은 경로로 함께 차단 41건: CVE-2026-72318, CVE-2026-72310, ...
CVE-2026-53264 [미적용] net/sched tc_action UAF
└ [미차단] CVE-2026-53362 (ipv6_frag_escape) ** CISA KEV 등재 **
익스플로잇이 비특권 userns 생성을 전제하고, Red Hat(RHSB-2026-009)·CIQ 공식
임시조치가 본 조치와 동일한 user.max_user_namespaces=0 이다
...
요약
관련 §1 조치 10건 — 적용됨 7건 / 미적용 3건
부수 차단 대상 §2 CVE 89건 — 차단됨 63건 / 미차단 26건
이 호스트에서 미차단: CVE-2026-23060, CVE-2026-23074, CVE-2026-23111, ...
→ 위 항목은 커널/패키지 업데이트가 필요합니다.
위 출력은 2026-09-27 Rocky 9.4 테스트 서버의 실제 결과를 줄인 것이다 — 이 호스트는 userns 차단(Stage 17)· openvswitch 차단(Stage 18)을 적용하지 않았고 Copy Fail(Stage 11)은 재부팅 대기라 그 경로의 §2 가
[미차단]으로 뜬다. "관련 §1 조치" 는AlsoMitigates를 가진 §1 플러그인 수(현재 10건)이고, §2 총계(89건)는 위 "차단 건수" 표와 같다.
기본 출력(--list, 일반 실행)에는 이 정보가 나오지 않는다 — 조회 전용 옵션이다.
각 CVE는 4 단계 라이프사이클을 갖는다:
assess → 호스트가 취약한지 판단 (비-root 가능)
remediate → 조치 적용 (root 필요. 미지정 시 자동 sudo 재실행)
verify → 조치 후 재평가
rollback → (선택) 적용한 변경의 역연산
옵션이 없으면 내장된 모든 CVE에 대해 assess → remediate → verify를 순차 실행한다 (단, --apply가 없으면 dry-run으로 강제).
- 셸 인터폴레이션 금지. 외부 명령은 항상 인자 배열로만 호출.
--apply없이는 어떤 변경도 발생하지 않음 (기본 dry-run).- 외부 사용자 작성 파일 보호:
/etc/modprobe.d/에 cpa 표식이 없는 파일은 절대 덮어쓰거나 삭제하지 않음. - 모듈 자동 재로드 안 함: rollback 시 파일만 제거. modprobe는 시스템 관리자 결정.
- 자체 PoC 미동봉. 외부 PoC 코드 인용·실행 안 함.
- 민감정보 마스킹 인터페이스 마련 (로깅 계층에서 일괄).
- 한 줄당 1 JSON, 키:
ts(RFC3339Nano),level,msg,host,pid,uid, 그리고 phase별cve/phase/action/result/details. - 위치 결정:
--log-file> 실행파일 옆cpa.log>$XDG_STATE_HOME/cve-patch-auditor/cpa.log> stderr 폴백.
cve-patch-auditor/
├── cmd/cpa/ ← CLI 엔트리
├── internal/
│ ├── cve/ ← Plugin 인터페이스, 레지스트리, 오케스트레이터
│ ├── plugins/ ← CVE별 플러그인 (cve_<id>/ — CVE 1개당 1 디렉토리). 지원 목록은 위 "지원하는 CVE" 표 / `cpa --list` 참조
│ ├── privilege/ ← root 확인 + sudo 재실행
│ ├── exec/ ← 외부 명령 안전 래퍼 (인자 배열, 타임아웃, dry-run)
│ ├── system/ ← uname / /proc/modules / /etc/os-release / 패키지 매니저 / built-in 감지
│ ├── upgrade/ ← 자체 업그레이드 (GitHub Release + SHA256 + atomic rename, Stage 10)
│ ├── i18n/ ← KO/EN 메시지 (--lang, env 자동 감지)
│ └── audit/
│ ├── log/ ← slog 기반 JSON 라인 로깅
│ └── report/ ← 마크다운 리포터
├── doc/
│ ├── PLAN.md ← 마스터 계획 (Stage별 진행 기록)
│ ├── CVE-STATUS.md ← CVE 분류·상태 마스터 색인 (§1 처리 반영 / §2 이미 차단됨 / §3 처리 예정 / §4 조치 안 함)
│ ├── references.md ← 외부 인용 자료 인덱스
│ ├── cve/ ← CVE 별 사실 정리 + 자동화 계약
│ └── stages/ ← Phase 별 결정·검증 기록 (stage-N-*.md)
└── .github/workflows/ ← ci / release
make build # 빌드
make test # 단위 테스트
make vet # go vet
make cover # 커버리지
make dist # 배포용 (linux amd64/arm64 + SHA256SUMS)
make cleanCI는 push/PR마다 vet + test -race + 크로스 빌드를 수행 (.github/workflows/ci.yml).
- Linux 전용 실 동작 (kernel modules, /proc/modules, /etc/modprobe.d 의존).
- macOS/Windows에서는 빌드·단위 테스트만 가능; 실 phase 메서드는
ErrUnsupported. - 패키지 매니저를 통한 영구 커널 패치 자동 적용은 본 도구 범위 외 (사용자 안내만).
- 자체 PoC 비포함.
Apache License 2.0. Copyright 2026 skshin. 결정 사유와 검토한 대안은 doc/license-decision.md 참조.
- 외부 인용 자료 전체:
doc/references.md - 상세 계획·결정 이력:
doc/PLAN.md,doc/stages/ - CVE 분류·상태 마스터 색인:
doc/CVE-STATUS.md