Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
DIRTYFAIL — Linux 페이지 캐시 쓰기 취약점 탐지기 및 PoC: Copy Fail (CVE-2026-31431) 및 Dirty Frag (CVE-2026-43284/43500). 승인된 보안 연구 목적으로만 사용하십시오. | Kitploit
도구/GitHubGitHub/karazajac/dirtyfail
Privilege EscalationVulnerability AnalysisExploitationPenetration TestingPapers & ResearchLearning & EducationRed TeamingContainer EscapeBinary ExploitationLabs & Practice
GitHubkarazajac/dirtyfail
2612194개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

DIRTYFAIL

Linux 페이지 캐시 쓰기 취약점 탐지기 및 PoC: Copy Fail (CVE-2026-31431) 및 Dirty Frag (CVE-2026-43284/43500). 승인된 보안 연구 목적으로만 사용하십시오.

저장소 보기

DIRTYFAIL

Copy Fail 및 Dirty Frag Linux 페이지 캐시 쓰기 취약점 계열을 위한 통합 탐지기 및 PoC 하네스입니다.``` ██████╗ ██╗██████╗ ████████╗██╗ ██╗███████╗ █████╗ ██╗██╗ ██╔══██╗██║██╔══██╗╚══██╔══╝╚██╗ ██╔╝██╔════╝██╔══██╗██║██║ ██║ ██║██║██████╔╝ ██║ ╚████╔╝ █████╗ ███████║██║██║ ██║ ██║██║██╔══██╗ ██║ ╚██╔╝ ██╔══╝ ██╔══██║██║██║ ██████╔╝██║██║ ██║ ██║ ██║ ██║ ██║ ██║██║███████╗ ╚═════╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝

DIRTYFAIL은 보안 연구자를 위한 작고 문서화가 잘 된 C 도구입니다.
이 도구는 Linux 호스트가 이 계열의 세 가지 CVE에 취약한지 탐지하며,
명시적인 타입 확인을 거쳐 — 취약한 시스템에서 호출자를 루트 셸로
떨어뜨리는 실제 proof-of-concept를 실행합니다.

| CVE / 변형 | 이름 | DIRTYFAIL 지원 범위 |
|---|---|---|
| **CVE-2026-31431** | Copy Fail (algif_aead `authencesn` page-cache write) | 탐지 + 전체 PoC |
| **CVE-2026-43284 v4** | Dirty Frag — IPv4 xfrm-ESP page-cache write          | 탐지 + 전체 PoC |
| **CVE-2026-43284 v6** | Dirty Frag — IPv6 xfrm-ESP page-cache write (`esp6`) | 탐지 + 전체 PoC |
| **CVE-2026-43500**    | Dirty Frag — RxRPC page-cache write                  | 탐지 + 전체 PoC |
| Copy Fail GCM 변형 | xfrm-ESP `rfc4106(gcm(aes))` page-cache write        | 탐지 + 전체 PoC |

**보너스 모드:**

- **`--scan --active`** — sentinel-STORE 능동 프로브. 기본 `--scan`은
  CVE별 전제 조건(커널, 모듈, LSM 상태)과 함께 Copy Fail 프리미티브에 대한
  능동 프로브를 보고합니다. `--active`를 추가하면 sentinel 파일 STORE 프로브가
  나머지 네 가지 프리미티브(ESP v4, ESP v6, RxRPC, GCM)로 확장됩니다.
  각각 `/tmp` 센티널에 대해 커널 트리거를 발화하고, 마커 바이트가 실제로
  기록된 경우에만 VULNERABLE로 보고합니다. 이는 백포트로 패치된 커널
  (전제 조건은 취약하다고 하지만 프로브는 온전하다고 판단)과 패치되지 않은
  커널을 전체 익스플로잇을 실행하지 않고 구분할 수 있는 유일한 방법입니다.
  `/etc/passwd`는 절대 건드리지 않습니다. 커널 빌드별로 V6 STORE 시프트를
  자동 보정합니다.
- **`--exploit-backdoor`** — 지속적 uid-0 백도어: `/etc/passwd`의
  `nologin`/`false`/`sync` 줄을 `dirtyfail::0:0:<pad>:/:/bin/bash`로
  길이에 맞춰 덮어씁니다. 페이지가 축출될 때까지 셸 종료 후에도 유지됩니다.
  상태는 `--cleanup-backdoor`를 위해 `/var/tmp/.dirtyfail.state`에 저장됩니다.
  `dirtyfail` 사용자 이름은 의도적으로 이 프로젝트와 일치하도록 되어 있어
  어떤 감사에서도 즉시 식별할 수 있습니다 — 승인된 red-team 업무에서 다른
  식별자가 필요하면 `src/backdoor.c`의 `NEW_USER`를 변경하세요.
- **AppArmor 우회** — 단일 홉 `change_onexec("crun")` 재실행을 통해
  userns 능력을 유지하는 unconfined 프로필로 전환하여 Ubuntu의
  `apparmor_restrict_unprivileged_userns=1` 정책을 무력화합니다. 각 익스플로잇
  모드는 fork를 통해 내부적으로 처리합니다. 부모는 init 네임스페이스에 남고,
  자식이 우회 과정을 수행하며, 부모는 전역 페이지 캐시를 읽고 `su`를 실행해
  실제 init-ns 루트를 얻습니다. 레거시 `--aa-bypass` 플래그는 우회 메커니즘을
  단독으로 디버깅하기 위해 여전히 존재합니다. [§8.5 아키텍처](#85-architecture-outerinner-fork-based-bypass)를 참조하세요.

## 검증된 동작 환경

DIRTYFAIL은 여러 배포판과 커널 버전에 걸쳐 **경험적으로 종단 간 검증**되었습니다.
아래 매트릭스는 각 배포판의 새 설치에 대해 각 `--exploit-*` 모드를 실행한
모드별 테스트 결과를 반영합니다.

| 배포판 | 커널 | LSM | Copy Fail | xfrm-ESP v4 | xfrm-ESP v6 | RxRPC | GCM | 백도어 | SU 셸코드 |
|---|---|---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| Ubuntu 24.04 LTS | `6.8.0-111-generic` | AppArmor | 🛡²  | ✅ | ✅ | ✅ | ✅¹ | ✅¹ | (테스트 안 함) |
| Debian 13.4 | `6.12.86+deb13` | none | 🛡 | 🛡 | 🛡 | 🛡 | 🛡 | 🛡 | 🛡⁵ |
| AlmaLinux 10.1 | `6.12.0-124.8.1.el10_1` | SELinux | ✅ | ✅ | ✅ | ⏭³ | ✅ | ✅ | ✅ |
| Fedora 44 (Server) | `6.19.10-300.fc44` | SELinux | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ubuntu 26.04 LTS | `7.0.0-15-generic` | AppArmor (강화) | 🛡 | 🛡⁴ | 🛡⁴ | 🛡⁴ | 🛡⁴ | 🛡⁴ | 🛡⁵ |

**범례:** ✅ 익스플로잇이 성공하여 실제 init-ns 루트를 획득함  · 🛡 완화됨 — 익스플로잇이 커널 버그에 도달할 수 없음 (커널 패치 또는 LSM이 비특권 경로 차단)  · ⏭ 해당 없음 (전제 조건 누락)

### 능동 프로브 검증 (`--scan --active`)

`--active` 플래그는 탐지 중 CVE별로 센티널 파일 STORE 프로브를 추가합니다.
위와 동일한 4개 배포판(Debian, Fedora, AlmaLinux, Ubuntu 26.04)에 대해
프로브 출력을 검증했습니다. 아래 매트릭스는 모드별 프로브 결과를 보여주며
전체 익스플로잇 실제 결과와 일대일로 일치합니다:

| 배포판 | Copy Fail 프로브 | ESP v4 프로브 | ESP v6 프로브 | RxRPC 프로브 | GCM 프로브 |
|---|:-:|:-:|:-:|:-:|:-:|
| Debian 13.4 | 온전함 🛡 | 온전함 🛡 | 온전함 🛡 | 온전함 🛡 | 온전함 🛡 |
| Fedora 44   | marker @0 ✅ | STORE @0 ✅ | STORE @8 ✅ | byte change ✅ | sentinel[0] 0x41→0x27 ✅ |
| AlmaLinux 10.1 | marker @0 ✅ | STORE @0 ✅ | STORE @8 ✅ | preconds ⏭ | sentinel changed ✅ |
| Ubuntu 26.04 | 온전함 🛡 | LSM 차단 🛡 | LSM 차단 🛡 | LSM 차단 🛡 | LSM 차단 🛡 |

V6 프로브의 STORE 기록 오프셋(Fedora와 Alma에서 8)은 런타임에
`calibrate_v6_shift()`가 발견하는 경험적 `V6_STORE_SHIFT`와 일치합니다.
이는 자동 보정이 커널 빌드 전반에 걸쳐 이전의 하드코딩 상수를 올바르게
대체함을 확인해 줍니다.

¹ GCM과 Backdoor는 `algif_aead`를 로드할 수 있어야 합니다. Ubuntu 24.04는
Copy Fail 완화 조치로 이를 블랙리스트에 등록한
`/etc/modprobe.d/disable-algif_aead.conf`를 제공합니다. 블랙리스트를 제거하면
(예: 해당 완화 조치 이전 커널) 두 모드 모두 종단 간 동작합니다.

² Copy Fail의 algif_aead 경로는 modprobe 블랙리스트로 완화됩니다. 커널의
기저 CVE 프리미티브는 `authencesn`에 도달 가능한지 여부와 관계없이 동일합니다.
xfrm-ESP, RxRPC, GCM 변형은 algif_aead를 거치지 않으므로 모두 동일한 커널에서
기록됩니다.

³ AlmaLinux 10의 `kernel-modules-extra` 패키지는 Minimal 설치에서 기본으로
설치되지 않으므로 `rxrpc.ko`가 디스크에 없습니다. EPEL 또는 AlmaLinux extras
저장소에서 `kernel-modules-extra-$(uname -r)`을 설치하면 모듈이 돌아옵니다.
기본 minimal 설치에서는 RxRPC에 도달할 수 없습니다.

⁴ **Ubuntu 26.04 LTS는 비특권 익스플로잇을 종합적으로 차단합니다.**
제공되는 커널 `7.0.0-15.15`(2026-04-22 출시)는 **메인라인 패치
`f4c50a4034e6`(2026-05-07 병합)보다 약 2주 빠릅니다** — 따라서 버그는 여전히
커널에 존재합니다. Ubuntu의 방어는 커널 패치가 아니라 **AppArmor 강화를 통한
심층 방어**입니다:

- `apparmor_restrict_unprivileged_userns=1`이 기본으로 활성화됩니다.
- `unshare(CLONE_NEWUSER)` 시 커널 수준 AppArmor 적용은 `crun`, `chrome`,
  기본 `unconfined` 등 `(unconfined)` 플래그가 있는 프로필을 포함한 ANY 프로필을
  `audit deny capability`를 가진 `<profile>//&unprivileged_userns (mixed)`
  하위 프로필로 자동 전환합니다. 새 userns 내부의 uid 0은 어떤 capability도
  얻지 못합니다.
