CVE-2021-22909:深入分析EdgeRouter路由器中的远程代码执行漏洞

admin 2021年8月6日07:57:53评论270 views字数 4095阅读13分39秒阅读模式


CVE-2021-22909:深入分析EdgeRouter路由器中的远程代码执行漏洞点击上方蓝字关注我们


概述


EdgeRouter是美国优比快(Ubiquiti Networks)科技公司推出的一个路由器。2月优比快公司为Ubiquiti EdgeRouter发布了新的固件更新,以修复CVE-2021-22909漏洞。


该漏洞位于固件更新过程中,根本原因是由于缺少对服务器提供的证书的正确验证。利用该漏洞,攻击者可以在系统执行自动固件更新期间,以中间人(MiTM)身份提供恶意固件映像,从而能够以root用户权限在设备上执行任意代码。


路由器是如何执行固件更新的?


根据Ubiquiti官方文档,新的模块操作命令“添加系统映像”,可用于通过命令行界面更新路由器的固件。模块的操作命令允许用户可以快速修改路由器的操作状态,而无需输入复杂的命令行参数。这简化了日常操作流程,并最大程度地减少了人为输入错误。


Ubiquiti EdgeRouter路由器使用的模板系统是由vyatta-op软件包的提供的。添加系统映像命令在/opt/vyatta/share/vyatta-op/templates/add/system/image/node.def文件中被定义。

$ cat node.def help:  Add a new image to the system 
run: sudo /usr/sbin/ubnt-fw-latest --upgrade

通过运行此操作命令,用户可以使用--upgrade选项调用ubnt-fw-latest脚本。调用后,ubnt-fw-latest脚本将运行upgrade_firmware()函数,该函数将与Ubiquiti更新服务器进行通信,以获取有关最新固件版本的信息,包括固件的下载地址。

#!/bin/bash 
#------------------------------------------------------------------------------- STATUS_FILE="/var/run/fw-latest-status" UPGRADING_FILE="/var/run/upgrading" REBOOT_NEEDED_FILE="/var/run/needsareboot" DOWNLOADING_FILE="/var/run/downloading" URL="https://fw-update.ubnt.com/api/firmware-latest" ACTION="refresh" CHANNEL="release" DEFAULT_URL="https://localhost/eat/my/shorts.tar"

#------------------------------------------------------------------------------- while [[ $# -gt 0 ]] do key="$1" case $key in -r|--refresh) # Refresh status of latest firmware by ACTION="refresh" # fetching it from fw-update.ubnt.com shift ;; -s|--status) # Read latest firmware status from cache ACTION="status" shift ;; -u|--upgrade) # Upgrade to latest firmware ACTION="upgrade" shift ;; -c|--channel) # Target channel (release or public-beta) CHANNEL="$2" shift shift ;; *) # Ignore unknown arguments shift ;; esac done # ... upgrade_firmware() { # Fetch version number of latest firmware echo -n "Fetching version number of latest firmware... " refresh_status_file @> /dev/null
# Parse status file local fw_version=`cat $STATUS_FILE | jq -r .version 2> /dev/null` || fw_version="" local fw_url=`cat $STATUS_FILE | jq -r .url 2> /dev/null` || fw_version="" local fw_md5=`cat $STATUS_FILE | jq -r .md5 2> /dev/null` || fw_version="" local fw_state=`cat $STATUS_FILE | jq -r .state 2> /dev/null` || fw_version="" if [ -z "$fw_version" ] || [ "$fw_url" = "$DEFAULT_URL" ]; then echo "failed" exit 42 else echo "ok" echo " > version : $fw_version" echo " > url : $fw_url" echo " > md5 : $fw_md5" echo " > state : $fw_state" echo fi
if [ "$fw_state" == "can-upgrade" ]; then echo "New firmware $fw_version is available" echo sudo /usr/bin/ubnt-upgrade --upgrade-force-prompt "$fw_url"
elif [ "$fw_state" == "up-to-date" ]; then echo "Current firmware is already up-to-date (!!!)" echo sudo /usr/bin/ubnt-upgrade --upgrade-force-prompt "$fw_url"
elif [ "$fw_state" == "reboot-needed" ]; then echo "Reboot is needed before upgrading to version $fw_version"
else echo "Upgrade is already in progress" fi }
#------------------------------------------------------------------------------- if [ "$ACTION" == "refresh" ]; then refresh_status_file
elif [ "$ACTION" == "status" ]; then read_status_file
elif [ "$ACTION" == "upgrade" ]; then upgrade_firmware fi

