
Безопасно определите, уязвима ли цель PAN-OS для CVE-2026-0265.
Безопасно определите, уязвим ли портал GlobalProtect Palo Alto Networks PAN-OS для CVE-2026-0265, без аутентификации какой-либо сессии или изменения какого-либо состояния.
CVE-2026-0265 — это удаленный обход аутентификации, затрагивающий PAN-OS и Panorama, который срабатывает, когда профиль аутентификации использует облачную службу аутентификации (CAS). Уязвимая функция pan_auth_verify в libpanmp_mp.so отправляет проверку подписи JSON Web Token исключительно на основе управляемого атакующим заголовка alg — поддельный JWT с alg=HS256 и HMAC-SHA256(cas_public_key_pem, header.payload) в качестве подписи принимается как настоящий токен CAS с подписью RS256, позволяя любому атакующему выдать себя за любого пользователя.
Ошибка доступна через две поверхности атаки — портал GlobalProtect (/saml/acs.esp, дает VPN-сессию) и интерфейс управления (, дает полные права администратора PAN-OS).
/SAML20/SP/ACSОдин анонимный запрос GET /global-protect/prelogin.esp раскрывает все необходимое для авторитетного заключения:
<cas-auth>yes|no</cas-auth>, устанавливаемый непосредственно конфигурацией аутентификации портала. Значение yes подтверждает, что предварительное условие CVE выполнено для этого слушателя.<saml-request>. Его декодирование дает авторитетную строку версии брандмауэра, которая затем сверяется с матрицей исправлений для каждой базы из рекомендации поставщика для вынесения вердикта..saas — Сборки, управляемые облаком PA, не затрагиваются согласно разъяснению Palo Alto (2026-05-21), независимо от номера базовой сборки.Скрипт выводит вердикт, сообщенную версию PanOS брандмауэра (чтобы защитник мог проверить оценку по своему инвентарю) и базовый контекст триажа (prelogin_status, prelogin_msg, http_status, примечания об ошибках). Если вашему конвейеру нужны более подробные метаданные устройства, сверьте целевой URL с вашим собственным инвентарем.
git clone https://github.com/BishopFox/CVE-2026-0265-check
cd CVE-2026-0265-check
pip install requests
Требуется Python 3.9+ и пакет requests.
Укажите одну или несколько целей в качестве позиционных аргументов, через --targets-file или через stdin. Имена хостов и строки host:port автоматически оборачиваются в https://.
python3 CVE-2026-0265-check.py [options] <target> [<target>...]
| Флаг | Значение |
|---|---|
-f, --targets-file FILE | Читать по одной цели из строки файла. |
-t, --timeout SECONDS | Тайм-аут на запрос. По умолчанию: 20.0 |
-c, --concurrent N | Максимальное количество параллельных целей. По умолчанию: 5 |
-b, --brief | Выводить <url>\t<verdict>\t<panos_version> на цель вместо полного JSON |
--user-agent UA | Переопределить User-Agent зонда. По умолчанию используется строка Chrome, похожая на браузер, которая обходит версионный шлюз GP-клиента gpsvc; используйте свой UA, если вам нужна видимость в журналах доступа и не нужен путь, ограниченный по версии. |
Вывод по умолчанию: один объект JSON на цель в stdout (удобно для jq).
Скрипт выдает один из трех классов вердикта на цель. Определенные вердикты авторитетно отвечают на вопрос об уязвимости для этой цели. Неопределенные вердикты указывают, что зонд не смог прийти к заключению, и требуется последующая проверка оператором.
| Вердикт | Когда |
|---|---|
VULNERABLE | CAS подключен, PanOSversion строго ниже исправления из рекомендации для этой базы, не .saas. |
| Вердикт | Когда |
|---|---|
PATCHED | CAS подключен, PanOSversion на уровне или выше исправления из рекомендации для этой базы. |
NOT-AFFECTED-SAAS | CAS подключен, но PanOSversion имеет суффикс .saas (управляемый облаком PA; не затрагивается согласно PA от 2026-05-21). |
NOT-AFFECTED-NO-CAS | Prelogin успешно вернулся, но <cas-auth> указывает на SAML / RADIUS / LDAP / локальную аутентификацию. CVE не применяется к этому слушателю. |
NOT-AFFECTED-NOT-GLOBALPROTECT | Форма ответа не является порталом GP (например, "GlobalProtect portal does not exist"). Вне области действия. |
| Вердикт | Когда | Рекомендуемые дальнейшие действия |
|---|---|---|
UNDETERMINED-VERSION-GATED | gpsvc вернул "CAS is not supported by the client". CAS подключен, но зонд был отклонен по причине User-Agent; PanOSversion невозможно прочитать из этого ответа. | Повторите с --user-agent, установленным на реальную строку GP-клиента. |
UNDETERMINED-MTLS-GATED | "Valid client certificate is required" в ответе prelogin. Поверхность аутентификации скрыта за шлюзом mTLS. | Подтвердите сборку через отдельный канал (авторитетная версия клиента или зонд с действительным сертификатом клиента). |
UNDETERMINED-ERROR | Сетевая ошибка, некорректный ответ, неразбираемая PanOSversion или сбой декодирования Token несмотря на cas-auth=yes. | Повторите; если ошибка повторяется, цель, вероятно, недоступна с данной позиции. |
$ python3 CVE-2026-0265-check.py -b -f targets.txt
https://gp1.customer.example VULNERABLE 11.1.6-h23
https://gp2.customer.example PATCHED 11.1.6-h32
https://vpn.cloud.customer.example NOT-AFFECTED-SAAS 11.2.7-h9.saas
https://mgmt.customer.example NOT-AFFECTED-NO-CAS -
https://www.customer.example NOT-AFFECTED-NOT-GLOBALPROTECT -
https://internal-vpn.customer.example UNDETERMINED-MTLS-GATED -
$ python3 CVE-2026-0265-check.py gp.customer.example | jq .
{
"target": "https://gp.customer.example",
"verdict": "VULNERABLE",
"panos_version": "11.1.6-h23",
"prelogin_status": "Success",
"http_status": 200,
"notes": [
"11.1.6-h23 is below the advisory's patched hotfix for this base."
]
}
gpsvc ограничивает скорость при последовательном зондировании — скрипт уже повторяет каждый HTTP 503 с увеличивающейся задержкой, но -c 5 и умеренный -t дружелюбны к большим паркам:
cat all-targets.txt | python3 CVE-2026-0265-check.py -b -c 5
Скрипт может выдать определенный вердикт только когда:
NOT-AFFECTED-NOT-GLOBALPROTECT или UNDETERMINED-ERROR).UNDETERMINED-MTLS-GATED) или агрессивной проверкой User-Agent (иначе UNDETERMINED-VERSION-GATED).Распространяется под лицензией MIT.
Использование этого инструмента для атаки на цели без предварительного взаимного согласия незаконно. Ответственность за соблюдение всех применимых местных, государственных и федеральных законов лежит на конечном пользователе. Разработчики не несут ответственности за любое неправильное использование или ущерб, причиненный этой программой.