
Отчёт об анализе эксплойтов CVE для ядра Linux и соответствующая среда отладки. Вам больше не нужно компилировать ядро Linux и настраивать своё окружение.
Продолжает обновляться......
Отчёт об анализе эксплойтов CVE для ядра Linux и соответствующая среда отладки. Вам больше не нужно компилировать ядро Linux и настраивать своё окружение.
Этот репозиторий предназначен для сбора всех эксплойтов ядра Linux и соответствующей среды отладки. Вы можете использовать Qemu для загрузки ядра и тестирования эксплойта.
john@john-virtual-machine:~/Desktop/kernel-exploit-factory/CVE-2017-11176$ ./start.sh chmod: /dev/csaw: No such file or directory ifconfig: SIOCSIFADDR: No such device route: SIOCADDRT: No such device / $ uname -a Linux (none) 4.11.9 #1 SMP Sat Feb 20 21:52:39 CST 2021 x86_64 GNU/Linux / $ id uid=1000(chal) gid=1000(chal) groups=1000(chal) / $ cd exp /exp $ ./exp-slab-4119 [] sk_rmem_alloc > sk_rcvbuf ==> ok [] mq_notify start [*] wake up thread 1 ... ... /exp # id uid=0(root) gid=0(root) /exp #
---
## Каталог
1. CVE-2015-8550
2. CVE-2016-9793
3. 4-20-BPF-integer
4. CVE-2017-5123
5. CVE-2017-6074
6. CVE-2017-7308
7. CVE-2017-8890
8. CVE-2017-11176
9. CVE-2017-16995
10. CVE-2017-1000112
11. CVE-2018-5333
12. CVE-2019-9213 & CVE-2019-8956
13. CVE-2019-15666
14. CVE-2020-8835
15. CVE-2020-27194
16. CVE-2021-3156
17. CVE-2021-31440
18. CVE-2021-3490
19. CVE-2021-22555
20. CVE-2021-41073
21. CVE-2021-4154
22. CVE-2021-42008
23. CVE-2021-43267
24. CVE-2022-0185
25. CVE-2022-0847
26. CVE-2022-0995
27. CVE-2022-1015
28. CVE-2022-2588
29. CVE-2022-2602
30. CVE-2022-2639
31. CVE-2022-25636
32. CVE-2022-27666
33. CVE-2022-32250
34. CVE-2022-34918
35. CVE-2023-2598
36. CVE-2024-1086
37. CVE-2025-21702
38. CVE-2026-23271
---
## Детали
#### 1.CVE-2015-8550
[разбор](https://blog.csdn.net/panhewu9919/article/details/100891770)
**Тестовая версия**: Linux-4.19.65
**Защита**: включены kaslr/SMEP, SMAP не включен.
**Уязвимость**: **Double-Fetch-уязвимость**, вызванная оптимизацией компилятора gcc, позволяющая напрямую перехватить поток управления.
#### 2. CVE-2016-9793
[разбор](https://blog.csdn.net/panhewu9919/article/details/120164051)
**Тестовая версия**: Linux-4.8.13
**Защита**: KASLR/SMAP/SMEP не включены. Поддельная структура [skb_shared_info](https://elixir.bootlin.com/linux/v4.8.13/source/include/linux/skbuff.h#L414) находится в пользовательском пространстве — очевидно, что обойти SMAP нельзя.
**Уязвимость**: функция [sock_setsockopt()](https://elixir.bootlin.com/linux/v4.8.13/source/net/core/sock.c#L658) в `net/core/sock.c` **некорректно обрабатывает отрицательные значения**, из-за чего `sk_sndbuf` и `sk_rcvbuf` становятся отрицательными. При вызове `write` значения `skb->head` и `skb->end` устанавливаются неверно, а при последующем вызове `close` при освобождении происходит обращение к пользовательскому пространству, что вызывает ошибку. По адресу пользовательского пространства `0xfffffed0` подделывается структура [skb_shared_info](https://elixir.bootlin.com/linux/v4.8.13/source/include/linux/skbuff.h#L414), и через `skb_shared_info->destructor_arg->callback` перехватывается поток управления.
#### 3. 4-20-BPF-integer
[разбор](https://www.cnblogs.com/bsauce/p/11560224.html)
**Тестовая версия**: Linux-4.20.0-rc3
**Защита**: SMEP включен, kaslr/SMAP не включены.
**Уязвимость**: в модуле Linux ebpf **целочисленное переполнение** в `queue_stack_map_alloc()` приводит к переполнению кучи. Изменение указателя виртуальной таблицы перехватывает поток управления на `xchg eax, esp`.
#### 4.CVE-2017-5123
[разбор](https://www.jianshu.com/p/90a040114188)
**Тестовая версия**: Linux 4.14-rc4
**Защита**: SMEP / SMAP включены, KASLR отключен.
**Уязвимость**: реализация `waitid` в `/kernel/exit.c` при вызове `unsafe_put_user()` для копирования данных ядра в адреса пользовательского пространства не вызывает `access_ok()` для проверки корректности адреса, из-за чего данные фактически можно копировать в адреса пространства ядра. **waitid не проверяет допустимость пользовательского адреса, что приводит к произвольной записи нуля**. Можно выполнить shellcode с адреса 0 или перезаписать cred в пределах угаданного диапазона для повышения привилегий.
#### 5.CVE-2017-6074
[разбор](https://bsauce.github.io/2021/09/17/CVE-2017-6074/) [ссылка](https://github.com/xairy/kernel-exploits/tree/master/CVE-2017-6074)
**Тестовая версия**: Linux-4.9.12
**Защита**: SMEP/SMAP включены, kASLR отключен.
**Уязвимость**: в реализации DCCP (протокол управления перегрузкой дейтаграмм) набора протоколов IPv6 в Linux функция [dccp_rcv_state_process()](https://elixir.bootlin.com/linux/v4.9.12/source/net/dccp/input.c#L574) из `net/dccp/input.c` в состоянии `LISTEN` некорректно обрабатывает структуру данных пакета `DCCP_PKT_REQUEST`. Если пользователь вызывает `setsockopt()` с опцией `IPV6_RECVPKTINFO`, возникает **Double-Free структуры `sk_buff`**. Метод эксплуатации аналогичен CVE-2016-8655. Первое срабатывание уязвимости: спреем кучи подделывается структура `po->rx_ring->prb_bdqc->retire_blk_timer`, выполняется `native_write_cr4(0x406e0)` для отключения SMEP/SMAP. Второе срабатывание: спреем кучи подделывается структура `skb-> ... ->destructor_arg`, выполняется `commit_creds(prepare_kernel_cred(0))` для повышения привилегий.
#### 6.CVE-2017-7308
[разбор](https://www.jianshu.com/p/b53862cd64a6) [ссылка](https://github.com/xairy/kernel-exploits/tree/master/CVE-2017-7308)
**Тестовая версия**: Linux-4.10.6
**Защита**: SMEP / SMAP включены, KASLR отключен.
**Уязвимость**: функция [`packet_set_ring()`](https://elixir.bootlin.com/linux/v4.10.6/source/net/packet/af_packet.c#L4181) в `net/packet/af_packet.c` неправильно проверяет размер блока (size), условие оценки длины ошибочно, что приводит к **переполнению кучи**. Требуется привилегия `CAP_NET_RAW`. Дважды перехватываются указатели на функции: сначала отключается защита SMEP/SMAP, затем повышаются привилегии.
#### 7.CVE-2017-8890
[разбор](https://www.jianshu.com/p/699de662f567) [ссылка](https://xz.aliyun.com/t/2383)
**Тестовая версия**: Linux-4.10.15
**Защита**: SMEP включен, kASLR и SMAP отключены.
**Уязвимость**: в функции [`inet_csk_clone_lock()`](https://elixir.bootlin.com/linux/v4.10.15/source/net/ipv4/inet_connection_sock.c#L652) из файла `net/ipv4/inet_connection_sock.c` присутствует уязвимость **Double-Free**. Double-Free используется для подмены указателя на callback-функцию RCU, отключения SMEP и перехода на shellcode для изменения cred.
#### 8.CVE-2017-11176
[разбор](https://www.jianshu.com/p/76041ec5c59f)
**Тестовая версия**: Linux-4.11.9
**Защита**: SMEP включен, kASLR и SMAP отключены.
**Уязвимость**: в реализации очередей сообщений POSIX в ядре Linux функция `mq_notify()` не обнуляет указатель sock, что приводит к UAF. На самом деле это **Double-Free из-за гонки (race condition)**, однако окно гонки можно продлевать бесконечно.
#### 9.CVE-2017-16995
[разбор](https://www.cnblogs.com/bsauce/p/11583310.html)
**Тестовая версия**: Linux-4.4.110
**Защита**: SMEP/SMAP/kaslr включены.
**Уязвимость**: в модуле Linux ebpf проблема **целочисленного расширения (integer extension)**. Основная проблема в том, что значения регистров в двух местах имеют разные типы, из-за чего функция проверки и реальная функция выполняются по-разному. Эта уязвимость не включает атаки на стек или перехват потока управления; повышение привилегий выполняется только с использованием данных системных вызовов. Это типичный пример Data-Oriented Attack на ядро Linux.
#### 10. CVE-2017-1000112
[разбор](https://www.jianshu.com/p/1fa163fd5b82) [ссылка](https://bbs.pediy.com/thread-265319.htm)
**Тестовая версия**: Linux-4.12.6
**Защита**: SMEP включен, SMAP/kaslr отключены.