该函数将继续解析服务器的返回的结果,并将其与当前固件版本进行比较。如果有可用更新,则脚本将调用ubnt-upgrade以从升级服务器提供的fw-download.ubnt.com域名中获取固件,然后执行实际的固件升级。

CVE-2021-22909漏洞详情


问题在于/usr/bin/ubnt-upgrade bash脚本下载固件的方式。get_tar_by_url()函数使用curl命令进行提取。但是,开发人员指定-k选项,也称–insecure选项,该选项禁用了TLS连接的证书验证。


get_tar_by_url () {     mkdir $TMP_DIR     if [ "$NOPROMPT" -eq 0 ]; then         echo "Trying to get upgrade file from $TAR"     fi 
if [ -n "$USERNAME" ]; then auth="-u $USERNAME:$PASSWORD" else auth="" fi
filename="${TMP_DIR}/${TAR##*/}" if [ "$NOPROMPT" -eq 0 ]; then curl -k $auth -f -L -o $filename $TAR # <----- else curl -k $auth -f -s -L -o $filename $TAR # <----- fi if [ $? -ne 0 ]; then echo "Unable to get upgrade file from $TAR" rm -f $filename rm -f $DOWNLOADING exit 1 fi
if [ ! -e $filename ]; then echo "Download of $TAR failed" rm -f $DOWNLOADING exit 1 fi
if [ "$NOPROMPT" -eq 0 ]; then echo "Download succeeded" fi
TAR=$filename }


由于/usr/sbin/ubnt-upgrade不会对证书的有效性进行验证,因此攻击者可以使用自签名证书欺骗fw-download.ubnt.com域名,而不会在设备上触发任何警告或投诉。


成功利用该漏洞,攻击者可以修改现有EdgeRouter固件映像,并修复文件中包含的校验和。在PoC概念证明中,研究人员修改了rc.local文件,以使用反向shell将其连接回攻击服务器。在升级过程中,系统会重新启动,从而触发rc.local脚本。


总结


攻击者可以进行MiTM中间人攻击,以模拟Ubiquiti控制的fw-download.ubnt.com域名。然而,想要成功的从该域名提供恶意固件,攻击者通常需要获取具有该域名私钥的有效证书。这意味着,攻击者可能需要事先入侵Ubiquiti,或从受信任的证书颁发机构中骗取Ubiquiti域名的证书。但是,该漏洞的存在,使攻击者无需再获取证书,这大大降低了攻击难度。


目前Ubiquiti官方已通过在模块命令中删除-k(–insecure)标志,在其EdgeMAX EdgeRouter V2.0.9-hotfix.1和更高版本中修复了该漏洞,请受影响的用户及时升级至安全版本。


CVE-2021-22909:深入分析EdgeRouter路由器中的远程代码执行漏洞

END



CVE-2021-22909:深入分析EdgeRouter路由器中的远程代码执行漏洞


好文!必须在看

本文始发于微信公众号(SecTr安全团队):CVE-2021-22909:深入分析EdgeRouter路由器中的远程代码执行漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年8月6日07:57:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2021-22909:深入分析EdgeRouter路由器中的远程代码执行漏洞http://cn-sec.com/archives/388809.html

发表评论

匿名网友 填写信息