当前位置: 首页 > news >正文

Windows截图工具Acropalypse漏洞剖析:开发者中心安全的重要教训

Windows Snip and Sketch中的Acropalypse漏洞,开发者中心安全的教训

Acropalypse是一个最初在Google Pixel手机截图工具中发现的安全漏洞,裁剪图片后原始图像仍可恢复。由于被裁剪部分可能包含敏感信息,这构成了严重的安全问题。该问题的产生是因为Android API默认行为从截断文件变为保留现有内容。因此,生成图像文件的开头包含裁剪后内容,但原始文件的末尾仍然存在。图像查看器会忽略这些数据并正常打开文件,但通过对所用压缩算法的巧妙分析,可以(部分)恢复原始图像。

在该漏洞公布后不久,有人注意到Windows默认截图工具Snip and Sketch似乎存在相同问题,尽管这是完全不同操作系统上的无关应用程序。我在2004年也曾发现JPEG缩略图图像的类似问题。当相同漏洞反复出现时,这表明我们构建软件的方式存在系统性问题,因此我着手深入了解Windows Snip and Sketch中存在该漏洞的原因。

有缺陷的API

我发现的第一个问题是,现代Windows文件保存API存在与Android非常相似的问题。具体来说,现有文件默认不会被截断。可以说这个漏洞更严重,因为与Android不同,Windows没有截断文件的选项。Windows文档在说明需要截断文件以及实现所需结果的代码方面,最多只能说是含糊不清。

情况并非一直如此。旧的Win32保存文件API大致是:显示文件选择器,获取用户选择的文件名,然后打开文件。打开文件时,程序员必须指定是否覆盖文件,示例代码通常会覆盖文件。然而,新的"更安全"的通用Windows平台(UWP)将文件选择器沙盒化在单独进程中,允许基于能力的访问控制等简洁功能。它会在需要时创建文件并返回句柄,如果所选文件存在,则不会覆盖现有内容。

然而,从文档来看,程序员可以理解地假设文件将是空的。

"该storageFile的文件名、扩展名和位置与用户指定的匹配,但文件没有内容。"

除非程序员显式截断文件,否则现有文件的内容将被保留。如果写入的数据小于现有文件的大小,旧内容将保留,导致StackOverflow上出现困惑的帖子。FileSavePicker的文档没有提到这个问题,尽管示例代码通过使用简单的FileIO API避免了漏洞,该API在写入前隐式截断文件。

然而,更复杂的程序会使用DataWriter,这些示例不会截断文件,文档也没有指出两种API之间的这种差异。不截断现有文件的默认行为很常见,尽管这不是大多数人想要的。

文档可以更新以澄清风险,这总是受欢迎的,特别是伴随着安全的示例代码(众所周知这些代码会被直接复制粘贴到应用程序中)。然而,这两者都不能弥补Windows UWP或Android中有缺陷的API。使用这些API编写安全代码是可能的,但默认行为既不安全也不是大多数人想要的。以开发者为中心的安全的基本原则是设计默认行为安全的API,并且不应该意外创建不安全的程序。更安全的API是让FileSavePicker默认截断现有文件。或者,OpenAsync可以有打开流进行写入的选项。目前,它只有Read和ReadWrite,不像功能丰富得多的Win32 CreateFile API。

我们应该重新审视Postel法则吗?

但为什么这个缺陷持续了这么长时间?Android 10于2019年发布,而Windows Snip and Sketch自2018年发布以来似乎就一直存在漏洞。当然,因为这些应用程序生成的文件损坏,有人会抱怨?实际上,标准做法是遵循Postel法则:"发送时要保守,接收时要开放"。图像查看器应用程序可以找到有效裁剪图像的末尾,并将原始文件的残留视为可以安全忽略的垃圾。因此,很长时间没有人发现问题,当有人最终发现时,最初并没有认识到这是一个严重问题。

也许是时候超越Postel法则了。它对互联网的发展很重要,但现在正在成为一种负担。拒绝无效输入可以帮助更早地发现问题,此时它们造成危害的机会较少。我不是第一个指出这一点的人,甚至Jon Postel也认为他的原则被误解了。

下一步是什么?

Acropalypse已在Android(CVE-2023-21036)和Windows Snip and Sketch(CVE-2023-28303)上修复,但它也为未来提供了教训。它作为一个案例研究,说明了良好文档的重要性,更重要的是精心设计的API和安全的示例代码。它还表明,解决相同问题的多个程序经常具有相同的漏洞,因此仅仅比较独立实现的结果获得的好处可能比最初预期的要少。该漏洞还提出了一些问题,比如我们应该如何教授安全软件开发。

