cve-2026-99999-scanner.git

cve-2026-99999-scanner

~ Checks whether a Linux system is affected by CVE-2026-99999 (PwnEscape) and prints or applies the distribution-specific kernel fix
git clone https://github.com/debuman/cve-2026-99999-scanner.git

README_kr.md (11758B)

      1 # CVE-2026-99999 Scanner
      2 
      3 [English](README.md) | **한국어**
      4 
      5 리눅스 시스템이 **CVE-2026-99999 ("PwnEscape")** 에 영향을 받는지 점검하는 셸 스크립트입니다. 판정 근거를 보여 준 뒤, 그 배포판에 맞는 패치 방법을 출력하거나 직접 패치하고 재부팅합니다.
      6 
      7 > 스크립트에 들어 있는 벤더 데이터는 **2026-10-20** 기준입니다. 보안 공지는 빠르게 바뀌므로 각 배포판 보안 트래커도 꼭 확인하세요.
      8 
      9 ## 취약점 요약
     10 
     11 | | |
     12 |---|---|
     13 | 구성요소 | 리눅스 커널 IPv4 스택 (`skb_checksum_help` → `ip_do_fragment`) |
     14 | 원인 | virtio-net 헤더·패킷 소켓이 넘긴 `checksum_start` / `csum_offset` 을 IPv4 헤더와 대조하지 않아, 체크섬을 완료할 때 이미 검증된 헤더 길이를 덮어쓸 수 있음 (CWE-20) |
     15 | 영향 | 게스트 VM → 호스트: 호스트 메모리 유출, 호스트 크래시, 호스트 root 권한 코드 실행 |
     16 | 심각도 | CVSS 3.1 **9.3 Critical** (커널 CNA) · 8.8 Important (Red Hat) |
     17 | 영향 범위 | 2.6.27 이후 모든 커널 |
     18 | 수정 | 업스트림 커밋 [`6785011f8b16`](https://git.kernel.org/stable/c/6785011f8b16abf40b1e9d8b2e332232b3e68822) "ipv4: validate checksum_start before completing checksum" |
     19 | 우회책 | 공개된 우회책 없음. 수정된 커널로 부팅하는 것이 유일한 해결책 |
     20 
     21 가장 위험한 곳은 신뢰할 수 없는 게스트를 실행하는 **가상화 호스트**(KVM/QEMU, Firecracker, Proxmox, 클라우드·VPS 호스트)입니다. 게스트 커널만 패치해서는 호스트가 보호되지 않습니다.
     22 
     23 ## 파일
     24 
     25 | 파일 | 설명 |
     26 |---|---|
     27 | `scanner-cve-2026-99999.sh` | 스캐너, 영어 출력 |
     28 | `scanner-cve-2026-99999_kr.sh` | 같은 스캐너, 한국어 출력 |
     29 
     30 두 파일의 동작은 같고, 출력 문구와 주석만 다릅니다.
     31 
     32 ## 해시값 (v1.0.0)
     33 
     34 | 파일 | SHA-256 | MD5 |
     35 |---|---|---|
     36 | `scanner-cve-2026-99999.sh` | `65c3c226487d5bd80d436c06cc5256304cfa17011be82d8404c54355998801a6` | `8ab38c22ed737986775f6f64f5a800aa` |
     37 | `scanner-cve-2026-99999_kr.sh` | `05d4af248ab2cab26566c81067ed35dd0a8c966f7fa8459867597c56ac43a805` | `6223f8db3c1a8dec361fe301a7193ff4` |
     38 
     39 실행 전에 파일이 변조되지 않았는지 확인하세요.
     40 
     41 ```bash
     42 echo "05d4af248ab2cab26566c81067ed35dd0a8c966f7fa8459867597c56ac43a805  scanner-cve-2026-99999_kr.sh" | sha256sum -c
     43 echo "6223f8db3c1a8dec361fe301a7193ff4  scanner-cve-2026-99999_kr.sh" | md5sum -c
     44 ```
     45 
     46 이 값은 [v1.0.0 릴리스](https://github.com/sqzer-x/cve-2026-99999-scanner/releases/tag/v1.0.0)의 파일 기준입니다. 이후 커밋의 파일은 값이 다를 수 있습니다.
     47 
     48 ## 빠른 시작
     49 
     50 릴리스에서 받기 (권장):
     51 
     52 ```bash
     53 curl -LO https://github.com/sqzer-x/cve-2026-99999-scanner/releases/download/v1.0.0/scanner-cve-2026-99999_kr.sh
     54 echo "05d4af248ab2cab26566c81067ed35dd0a8c966f7fa8459867597c56ac43a805  scanner-cve-2026-99999_kr.sh" | sha256sum -c
     55 sudo bash scanner-cve-2026-99999_kr.sh
     56 ```
     57 
     58 저장소에서 받기:
     59 
     60 ```bash
     61 git clone https://github.com/sqzer-x/cve-2026-99999-scanner.git
     62 cd cve-2026-99999-scanner
     63 sudo bash scanner-cve-2026-99999_kr.sh
     64 ```
     65 
     66 컨테이너 안이 아니라 **호스트**에서 실행하세요. 점검은 일반 사용자로도 되며, root 권한(`sudo`)은 메뉴 1번에만 필요합니다.
     67 
     68 ## 동작
     69 
     70 1. 배포판(`/etc/os-release`)과 실행 중인 커널(`/proc`)을 확인합니다.
     71 2. 커널을 판정합니다.
     72    - 벤더가 공개한 수정 버전과 비교 (AlmaLinux, Oracle UEK, Amazon Linux, Debian)
     73    - 업스트림 stable 수정 버전과 비교 (Fedora, Arch, openSUSE Tumbleweed, Alpine, Gentoo, WSL2 등)
     74    - 아직 수정본을 내지 않은 배포판(RHEL 계열, Ubuntu, SUSE)은 설치된 커널 패키지 changelog 에서 CVE 번호나 수정 커밋을 찾습니다. 그래서 2026-10-20 이후 나온 수정본도 알아봅니다.
     75 3. 라이브패치 적용 여부(kpatch, Canonical Livepatch, SUSE kernel-livepatch, Ksplice), 설치만 되고 아직 부팅하지 않은 수정 커널, 다음 부팅 커널의 수정 여부를 확인합니다.
     76 4. 노출 위험 요소를 보여 줍니다: `/dev/kvm`, `vhost_net`, TUN/TAP 장치, VM 프로세스(QEMU, Firecracker, Proxmox `kvm` 등), 사용자 네임스페이스 설정.
     77 5. 안전하지 않으면 메뉴를 띄웁니다.
     78 
     79    ```
     80    1. 지금 패치 (수정 커널 설치 후 재부팅)
     81    2. 나중에 수동 패치 (명령어 보기)
     82    3. 종료
     83    ```
     84 
     85    터미널이 아닌 곳(cron, 파이프, 출력을 파일로 돌린 경우)에서는 메뉴 없이 2번처럼 명령어만 출력합니다.
     86 
     87 ## 옵션
     88 
     89 | 옵션 | 설명 |
     90 |---|---|
     91 | `-l`, `--list` | 배포판별 현황표만 출력 |
     92 | `--no-color` | 색상 없이 출력 (`NO_COLOR` 환경 변수도 지원) |
     93 | `--os-release 파일` | `/etc/os-release` 대신 지정한 파일 사용 |
     94 | `--uname-r 문자열` | 실행 중인 커널 대신 지정한 커널 릴리스로 판정 (로컬 검사 생략) |
     95 | `--uname-v 문자열` | 커널 빌드 문자열(`uname -v`). Debian 커널을 `--uname-r` 로 판정할 때 필요 |
     96 | `-h`, `--help` | 도움말 |
     97 
     98 ## 종료 코드
     99 
    100 | 코드 | 의미 |
    101 |---|---|
    102 | 0 | 안전 (수정됨, 영향 없음, 라이브패치 적용) |
    103 | 1 | 취약 — 수정 커널이 나와 있음 |
    104 | 2 | 수정 커널 설치됨 — 재부팅 필요 |
    105 | 3 | 취약 — 벤더 수정본 미출시 또는 지원 종료 |
    106 | 4 | 판단 불가 (알 수 없는 커널, 컨테이너 안에서 실행 등) |
    107 
    108 종료 코드를 이용해 구성 관리 도구나 모니터링에서 쓸 수 있습니다.
    109 
    110 ```bash
    111 bash scanner-cve-2026-99999_kr.sh --no-color > report.txt; echo "종료 코드: $?"
    112 ```
    113 
    114 ## 다른 서버 판정
    115 
    116 다른 곳에서 모은 값으로도 판정할 수 있습니다. 예를 들어 컨테이너 안에 있거나 자산 목록만 가지고 있을 때입니다.
    117 
    118 ```bash
    119 # 대상 서버에서:  uname -r ; uname -v ; cat /etc/os-release > os-release.txt
    120 bash scanner-cve-2026-99999_kr.sh --uname-r 5.14.0-570.12.1.el9_6.x86_64 --os-release os-release.txt
    121 bash scanner-cve-2026-99999_kr.sh --uname-r 6.1.0-38-amd64 \
    122      --uname-v '#1 SMP PREEMPT_DYNAMIC Debian 6.1.176-1 (2026-08-02)' --os-release os-release.txt
    123 ```
    124 
    125 ## 배포판별 현황 (2026-10-20 기준)
    126 
    127 `bash scanner-cve-2026-99999_kr.sh --list` 로도 같은 표를 볼 수 있습니다.
    128 
    129 | 배포판 | 상태 | 수정 버전 |
    130 |---|---|---|
    131 | 업스트림 (kernel.org) | 수정됨 | 5.10.272 · 5.15.223 · 6.1.190 · 6.6.159 · 6.12.113 · 6.18.57 · 7.2.11 · 7.3-rc7. 그 밖의 브랜치는 지원 종료 |
    132 | AlmaLinux 8 / 9 / 10 | 수정됨 (almalinux-testing 저장소, 2026-10-16) | `kernel-4.18.0-553.174.2.el8_10` · `kernel-5.14.0-687.57.2.el9_8` · `kernel-6.12.0-211.66.2.el10_2` |
    133 | AlmaLinux Kitten 10 | 다음 정기 커널 업데이트에 포함 예정 | — |
    134 | RHEL 7 / 8 / 9 / 10 | 영향 받음, 수정본 미출시 | — |
    135 | Rocky Linux, CentOS Stream, 기타 RHEL 호환 | 공개된 수정본 없음 | — |
    136 | Oracle Linux UEK | 수정됨 | UEK R6 `5.4.17-2136.360.3.1` (ELSA-2026-500397) · UEK R7 `5.15.0-325.221.6.4` (ELSA-2026-500398) · UEK R8 `6.12.0-207.111.5.4` (ELSA-2026-500399) |
    137 | Oracle Linux RHCK | 공지 없음 | — |
    138 | Amazon Linux 2 | 수정됨 | 4.14 `4.14.355-287.753` (ALAS2-2026-3962) · 5.4 `5.4.302-229.498` (ALAS2KERNEL-5.4-2026-131) · 5.10 `5.10.269-270.1108` (ALAS2KERNEL-5.10-2026-133) · 5.15 `5.15.221-157.262` (ALAS2KERNEL-5.15-2026-117) |
    139 | Amazon Linux 2023 | 수정됨 | kernel `6.1.188-233.385` (ALAS2023-2026-3197) · kernel6.12 `6.12.110-135.201` (ALAS2023-2026-3196) · kernel6.18 `6.18.54-121.166` (ALAS2023-2026-3192) |
    140 | Debian | 수정됨 | bookworm `6.1.190-1` (DLA-4841-1) · trixie `6.12.113-1` (DSA-6568-1) · forky/sid `7.2.11-1`. bullseye 이하는 추적 대상 아님 |
    141 | Ubuntu 14.04 – 26.04 | Needs evaluation, 수정본 미출시 | — |
    142 | SLES 12 SP5 / 15 SP4–SP7 / 16.x, SLE Micro, openSUSE Leap 16 | 영향 받음, Pending | — |
    143 | openSUSE Leap 15.x, SLES 15 SP1–SP3 | 지원 종료 | — |
    144 | Fedora, Arch, openSUSE Tumbleweed, Alpine, Gentoo | 업스트림 stable 을 따름 | 업스트림 행 참고 |
    145 
    146 AWS 는 EC2·Lambda·Fargate 호스트 인프라가 영향을 받지 않는다고 발표했습니다. 다만 Amazon Linux 인스턴스 자체의 커널은 따로 업데이트해야 합니다.
    147 
    148 ## "지금 패치"의 안전장치
    149 
    150 - 가능하면 커널 패키지만 올립니다. `dnf`/`yum update 'kernel*'`, Debian/Ubuntu 에서는 설치된 `linux-*` 패키지만 `--no-remove` 로 올립니다. 원래 자동 설치였던 패키지는 그 표시를 유지하므로 오래된 커널은 계속 `apt autoremove` 로 정리됩니다.
    151 - 시스템 전체 업그레이드 도구는 자체 확인 질문을 그대로 둡니다: `pacman -Syu`, `zypper dup`, `apk upgrade`, `transactional-update dup`, Proxmox `apt-get dist-upgrade`.
    152 - `/boot` 여유 공간이 100MB 미만이면 패치를 시작하지 않습니다.
    153 - **다음 부팅 커널**이 수정본이고(`grubby` 기본값, 없으면 가장 최신 설치 커널, SLE Micro / MicroOS 는 다음 btrfs 스냅샷) 그 커널 이미지와 initramfs 가 있을 때만 재부팅합니다.
    154 - 재부팅 전 10초 카운트다운이 있고 Enter 나 Ctrl-D 로 취소됩니다. VM 이 실행 중이거나, `GRUB_DEFAULT` 가 `0` 이 아니거나, bash 가 없으면 카운트다운 대신 `yes` 를 입력해야 합니다.
    155 - AlmaLinux testing 저장소는 한 번만 쓰고 끝나면 저장소 패키지를 지웁니다.
    156 - WSL 안에서는 재부팅하지 않습니다.
    157 
    158 ## 에어갭 환경
    159 
    160 - 점검(판정)에는 네트워크가 필요 없고, 네트워크를 끊어도 결과가 같습니다.
    161 - 1번(지금 패치)은 서버에서 접근할 수 있는 패키지 저장소(내부 미러 등)가 있어야 합니다. 없으면 업데이트가 안전하게 실패하고, 재부팅 없이 수동 절차를 보여 줍니다.
    162 
    163 ## 요구 사항
    164 
    165 - `bash`, `awk`, `sed`, `grep`, coreutils 가 있는 리눅스. `sh` 로 실행해도 스스로 `bash` 로 다시 실행합니다.
    166 - 있으면 사용: `rpm` / `dpkg`, `systemd-detect-virt`, `grubby`, `gzip`, `stat`, `df`, `btrfs`.
    167 
    168 ## 한계
    169 
    170 - 수정 버전 표는 2026-10-20 시점 벤더 공지를 옮긴 것입니다.
    171 - 위 표에 없는 배포판은 업스트림 버전 번호로 추정합니다. 벤더가 버전을 바꾸지 않고 수정을 백포트했을 수 있습니다.
    172 - changelog 기반 판정은 벤더가 커널 changelog 에 CVE 번호나 수정 커밋 제목을 적어 두는 것을 전제로 합니다.
    173 - `grubby` 가 없는 GRUB 시스템은 가장 최신 설치 커널이 다음에 부팅된다고 가정합니다 (`GRUB_DEFAULT=0`).
    174 - 운영 서버에서 1번을 쓰기 전에 같은 배포판의 테스트용 머신에서 먼저 실행해 보세요.
    175 - 이 도구는 어떠한 보증 없이 "있는 그대로" 제공됩니다. 시스템 변경에 대한 책임은 사용자에게 있습니다.
    176 
    177 ## 참고 자료
    178 
    179 - CVE 레코드: https://www.cve.org/CVERecord?id=CVE-2026-99999
    180 - NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-99999
    181 - 연구자 글: https://pwn.ai/blog/pwnescape
    182 - AlmaLinux: https://almalinux.org/blog/2026-10-16-pwnescape-cve-2026-99999/
    183 - 분석: https://www.penligent.ai/hackinglabs/cve-2026-99999/
    184 - 요약(한국어): https://news.hada.io/topic?id=35568
    185 - Debian: https://security-tracker.debian.org/tracker/CVE-2026-99999
    186 - Ubuntu: https://ubuntu.com/security/CVE-2026-99999
    187 - Red Hat: https://access.redhat.com/security/cve/cve-2026-99999
    188 - SUSE: https://www.suse.com/security/cve/CVE-2026-99999.html
    189 - Amazon Linux: https://explore.alas.aws.amazon.com/CVE-2026-99999.html
    190 - Oracle Linux: https://linux.oracle.com/cve/CVE-2026-99999.html