CVE-2020-7248 OpenWRT libubox标记二进制数据序列化漏洞(更新中)

news2024/9/22 19:44:23

提要

        该文档会一直处于更新当中,当状态为完毕后,才是更新完成。由于网络上关于该漏洞原理的分析文档和资源实在是太少,而本人关于该方向也才是刚入门,能力有限,所以复现需要的时间较长,需要补充和学习的东西较多,若大家有什么建议,欢迎评论区一起讨论进步。

漏洞简介

        OpenWrt是一套针对嵌入式设备的Linux操作系统,libubox是其中的一个提供事件循环、二进制格式处理、Linux链表实现和JSON辅助处理的基础库。

        该漏洞与标记的二进制数据的JSON转换部分(blob)有关。Blob属性有足够大的double类型数值,由blobmsg_format_json处理,会溢出为堆栈上分配的JSON输出指定的缓冲区数组。攻击者可以向blobmsg_format_json提供特制的二进制blob或JSON输入,从而在double值序列到JSON缓冲区时造成堆栈溢出。

        libubox库是OpenWrt项目的核心组件,并在项目的其他部分使用。通过在项目的LXR[1]中查找上述易受攻击的blobmsg_format_json函数,可以看到这些相互依赖关系,该函数揭示了netifd、procd、ubus、rpcd、uhttpd中的引用。也就是说,依赖调用到blobmsg_format_json的有很多其它的部分,我们本次复现主要针对rpcd对这个漏洞的利用。

        简单介绍一下rpcb

参考:

[OpenWrt Wiki] Security Advisory 2020-01-31-2 - libubox tagged binary data JSON serialization vulnerability (CVE-2020-7248)

论文:A Grounded Theory Based Approach to Characterize So! ware" Attack Surfaces

受影响的漏洞版本:

        OpenWrt 18.06.0 - 18.06.6

        OpenWrt 19.07.0-rc1 - 19.07.0

漏洞原理分析

        本次我们选取的漏洞分析环境的版本是Openwrt18.06.5,具体的漏洞的源代码等内容我们在另一篇博客,关于CVE-2020-7982的漏洞复现中,已经提到了代码的位置,如下地址参考:

CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(完结)_openwrt 漏洞-CSDN博客

本次实验要分析的源代码的参考地址如下,后续我们不再赘述

https://git.openwrt.org/?p=project/libubox.git;a=blob;f=blobmsg_json.c;h=ec8b482c30c96a355aca58651632bc509a16bedf;hb=HEAD

根据漏洞的介绍,我们需要先找到libubox的源代码

该项目的地址如下

https://git.openwrt.org/?a=project_list;pf=project

之后我们在blobmsg_json.h中可以找到我们想要的函数blobmsg_format_json

根据函数的内容声明,其会先调用blobmsg_format_json_with_cb这个函数,我们可以在blobmsg_json.c文件中找到这个函数

首先定义了一个strbuf的结构体s,并且初始化内容为0。strbuf 结构体通常用于在C语言中表示可变长度的字符串缓冲区。它通常包含有关缓冲区内容和大小的信息,以便可以方便地进行字符串操作。

一般而言,strbuf 结构体可能包含以下成员:

  • char *buf:指向存储字符串数据的内存缓冲区的指针。
  • size_t len:当前字符串的长度。
  • size_t alloc:分配给缓冲区的内存空间大小。

之后其调用函数setup_strbuf 具体如下图

我们首先先找到blob_attr这个数据结构的结构样式,我们可以找到blob.h这个文件,我们在其中可以看到blob_attr这个结构,如下图所示

其中uint32_t是一个32位,也就是4字节的数据类型,而data是一个可变长度的数据类型,所以一般来说,原始的blob_attr结构的长度应该是32位。

那么首先setup_strbuf函数会调用blob_len函数来进行处理,我们同样可以在blob.h文件中找到函数blob_len,如下图

我们可以根据最开始的引用,

在文件utils.h中找到函数be32_to_cpu的结构,最终我们发现了两个

