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
)
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)