此外,虽然我没有彻底调查UWP API,但我最初看到的内容确实让我有些担忧。例如,OpenAsync的API非常薄弱。Win32 CreateFile允许在打开前检查现有文件并设置安全参数。CreateFile做了很多工作来确保所有操作原子性进行以避免竞争条件。UWP要求这些相同的步骤分开。是否可能隐藏着一些竞争条件?

最后,鉴于有缺陷的API,期望其他应用程序也容易受到Acropalypse攻击是合理的。扫描此类问题并非易事,但我认为可以在Process Monitor中发现该行为。这是在Snip and Sketch中覆盖文件的样子。文件选择器进行一些检查,Runtime Broker打开它,Snip and Sketch写入文件。重要的是,NtCreateFile的处置是FILE_OPEN,因此不会覆盖文件。

然而,应该发生的是在写入前截断文件。在Windows中有几种方法可以做到这一点,但这是我调用stream.SetLength(0)时发生的情况。请注意,文件总是会存在,因为选择器会在需要时创建它。

因此,我认为如果存在文件被打开、非零长度以及在截断前有写入的序列,那可能是Acropalypse易受攻击应用程序的实例。

如果有人想编写代码在Process Monitor日志中搜索此类序列,我认为会非常有趣。如果你尝试了,请告诉我!

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

相关文章:

Windows截图工具Acropalypse漏洞剖析:开发者中心安全的重要教训

本文深入分析Windows Snip and Sketch工具中的Acropalypse漏洞,揭示API设计缺陷导致的安全风险,探讨开发者中心安全原则,并对比Win32与UWP API的安全差异,为安全软件开发提供重要见解。Windows Snip and Sketch中的Acropalypse漏洞,开发者中心安全的教训 Acropalypse是一个…...

bootstrap-flex总结

一主轴方向、默认横线排布 flex-row(默认)。flex-column是竖向排列<div class="d-flex "> <div class="p-2 bg-primary text-white">Item 1</div><div class="p-2 bg-success text-white">Item 2</div><div …...

【源码解读之 Mybatis】【基础篇】-- 第2篇:配置系统深度解析

【源码解读之 Mybatis】【基础篇】-- 第2篇:配置系统深度解析第2篇:配置系统深度解析 1. 配置系统概述 1.0 第1篇思考题解答 在深入学习配置系统之前,让我们先回顾并解答第1篇中提出的思考题,这将帮助我们更好地理解配置系统在整个架构中的作用。 思考题1:为什么 MyBatis …...

eSIM笔记

1. 办理eSIM套餐 -> 获得eSIM套餐的激活码(包含SM-DP+地址,Profile)LPA:1$esim.wo.com.cn$A1B2C3D4 SM-DP+地址:sim.wo.com.cn 激活码:A1B2C3D4 确认码:空 qq:505645074...

拯救者Y7000过热降频解决方法

拯救者Y7000过热降频解决方法 一、型号描述 ​ 型号:拯救者Y7000 2020 ​ CPU:i5-10200H CPU @ 2.4GHz ​ 显卡:NVIDIA GeForce GTX 1650 二、问题描述现象:由于电脑已经使用四年,近期不定时会出现电脑卡顿等现象,但不影响使用就没咋管,经常卡一会,不使用一会就自动恢复…...

普通大语言模型(LLM)和向量化模型(Embedding Model)的区别以及其各自的作用

简单来说:普通大语言模型(LLM) 像是一个知识渊博、能说会道的专家。你问它问题,它生成答案、写文章、编代码。 向量化模型(Embedding Model) 像是一个高度专业化的图书管理员或档案管理员。它不生成内容,而是将文字转换成数字(向量),并理解它们之间的语义关系,从而帮…...

ios电脑如何改成windows系统

如何将iOS设备转换为Windows系统:一个不可能的任务? 一、引言 在日常生活中,我们经常听到“iOS”和“Windows”这两个术语,它们分别代表了两种不同的操作系统。iOS是由苹果公司开发的移动操作系统,主要用于iPhone和iPad等移动设备上,而Windows则是由微软公司开发的桌面操…...

PythonFlask 运用 DBUtils 创建通用连接池

Python&Flask 运用 DBUtils 创建通用连接池pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !…...

帧同步、快照同步与状态同步

https://zhuanlan.zhihu.com/p/564017214前段时间,在Epic举办的UnrealCircle会议上,我受邀分享了一场关于“UE4回放系统”的技术演讲。不过由于时长限制,很多细节都没有得到进一步的阐述。这篇文章会在演讲的基础上拓展更多内容,更好的帮助大家去理解虚幻引擎的回放系统,建…...