总的来说,其作用就是定义了一个内联函数 blob_len,用于计算属性的有效载荷长度。通过 be32_to_cpu 宏将 attr->id_len 中的大端字节序转换为CPU本地字节序。CPU本地字节序则表示CPU处理器默认采用的字节序方式。因为不同的CPU架构可能采用不同的字节序,所以需要在不同字节序之间进行转换,以确保数据在不同平台上的正确解释和处理。这具体可以参考计组相关的知识。然后使用按位与操作符和 BLOB_ATTR_LEN_MASK 来提取有效载荷长度,并减去 struct blob_attr 的大小。其中我们在blob.h中看到了

        这样一个定义,BLOB_ATTR_ID_MASK被定义为了0x7f000000,其二进制的形式是1111111000000000000000000000000,根据按位与的运算逻辑,本质就是把有效载荷数据的前7位进行按位与操作,而后续多出来的字节数据都会被置为0,最终其有效长度也是8x4bit=32bit,也就是4B的长度大小。

        最终我们获得了attr的长度,将其赋值给s的len这样一个成员变量。

漏洞环境搭建

漏洞复现

payload

$ ubus call luci getFeatures '{ "banik": 00192200197600198000198100200400.1922 }'

漏洞修复

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国的AI技术水平,是否已经到了能够帮助创作者实现内容的程度?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 是的,早就实现了,我从上年开始用AI辅助写小说,已经挣了2万多。 这是我在番茄那开的小号&#xff0…

Redis的集群模式

1. Redis三种集群模式 Redis 提供的三种集群模式各有其特点和适用场景,以下是对这三种模式的简要概述: 主从模式(Master-Slave Replication): 在这种模式下,数据在主节点(Master)上…

服务器部署环境(docker安装Mysql + Redis + MongoDB)

1. 安装Docker 1、选择要安装的平台 Docker要求CentOS系统的内核版本高于3.10 uname -r #通过 uname -r 命令查看你当前的内核版本官网地址 2. 卸载已安装的Docker, 使用Root权限登录 Centos。确保yum包更新到最新。 sudo yum update如果操作系统没有安装过Docker , 就不需要…

自动化测试之python操作Oracle遇到的问题:Oracle-Error-Message: DPI-1047

自动化测试需要连接数据库,进行一些增删改查的操作,那么针对python语言,如何才能够通过程序完成连接数据库并且进行操作呢?可以通过cx_oracle这个模块来实现。 一、问题描述: 下面是我在实践的过程中遇到的问题&#…

面试知识储备-redis和redission

1.redis的使用 引入依赖,自动注解redistemplate即可使用, 默认的redistemplate存入到redis中是字符流的形式,需要配置redistemplate, 如果不想配置,可以使用stringRedistemplate 可以使用string类型,但是…

Python-numpy基础--------2

1.full()创建函数 目录 1.full()创建函数 2.创建单位矩阵 3.linspace创建 4.logspace 创建 5.二维数组的索引和切片: 1.索引直接获取 在NumPy中,full() 函数用于创建一个给定形状、类型的新数组,并用指定的值填充这个数组。这个函数非…

p24 p25作业讲解(2)

#include<stdio.h> #include<stdlib.h> int count_bit_one(int n) { int count0;while(n){if(n%21){count;}nn/2;}return count;} int main(){int a0;scanf("%d",&a);//写一个函数求a的二进制(补码)表示中有几个1int countcount_bit_one(a);printf(&…

C盘上的软件怎么移动到D盘?C盘满了,教你轻松转移软件到D盘

在日常使用电脑的过程中&#xff0c;我们经常会遇到C盘空间不足的情况。为了释放C盘的空间&#xff0c;或者为了更好地管理我们的软件和文件&#xff0c;我们可能需要将安装在C盘的软件移动到D盘。那么&#xff0c;C盘上的软件怎么移动到D盘呢&#xff1f;本文将介绍两种常用的…

Ubuntu-文件管理器中鼠标右键添加文本文件

文件管理器中鼠标右键添加文本文件 一、概述二、步骤 一、概述 Ubuntu在文管右键发现没有创建文本文件的菜单&#xff0c; 期望如下所示&#xff0c;这样的操作非常简单 二、步骤 找到模板文件夹 在模板文件夹&#xff0c;创建自己想要的文件就好啦 这个也是支持放文件夹去…

Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)

