Sploitus

Exploit for CVE-2017-7184

kitploit · 2026-08-25

Exploit Code

MARKDOWN216 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-GRISH-PRADHAN-CVE-2017-7184
# CVE-2017-7184 – Повышение привилегий в Linux Kernel XFRM (без sudo)

## Обзор

Этот репозиторий содержит **эксплойт для локального повышения привилегий (proof-of-concept)** для **CVE-2017-7184** , уязвимости ядра Linux в **подсистеме netlink XFRM (IPsec)**.

Эксплойт демонстрирует, как **непривилегированный пользователь** может получить **настоящего root (UID 0)** , следующим образом:

  1. Создание непривилегированного **пространства имён пользователя и сети (user + network namespace)**

  2. Получение **CAP_NET_ADMIN** внутри пространства имён

  3. Вызов **переполнения стека ядра** при обработке netlink XFRM

  4. Выполнение **ROP-цепочки в ядре** для вызова:

     * `prepare_kernel_cred(NULL)`
     * `commit_creds()`
  5. Безопасное возвращение в пользовательское пространство с полными правами root




**Sudo не требуется.**

* * *

## Детали уязвимости

Поле| Значение  
---|---  
CVE| CVE-2017-7184  
Компонент| Ядро Linux – XFRM Netlink  
Тип ошибки| Переполнение стека ядра  
Воздействие| Локальное повышение привилегий  
Вектор атаки| Локальный (непривилегированный пользователь)  
Класс эксплойта| Злоупотребление namespace + ROP  
Затрошено с| Ядра Linux ≤ 4.8  
Исправлено в| Патчи ядра, выпущенные в 2017 г.  
  
* * *

## Стратегия эксплуатации (обзорно)

  1. **Непривилегированное пользовательское пространство имён**

     * Использует `unshare(CLONE_NEWUSER | CLONE_NEWNET)`
     * Сопоставляет текущего пользователя с UID 0 внутри пространства имён
     * Предоставляет `CAP_NET_ADMIN` без sudo
  2. **Злоупотребление XFRM Netlink**

     * Создаёт сокет `NETLINK_XFRM`
     * Отправляет повреждённое сообщение `XFRM_MSG_NEWSA`
     * Вызывает переполнение стека ядра через атрибуты увеличенного размера
  3. **Выполнение ROP-цепочки в ядре**

     * Перезаписывает стек ядра
     * Выполняет контролируемую ROP-цепочку
     * Повышает привилегии (credentials) в контексте ядра
  4. **Возврат в пользовательское пространство**

     * Использует `swapgs; iretq`
     * Запускает интерактивную root-оболочку



* * *

## Требования

  * Уязвимое ядро Linux (протестировано на **4.8.0-36-generic**)
  * `unprivileged_userns_clone = 1`
  * Символы ядра доступны **или** известны смещения
  * `gcc` с поддержкой pthread



Проверка поддержки пространств имён:

root@kitploit:~
    
    
    cat /proc/sys/kernel/unprivileged_userns_clone
    

Ожидаемый вывод:

root@kitploit:~
    
    
    1
    

* * *

## Компиляция

root@kitploit:~
    
    
    gcc exploit.c -o exploit -pthread
    

* * *

## Запуск

root@kitploit:~
    
    
    ./exploit
    

**Не используйте sudo.**

При успехе вы получите **настоящую root-оболочку** :

root@kitploit:~
    
    
    uid=0(root) gid=0(root) groups=0(root)
    

* * *

## Определение адресов ядра

Эксплойт пытается:

  1. Получить символы из `/proc/kallsyms`

  2. Если доступ ограничен, использовать **жёстко заданные смещения** для:

     * `commit_creds`
     * `prepare_kernel_cred`
     * базового адреса ядра



⚠️ **ROP-гаджеты и смещения зависят от версии ядра.** Для других сборок их необходимо корректировать.

* * *

## Ожидаемые результаты

### Полностью успешный эксплойт

  * UID = 0
  * GID = 0
  * Интерактивная root-оболочка



### Частичный успех (система всё ещё уязвима)

  * Создание пространства имён работает
  * Создание XFRM-сокета проходит успешно
  * Эксплойт-нагрузка (payload) отправлена
  * Сбой ядра или отсутствие повышения привилегий



Это по-прежнему подтверждает, что система **уязвима**.

* * *

## Ограничения

  * Жёстко заданные ROP-гаджеты (зависят от ядра)
  * Отсутствует обход KASLR, кроме kallsyms
  * Отсутствует обход SMEP/SMAP для укреплённых ядер
  * Ненадёжен на современных ядрах



* * *

## Меры защиты

  * Обновите ядро до пропатченной версии
  * Отключите непривилегированные пользовательские пространства имён:



root@kitploit:~
    
    
    sysctl -w kernel.unprivileged_userns_clone=0
    

  * Включите KASLR, SMEP, SMAP
  * Ограничьте возможности netlink



* * *

## Отказ от ответственности

Этот код предоставлен **только в образовательных целях и для исследований в области безопасности**.

  * **Не** используйте на системах, которыми вы не владеете или на тестирование которых у вас нет разрешения
  * Автор **не несёт ответственности** за неправомерное использование или ущерб
  * Предназначен для изучения техник эксплуатации ядра



* * *

## Ссылки

  * CVE-2017-7184
  * Подсистема XFRM ядра Linux
  * Повышение привилегий через пользовательские пространства имён
  * ROP в ядре и эксплуатация `commit_creds`