Sploitus

Exploit for block-copyfail

kitploit Β· 2026-08-27

Exploit Code

MARKDOWN128 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ATGREEN-BLOCK-COPYFAIL
# block-copyfail

**Proof of concept** β€” срСда выполнСния для смягчСния послСдствий CVE-2026-31431 (Β«Copy FailΒ») β€” ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ Π² ядрС Linux Ρ‡Π΅Ρ€Π΅Π· криптографичСский шаблон `authencesn` Π² `algif_aead`.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, это **Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ**. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° BPF LSM ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ `socket_bind` ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ всС привязки AEAD Ρ‡Π΅Ρ€Π΅Π· AF_ALG β€” подсистСму, ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Copy Fail. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ…ΠΎΠ΄Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ криптографичСских шаблонов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `pcrypt(authencesn(...))`). Π”Ρ€ΡƒΠ³ΠΎΠ΅ использованиС AF_ALG (hash, skcipher) Π½Π΅ затрагиваСтся.

Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ PID, ΠΈΠΌΠ΅Π½ΠΈ процСсса ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ.

## ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования

  * Π―Π΄Ρ€ΠΎ Linux 5.7+ с `CONFIG_BPF_LSM=y` ΠΈ `lsm=bpf` Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ
  * SBCL 2.0+
  * Whistler (компилятор eBPF Π½Π° Common Lisp)



root@kitploit:~
    
    
    make doctor   # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования
    

## Быстрый старт

root@kitploit:~
    
    
    git clone https://github.com/atgreen/block-copyfail.git
    cd block-copyfail
    make ubi8-build
    sudo ./block-copyfail
    

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ остаётся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Π΄ΠΎ наТатия Ctrl-C, послС Ρ‡Π΅Π³ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ.

## Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ сборка

Для сборки Π½Π° вашСй машинС Π½ΡƒΠΆΠ½Ρ‹ SBCL ΠΈ Whistler (компилятор eBPF Π½Π° Common Lisp):

root@kitploit:~
    
    
    git clone https://github.com/atgreen/whistler.git ~/git/whistler
    make build
    sudo ./block-copyfail
    

## Π‘Π±ΠΎΡ€ΠΊΠ° пСрСносимого Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ° (EL8+)

Π‘Π±ΠΎΡ€ΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° UBI8 позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π° RHEL/CentOS/Alma/Rocky 8+, Fedora, Ubuntu 20.04+ ΠΈ любом Linux с glibc 2.28 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅. SBCL ΠΈΠ»ΠΈ Whistler Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ β€” просто скопируйтС Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ ΠΈ запуститС Π΅Π³ΠΎ.

root@kitploit:~
    
    
    make ubi8-build
    scp block-copyfail root@server:
    ssh root@server ./block-copyfail
    

## ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π² ELF-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ стандартный Ρ„Π°ΠΉΠ» `.bpf.o`, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· `bpftool`, `libbpf` ΠΈΠ»ΠΈ любой Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ BPF:

root@kitploit:~
    
    
    make elf
    sudo mkdir -p /sys/fs/bpf/copyfail
    sudo bpftool prog loadall block-copyfail.bpf.o /sys/fs/bpf/copyfail autoattach
    

Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ удалСния:

root@kitploit:~
    
    
    sudo rm -rf /sys/fs/bpf/copyfail
    

## ВСстированиС

ΠŸΡ€ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ запуститС тСст Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ:

root@kitploit:~
    
    
    python3 trigger-test.py
    

ВСстовый скрипт пытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ привязку AEAD Ρ‡Π΅Ρ€Π΅Π· AF_ALG (эксплойт Π½Π΅ выполняСтся).

**ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² тСстовом Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅:**

root@kitploit:~
    
    
    BLOCKED: aead/authencesn(hmac(sha256),cbc(aes)) β€” [Errno 1] Operation not permitted
    BLOCKED: aead/gcm(aes) β€” [Errno 1] Operation not permitted
    ALLOWED: hash/sha256
    ALLOWED: skcipher/cbc(aes)
    

**ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°:**

root@kitploit:~
    
    
    Copy Fail blocker active β€” all AF_ALG AEAD binds blocked.
    Other AF_ALG usage (hash, skcipher) unaffected.
    Watching for blocked attempts. Press Ctrl-C to exit.
    
    TIME                  PID       COMMAND
    ----                  ---       -------
    06:38:12               31337  python3
    

Π‘Π΅Π· Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° тСстовый скрипт Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ `ALLOWED` для всСх Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

## Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° BPF считываСт 7 Π±Π°ΠΉΡ‚ `struct sockaddr_alg` ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² `socket_bind` Ρ‡Π΅Ρ€Π΅Π· `bpf_probe_read_kernel`, провСряСт `salg_family == AF_ALG` ΠΈ `salg_type == "aead"` ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `-EPERM` ΠΏΡ€ΠΈ совпадСнии. Π­Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ всС привязки Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² AEAD нСзависимо ΠΎΡ‚ влоТСнности шаблонов. Бобытия ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ пространство Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€.

Написано Π½Π° Whistler β€” Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅ Common Lisp, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилируСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ eBPF β€” Π±Π΅Π· C, clang ΠΈΠ»ΠΈ LLVM.

## ЛицСнзия

MIT