Windows 的截图工具得到的截图可能包含整个屏幕
-
Twitter 用户 David Buchanan 提到,Windows 的截图工具也存在同样的问题:即使只在工具中框选了部分区域,依然可能从源文件还原出整个屏幕的截图。
https://twitter.com/David3141593/status/1638222624084951040
我看不懂这里具体说的是什么,有人能解释一下吗 -
@wumingshi 就是说你以为你把截图的其他部分裁剪掉了,但是截图的工具的实现有bug,导致信息没删除干净
-
这个漏洞不仅仅影响裁剪图片,“另存为”功能也有类似问题,比如说你把文件A另存为已有的文件B,修图工具提示文件B已存在,然后你确认我要覆盖。这个时候正确的实现应该是B的信息完全消失,只留下A的信息(编程上叫 truncate,linux上面
open
系统调用的O_TRUNC
参数就是干这个的,打开一个已有文件之前先抛弃它的所有内容,参照 man 手册: https://man7.org/linux/man-pages/man2/open.2.html )。但是如果你打开文件的时候没有截断已有的文件内容,而是直接在原来的文件上覆盖写入,那么没被覆盖到的部分就会留下来,造成信息泄漏。Pixel 图片编辑器的问题是 Android 10 引入的新 API 删除了 truncate 的行为,这个是有安全隐患的,但是 Google 发布 Android 10 的时候没有把它作为重大变动列出,导致以前用老 API 的开发者很可能不知道行为变了(Pixel 是 Google 亲生的了,他们都不知道的话可以想象很多开发者都不知道)。而 Windows 11 的图片编辑器的问题倒不是删除了 truncate 的行为,而是 Windows 的默认选项一直都是不开启 truncate(不过 linux 上面也是),然后可能开发这个编辑器的程序员水平不足,没有打开 truncate 的选项
“Always remember to truncate your files when you save them, fellow programmers.“ -- Twitter 上面 Chris Blume 的警告
-
Windows 截图的行为可能不是只留下你需要的部分,而是一开始就无条件留下全屏幕,等用户去裁剪,裁剪以后再修改原始文件。这样做其实是合理的(因为用户可能会频繁的变动裁剪区域,如果只留下一开始的区域的话,那么用户改了以后就还得重新截图),但是前提是程序员正确的去掉了多余的信息,如果没有正确 truncate 的话就会造成信息泄漏
-
感谢解释。作为小白再请教一下,如果截图上传到像未名树洞这样的会把图片压缩一次的网站,那么截图还能还原出部分原图吗?
-
@wumingshi 不好说,我只能说压缩算法设计正确的话是不能还原出部分原图的,但是各个网站的算法能不能做到这一点我就不清楚了,没研究过