2008年,全漏安全研究员Piotr Bania在IE浏览器上演示了一个Flash漏洞,全漏弹出一个计算器窗口。全漏那台演示机没装任何杀毒软件,全漏现场观众倒吸一口冷气。全漏这大概是全漏Flash安全问题的第一次大规模公开亮相——从那天起,Flash的全漏棺材板就开始钉钉子了。
Flash的全漏漏洞类型其实没什么新鲜花样。缓冲区溢出、全漏释放后使用、全漏整型溢出,全漏这些在C/C++里常见的全漏毛病,ActionScript虚拟机一个不落全继承了过来。全漏Adobe的全漏工程师们也清楚,Flash Player的全漏代码量膨胀到几千万行,再加上JIT编译器的复杂逻辑,不出问题才怪。我见过最离谱的一个漏洞,触发条件仅仅是加载一张精心构造的JPEG图片——图片本身不带任何恶意代码,纯粹靠解码器里的一个整数溢出,就能拿到系统权限。
黑客们喜欢Flash,主要因为它跑在浏览器里,而且几乎人人都有。一个Flash 0day可以稳定攻击Windows、macOS、Linux全平台,覆盖范围比Office宏还广。2015年的Angler Exploit Kit(一个商业漏洞攻击工具包)统计数据显示,超过70%的网页挂马攻击都走Flash漏洞。那些年里,安全厂商的应急响应团队最怕听到的话就是“又出Flash 0day了”。
Adobe的补丁机制也够呛。每月更新一次,但漏洞披露到补丁发布之间,往往有至少两周的空白期。攻击者就盯着这个窗口干活。更糟的是,很多企业用户出于兼容性考虑,长期不更新Flash Player——我见过某银行内部系统,2017年还在跑Flash Player 11,那版本至少有200个已知漏洞。
转折点在2017年。Google的Project Zero团队连续几个月提交Flash漏洞,Adobe终于扛不住了,宣布2020年底停止更新。苹果和Google早就在自家浏览器里默认禁用Flash,Mozilla也跟着表态。讽刺的是,最后压垮Flash的不是安全漏洞本身,而是生态的集体抛弃——没有浏览器厂商支持,再多的补丁也白搭。
现在回头看,Flash的死法挺典型:技术债越积越多,每修一个漏洞都可能引入两个新问题。它的架构设计停留在2000年代初,那时候没人预料到网页会变成这么复杂的应用平台。Adobe后来尝试用HTML5 Canvas和WebGL来过渡,但为时已晚。
2020年12月31日,Flash Player正式停止分发。那天我特意打开一个老旧的Flash游戏网站,页面显示“Adobe Flash Player不再受支持”。浏览器弹了个警告框,点“允许”也没用,插件直接罢工。倒是有开发者做了个Flash模拟器(Ruffle),用Rust重写了一个兼容层,但性能和功能都差得远。
Flash的教训其实挺直白:任何运行在浏览器里的第三方插件,只要代码规模大到一定程度,安全维护成本就会失控。现在的WebAssembly虽然也跑原生代码,但至少沙箱隔离做得更严格。至于Flash留下的那些遗产——矢量动画、流媒体播放、网页小游戏——早就被HTML5、Canvas和WebGL接管了,没人再怀念那个插件时代。
顶: 93762踩: 99158






评论专区