- 다른 프로필로의 `change_onexec`는 도움이 되지 않습니다. 명시적인
  `userns,` 권한과 `flags=(unconfined)`를 가진 `crun` 프로필조차 unshare 시
  자동 전환됩니다. `aa-exec -p crun bash -c 'unshare -U -n cat /proc/self/attr/current'`
  → `crun//&unprivileged_userns (mixed)`로 확인했습니다.
- `newuidmap`/`newgidmap`(setuid root)은 uid_map을 성공적으로 쓰지만,
  이후 `setresuid(0)`은 성공하는 반면 `ioctl(SIOCSIFFLAGS)` 및 기타 모든
  CAP_NET_ADMIN 게이트 syscall은 EPERM을 반환합니다. capability 거부가
  uid별이 아니라 네임스페이스별이기 때문입니다.

DIRTYFAIL 바이너리는 우회를 올바르게 준비하고 2단계에 도달하지만, 새 userns
내부에서 CAP_NET_ADMIN을 획득할 수 없습니다. 익스플로잇 인프라는 우회
기법과 관계없이 LSM 계층에서 차단됩니다. 우리는 `change_onexec(crun)`,
`change_onexec(chrome)`, `aa-exec -p <profile>`, 직접
`unshare(USER|NET) + newuidmap`을 모두 테스트했으며, 모두 동일한
`unprivileged_userns` 하위 프로필을 생성합니다.