内存一致性模型

顺序一致性(Sequential Consistency)是计算机系统中保证多线程程序正确执行的一种内存一致性模型。 它要求所有操作的执行顺序与程序员的源码顺序一致,即每个线程的操作在其本地源码顺序中保持不变, 同时不同线程的操作全局排序也符合源码顺序。 ‌核心要求顺序一致性模型确…...

MahMetro 框架学习

学习建议: 1.从Demo开始:运行官方Demo,玩遍每一个功能,看看它是如何实现的。 2.动手实践:在自己的一个小项目中应用它,从改造MetroWindow和设置主题开始 3.逐个攻克:依次自学习一个控件(比如先学会用Flyout,再学HamburgerMenu),不要试图一下子掌握所有内容 4.善用搜索引…...

基于MATLAB的标准化降水蒸散指数(SPEI)实现

一、架构 %% 主程序框架 [prec, pet, time] = load_data(input.nc); % 加载降水与PET数据 prec_acc = accumulate(prec, 3); % 3个月时间尺度累积 pet_acc = accumulate(pet, 3); d = prec_acc - pet_acc; % 水分盈亏量 spei = calculate_spei(d, loglogistic); % 计算SPEI plo…...

Prometheus Probe 监控配置文档

概述 本文档描述了使用 Prometheus Operator 的 Probe 资源监控外部服务的配置方法。该配置通过静态目标地址直接监控多个服务端点,无需创建额外的 Service 和 Endpoints 资源。 前提条件Kubernetes 集群 Prometheus Operator v0.42 或更高版本 monitoring 命名空间已存在配置…...

客户案例|邦普循环x甄知科技,筑牢高效智能的IT运维底座

燕千云ITSM为邦普循环后续业务扩张与系统升级提供可扩展的IT服务框架,筑牢稳定、高效、智能的数字化底座,助力其在动力电池循环利用领域持续保持竞争优势。客户介绍 广东邦普循环科技有限公司(以下简称邦普循环),成立于2005年,总部位于广东省佛山市,地处粤港澳大湾区腹地,…...

VMware Exporter 指标转换方案

概述 本文档提供将 VMware Exporter 指标转换为标准 Node Exporter 格式的方案,实现监控基础设施的统一化和标准化。 背景 VMware Exporter 提供的原始指标格式与标准的 Node Exporter 不兼容,导致无法直接使用为 Node Exporter 设计的现有仪表板和告警规则。通过 Prometheus…...

可5V使用引脚兼容STM32F103C8T6的国产32位MCU

经常的型号如下,仅做记录 1.MM32F103C8T6 灵动微 2.CH32F103C8T6 沁恒微 3.FCM32F103C8T6 闪芯微 此料内核为M4, 4.CH32V103C8T6 沁恒微 此料内核为RISC-V 5.CW32F030C8T6 武汉芯源 此料内核为M0+ 6.待补充...

git clone操作报错diffie-hellman-group1-sha1的解决方案

在使用Git进行克隆操作的过程中,可能会遇到一个与加密算法相关的报错,尤其是当服务器使用了过时的安全算法 diffie-hellman-group1-sha1时。这通常发生在尝试克隆旧的或配置较老的Git服务器时,当代的SSH客户端默认不再支持这种较弱的加密方式,导致无法成功建立连接。 要解决…...

Celery inspect 常用命令手册

