Firefox Animation CVE-2024-9680 漏洞分析
本文由
创作,已纳入「FreeBuf原创奖励计划」,未授权禁止转载
Firefox Animation CVE-2024-9680 漏洞分析
在本文中,我们将深入分析在 Firefox 131.0.2 中修复的漏洞CVE-2024-9680。这个漏洞被解读为动画时间线中的“use-after-free”问题,且据报道已经在实际攻击中被利用。
简介
CVE-2024-9680:动画时间线中的释放后使用
攻击者能够通过利用动画时间线中的释放后漏洞,在内容进程中执行代码。并且已经收到有关此漏洞被实际利用的报道。
接下来,查找修复补丁和任何可用的概念验证(PoC)。
漏洞分析
0ee07613d050记录解决了该漏洞,但最有趣的变化出现在AnimationTimeline.cpp中。
修复前代码:
bool AnimationTimeline::Tick(TickState& aState) {//...nsTArray<Animation*> animationsToRemove;for (Animation* animation = mAnimationOrder.getFirst(); animation;animation =static_cast<LinkedListElement<Animation>*>(animation)->getNext()) {//...animation->Tick(aState);if (!animation->NeedsTicks()) {animationsToRemove.AppendElement(animation);}}for (Animation* animation : animationsToRemove) {RemoveAnimation(animation);}return needsTicks;}
修复后代码:
bool AnimationTimeline::Tick(TickState& aState) {//...AutoTArray<RefPtr<Animation>, 32> animationsToTick;for (Animation* animation : mAnimationOrder) {animationsToTick.AppendElement(animation);}for (Animation* animation : animationsToTick) {// ...animation->Tick(aState);if (!animation->NeedsTicks()) {RemoveAnimation(animation);}}return needsTicks;}
解释:
从修复后的代码可以看到,Animation*
被RefPtr<Animation>
替代,这个修改修复了两个use-after-free漏洞!接下来,我们需要在代码中的追踪方式了解这些对象。
引用跟踪
每个动画通过mTimeline
持有其时间线的引用计数器,而每个时间线通过mAnimations
持有其动画的引用计数器:
class Animation : public DOMEventTargetHelper,public LinkedListElement<Animation> {RefPtr<AnimationTimeline> mTimeline;};class AnimationTimeline : public DOMEventTargetHelper,public LinkedListElement<Animation> {using AnimationSet = nsTHashSet<nsRefPtrHashKey<dom::Animation>>;AnimationSet mAnimations;LinkedList<dom::Animation> mAnimationOrder;};
另外,mAnimationOrder
维护着所有动画的链表,每个动画都通过原始指针(next
/prev
)
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录