Microsoft 365 Office BusinessPro LTSC 2024是一款专为商业用户设计的办公软件套件&#xff0c;它集成了Word、Excel、PowerPoint等核心应用&#xff0c;并特别包含了Microsoft Teams这一强大的协作工具。Teams将聊天、会议、文件共享、任务管理等功能整合到一个平台上&#x…

听说宇哥突然大幅删减了新36讲?25张宇强化究竟行不行呀?

宇哥深夜划重点&#xff0c;大幅删减新36讲&#xff01; 宇哥最近舆论压力很大&#xff0c;很多人怕36讲暑假学不完了。 甚至一些人开始考虑&#xff0c;要不要转武忠祥&#xff1f; 张宇划的重点课&#xff0c;其实就是&#xff1a;概念要听&#xff0c;计算不用听。 因为强…

SQL Server 数据误删的恢复

在日常的数据库管理中&#xff0c;数据的误删操作是难以避免的。为了确保数据的安全性和完整性&#xff0c;我们必须采取一些措施来进行数据的备份和恢复。本文将详细介绍如何在 SQL Server 中进行数据的备份和恢复操作&#xff0c;特别是在发生数据误删的情况下。假设我们已经…

苹果微信数据恢复的教程?3个方法,一学就会!

各位家人朋友们&#xff01;你是否有遇到过微信数据误删或者是找不到的窘况呢&#xff1f;是不是时常会发现时间较为久远的微信聊天记录或者是文件已经过期无法打开呢&#xff1f;这些生活上的小烦恼大家都会有&#xff0c;但是大部分人都不知道该如何解决微信数据恢复问题。今…

大厂面试官问我:Mysql B+树索引中B最后一层是双向链表还是单向链表?为什么这么设计?【后端八股文十四:Mysql索引八股文合集】

本文为【Mysql索引八股文合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏…

局部加全局视角遮挡人脸表情识别方法

一、摘要 实际场景中各种遮挡增加了表情识别难度。为此&#xff0c;提出一种滑块局部加权卷积注意力和全局注意力 池化的视觉 Transformer 结合的方法来解决遮挡问题。 利用主干网络提取表情特征图&#xff0c;将表情特征图裁剪成 多个区域块&#xff0c;利用局部 Patch 注意力…

Mem0 - 个人 AI 的内存层

文章目录 一、关于 Mem0核心功能&#x1f511;路线图 &#x1f5fa;️常见用例Mem0与RAG有何不同&#xff1f; 二、快速入门 &#x1f680;1、安装2、基本用法&#xff08;开源&#xff09;3、高级用法&#x1f527;4、大模型支持 三、MultiOn1、概览2、设置和配置4、将记忆添加…

【嵌入式开发之并发程序设计】守护进程的定义、特点、相关概念及创建

守护进程的定义 守护进程(Daemon Process)&#xff0c;又叫精灵进程、监控进程&#xff0c;是Linux三种进程类型之一&#xff0c;是 Linux 中的后台服务进程&#xff0c;是一个生存期较长的进程&#xff0c;通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事…

亚信安全与软银中国全资企业爱思比通信达成战略合作

近日&#xff0c;亚信安全携手软银集团旗下全资企业爱思比通信科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称“爱思比通信”&#xff09; 共同宣布&#xff0c;双方正式签署战略合作协议。依托双方在技术、业务和资源三大层面的实力与优势&#xff0c;亚信安全…

2024-07-23 Unity AI行为树2 —— 项目介绍

文章目录 1 项目介绍2 AI 代码介绍2.1 BTBaseNode / BTControlNode2.2 动作/条件节点2.3 选择 / 顺序节点 3 怪物实现4 其他功能5 UML 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2022.3.32f1c1&#xff0c;实现基…

韦东山嵌入式linux系列-查询方式的按键驱动程序_编写框架

1 LED 驱动回顾 对于 LED&#xff0c; APP 调用 open 函数导致驱动程序的 led_open 函数被调用。在里面&#xff0c;把 GPIO 配置为输出引脚。安装驱动程序后并不意味着会使用对应的硬件&#xff0c;而 APP 要使用对应的硬件&#xff0c;必须先调用 open 函数。所以建议在驱动…