📘 Celery Inspect 常用命令清单 & 字段解释 运行格式: celery -A <app_name> inspect <command> 1. active 含义 显示 正在执行的任务(worker 正在跑的任务)。 示例 { "worker1@host": [ { "id": "f5e9b8c7-1234-5678-90ab-a…...

都可以!燕千云ITSM一站式接入全球主流AI大模型

燕千云ITSM基于对行业痛点的深度洞察,已实现对国内外多家主流大型语言模型的无缝接入与深度适配,构建覆盖多场景、高可用的企业级大模型矩阵,全面支持企业在AI技术选型与落地过程中的灵活性与可控性,实现真正的“全球优秀模型一站式接入”。在企业加速推进数智化转型升级的…...

删边最短路

今天写题的时候做到一个非常牛的东西。 给你一个图,\(q\) 次问你如果删掉一条边,\(1\) 到 \(n\) 的最短路会变成多少。 首先搞出来 \(1\) 出发的最短路树,然后如果这条边根本不在这棵树上,显然没有任何影响。 如果在的话,我们必然要绕路了。 给出一个性质:我们选择绕的路…...

问题解决模板

背景: 晚11点客户反馈,发送短信收不到了问题现象: 查看短信服务日志,发现日志提示: RocketMqMsgSender.java:41 - 发送短信消息到消息队列失败,CODE: 14 DESC: service not available now. It may be caused by one of the following reasons: the brokers disk is full …...

一站式接入全球股票数据:日本、美国、印度、马来西亚等多国API对接实战

一站式接入全球股票数据:日本、美国、印度、马来西亚等多国API对接实战 引言 在全球化资产配置的大背景下,开发者经常需要集成多国股票市场数据。本文将为您详解如何通过StockTV API快速接入日本、美国、印度、马来西亚等国家的实时股票行情、历史K线、指数数据等核心信息。 …...

基于MATLAB的图像处理程序

基于MATLAB的图像处理程序,结合傅里叶变换和滤波技术去除横条纹、渐变条纹及噪声干扰实现一、流程频域分析:通过傅里叶变换定位条纹频率成分 频域滤波:设计带阻/陷波滤波器抑制条纹 空域去噪:结合中值滤波/维纳滤波消除残留噪声 后处理优化:对比度增强与边缘锐化二、代码 …...

跨网文件安全交换系统推荐厂商详解

内容概要 在当今数字化时代,跨网文件交换已成为企业日常运营不可或缺的一部分,其安全性与效率直接关系到企业的数据安全与业务流畅度。因此,选择一家可靠的跨网文件安全交换系统推荐厂商尤为关键。本文将聚焦于飞驰云联及其出色的Ftrans Ferry跨网文件安全交换系统,该系统以…...

走迷宫

2025.9.15 题目内容 有一个 \(m\times n\) 格的迷宫(表示有 \(m\) 行、\(n\) 列),其中有可走的也有不可走的,如果用 \(1\) 表示可以走,\(0\) 表示不可以走,文件读入这 \(m\times n\) 个数据和起始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和…...

MVC 架构解析

认真对待每时、每刻每一件事,把握当下、立即去做。MVC 模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。下面主要对 MVC 架构下的优化方案以及其项目结构…...

鸿蒙应用开发从入门到实战(五):ArkUI概述

HarmonyOS提供了一套UI开发框架,即方舟开发框架(ArkUI框架)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。​ 大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持…...

好用的跨网文件安全交换系统:守护企业数据流转的核心屏障!

在数字化时代,企业数据跨网流转需求日益频繁,然而内网与外网的隔离、多安全域的划分,让文件传输面临效率与安全的双重挑战。传统方式如U盘拷贝易导致病毒传播和数据泄露,FTP等工具缺乏合规审计能力,难以满足企业对数据安全的高要求。因此一款好用的跨网文件安全交换系统,…...

SIM笔记

SIM组成 金属触点 + 塑料基板 + 芯片模块(封装在透明的环养树脂)+ 极细小的内部电路金属触点 C1: 输送电力(5V/3V/1.8/); C5:接地 形成回路; C3: 提供时钟信号; C2:复位信号触点; C7:数据传输; C4、C8: 预留 芯片模块 如何上网qq:505645074...

2025第五届“长城杯”网络安全大赛暨京津冀蒙网络安全技能竞赛 WP Web全

文曲签学 首先随便输入一个指令尝试,发现提示输入help查看帮助输入help,发现有list命令查看笔记和read命令读取笔记list查看笔记列表,发现HINT,read查看关注公众号后提示写的很明确了,目录穿越加双写绕过拿到flag EZ_upload 随便上传一个文件,跳转至upload.php查看源码 &…...

FTP替代工具哪个产品好,高效安全之选

内容概要 在探讨FTP替代工具哪个产品好时,我们不得不先概览一下当前的市场情况。随着企业对数据传输效率和安全性要求的日益提升,FTP这一传统工具已难以满足需求。市场上涌现出众多FTP替代产品,其中Ftrans SFT文件安全传输系统‌备受瞩目。本文将从高效传输速度和数据安全性…...

c++之内存对齐模板类aligned_storage

始于c++11,c++23弃用 aligned_storage 是 C++ 标准库中用于管理对齐内存的模板类,定义在 <type_traits> 头文件中。它通过模板参数指定内存大小和对齐方式,提供未初始化的内存区域,适用于需要精确控制内存布局的场景。核心功能 ‌内存对齐管理‌:通过模板参数设置…...

ABC 423先慢慢改吧题解

被模拟题狙击了,数组越界为啥不爆 RE 啊啊啊啊 整场白打,这是真导管了 C - Lock All Doors 想了半天是不是被边界情况卡了,鼓捣半天写了一堆等价的东西,屋檐了 记得检查数组大小 D - Long Waiting 可以维护一个小根堆来判断已经进入餐厅的客人离开的顺序,再记一个人数 \(s…...

汇聚层交换机的替换要考虑到的因素

背景: 当汇聚层交换机的流量端口承受不住现有流量,需要替换交换机实现业务正常工作。 考虑因素:现有网络架构:先梳理清现有网络架构,为后续工作打下坚实的基础。需要考虑业务需求、结构层次(汇聚层、接入层、核心层)、未来需求等; 交换机选型:硬件方面需要考虑适配性,…...

git 常见使用

取消git commit git reset --soft HEAD~1 文件名 取消git add git reset HEAD 文件名 强制分支B覆盖分支A git checkout A git reset --hard origin/B git push -f origin A...

python UV 包管理工具安装

安裝 uv uv 本身並不需要 Python,所以不建議用 pip 或是 pipx 安裝,這樣都會跟特定的 Python 環境綁在一起,Windows 上就直接透過 PowerSehll 安裝即可: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | scoop 安裝:scoop install u…...

什么是网络分区

目录背景和价值一、先搞懂:什么是Redis场景下的“网络分区”?二、同一交换机下,Redis主从发生网络分区的5个常见原因1. 节点自身的“网络硬件故障”2. 节点到交换机的“链路故障”3. 交换机自身的“功能故障”4. “网络风暴/拥堵”导致的“暂时性分区”5. 防火墙/安全软件的…...

完整教程:《驾驭云原生复杂性:隐性Bug的全链路防御体系构建》

完整教程:《驾驭云原生复杂性:隐性Bug的全链路防御体系构建》pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&quo…...

从机器的角度来说ECS为何性能好

ECS的写法,让数据的命中变高了,从而提高了CPU的使用数据的性能,因为ECS的数据是连续,批量的 而OOP的写法,数据是没有组织的,数据比较离散,要去多个cache里面去找,命中率低...

人生最幸福的时刻也就几个瞬间

1...

网络流笔记

流网络:有向图,有两个特殊点:源点,汇点。每条边有个流量。(不考虑反向边)我们可以假设流网络中不存在自环,即对于任意的节点 \(v\),\((v,v) /∈E\)。 我们同样可以假设流网络中不存在重边,即对于任意的节点 \(u\), \(v\),如果 \((u,v)∈E\), 那么 \((v,u) /∈ E\)。…...

实用指南:经典动态规划题解

实用指南:经典动态规划题解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-si…...

2025杭电多校(2)

F https://acm.hdu.edu.cn/showproblem.php?pid=7996 题意 有两场比赛,统计对于每个 \(i\) ,有多少个人排在 \(i\) 的前面,需要去重。 思路 第一思路是统计每个位置 \(i\) 前面有多少人数,发现有个小容斥在这里,两场比赛排名前的总人数减去两场都在排名前的人数。 用树状…...

latex 打印生僻字

默认的字体格式很难打出生僻字. 我们可以使用ctex的其他字体. 首先要知道有哪些字体, 参考: https://www.cnblogs.com/wodedow/p/13845213.html. 比如我们要使用字体名称为AR PL KaitiM GB, 我们需要在usepackage区域加入下面的代码 \setCJKfamilyfont{font01}{AR PL KaitiM GB…...

CSP-S 2025 游记(The Last CSP ver.)

【洛谷专栏】。 前言 前作:CSP-S 2024 游记。 上一篇文章:2025 年南京大学计算机学科体验专题营 游记。 停课最早的一次,但是没有去年写的早,不过小问题。 与文化课告别的不突然,但仍有些不舍吧。也许未来不会再担任化学课代表了,化学老师真的对我很好(可怜。如果不是现…...

电机ADC采集

正点原直流有刷驱动板的硬件解说_直流有刷电机电流检测电路-CSDN博客电平移位电路设计(常用于将双极性的宽动态范围信号变成单极性窄动态范围的信号供ADC采集)-CSDN博客运放实现交流信号的放大与平移-CSDN博客...

道德经

1.道可道,非常道。名可名,非常名。无名天地之始;有名万物之母。2.天下皆知美之为美,斯恶已。皆知善之为善,斯不善已。3.有无相生,难易相成,长短相形,高下相盈,音声相和,前后相随。恒也。4.不尚贤,使民不争;不贵难得之货,使民不为盗;不见可欲,使民心不乱。是以圣…...

TokenFlow: Unified Image Tokenizer for Multimodal Understanding and Generation - jack

https://github.com/ByteVisionLab/TokenFlow https://arxiv.org/abs/2412.03069...

digitalworld.local: TORMENT - 实践

digitalworld.local: TORMENT - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

8.25-9.2周报六

1111...