**이것은 Canonical의 훌륭한 보안 작업입니다.** 이 버그 클래스는 커널 재빌드
없이 비특권 사용자에 대해 완화됩니다. 이후 안정 업데이트에서 커널 패치 자체도
함께 제공되어 방어를 완성할 가능성이 높습니다.

⁵ **`--exploit-su` 셸코드 주입**은 동일한 Copy Fail algif_aead 4바이트
프리미티브(`cf_4byte_write`)에 의존합니다. Copy Fail이 패치된 커널
(Debian 13.4) 또는 LSM 차단 커널(Ubuntu 26.04 — 다만 algif_aead 경로도
7.0.0-15에서 패치됨)에서는 심기가 진행되지만 검증 단계가 실패하고
("page cache does not match planted shellcode") 자동 되돌리기가
`/usr/bin/su`를 복원합니다. AlmaLinux 10.1(파일 오프셋 `0x45b0`의 진입점)과
Fedora 44(오프셋 `0x1b60`)에서 종단 간 테스트했습니다. ELF 파서는 각
배포판의 PIE 베이스를 독립적으로 처리합니다. Fedora 44의 실제 루트 증거:
`uid=0(root) gid=0(root) ... context=unconfined_u:unconfined_r:unconfined_t`.

테스트 재현성:

- 각 배포판을 깨끗한 ISO에서 재설치하고, SSH 키 인증 + NOPASSWD sudo를 설정한 후,
  각각에 DIRTYFAIL을 클론하고 빌드했으며, `clean-build` Parallels 스냅샷을 찍은
  다음 `--no-shell`(fadvise + drop_caches를 통한 자동 되돌리기)로 5가지 익스플로잇
  모드를 모두 실행했습니다.
- 경험적 결과 행은 실제 `--exploit-*` 출력을 파싱하여 성공 신호를 찾아 파생됩니다:
  `page cache now reports <user> with uid 0`, `root password field is now empty`,
  `is now uid 0` (백도어), 또는 실패 패턴 중 하나(`write did not land`,
  `byte flip failed`, `setresuid: Invalid`, `add_rxrpc_key: No such device`,
  `page cache not in expected shape`).
- RxRPC 및 Backdoor "실제 루트" 검증을 위해 `echo "" | su - root` /
  `echo "" | su - dirtyfail`을 실행하고 `uid=0(root)` 및 `/etc/shadow` 읽기
  성공을 확인했습니다.

> **승인된 테스트만 허용됩니다.** DIRTYFAIL은 소유했거나 명시적으로 평가를
> 의뢰받은 시스템에서만 사용하세요. 익스플로잇 모드는 커널 페이지 캐시의
> `/etc/passwd`를 손상시킵니다 (디스크의 파일은 절대 건드리지 않습니다).
> 정리는 `dirtyfail --cleanup` 또는
> `echo 3 > /proc/sys/vm/drop_caches`입니다.

---

## 목차
도구 다운로드