本项目针对 CVE-2023-26136 进行修复,这是 tough-cookie 4.1.3 之前版本中的一个关键原型污染漏洞。该漏洞影响 Penguin Software Inc. 的 Web 应用程序,该应用程序使用 [email protected] 进行 cookie 处理。
CVE-2023-26136 是一个原型污染漏洞,当 CookieJar 与 rejectPublicSuffixes=false 一起使用时触发。问题源于 MemoryCookieStore 类中不正确的对象初始化,允许攻击者通过恶意构造的 cookie 域名向 Object.prototype 注入属性。
漏洞存在于 lib/memstore.js 中,其中 cookies 使用普通 JavaScript 对象 ({}) 存储。由于这些对象继承自 Object.prototype,攻击者可以通过设置包含 __proto__、constructor 或 prototype 等域名的 cookies 来利用这一点,从而导致原型污染。
修复方法是将 MemoryCookieStore 类中所有 {} 替换为 Object.create(null):
// 修复前(易受攻击)
this.idx = {};
// 修复后(安全)
this.idx = Object.create(null);
此更改通过创建没有原型链的对象来防止原型污染,从而有效地将 cookie 存储与意外继承隔离开来。
lib/memstore.js:更新对象初始化以使用 Object.create(null)├── README.md # 此文件
├── changes.diff # Git 兼容的 diff 文件
├── test-cve-2023-26136.js # 针对该修复的单元测试
├── tough-cookie/
│ ├── index.js # 利用演示
│ ├── Original v2.5.0/ # 原始易受攻击版本
│ ├── v2.5.0-PATCHED/ # 已修补版本
│ │ └── tough-cookie-2.5.0.tgz # 打包版本
│ └── package.json
└── mission.txt # 原始任务要求
已修补版本位于 tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz。
安装命令:
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
原始 tough-cookie 测试套件应能通过。运行测试命令:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
注意:原始 tough-cookie 2.5.0 在此发行版中不包含测试目录,但修补版本保持与原始 API 的完全兼容。
运行自定义单元测试以验证修复:
node test-cve-2023-26136.js
预期输出:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
该项目在 tough-cookie/index.js 中包含了一个利用演示:
cd tough-cookie
node index.js
这将测试原始易受攻击版本和修补版本,显示:
EXPLOITED SUCCESSFULLYEXPLOIT FAILEDchanges.diff 文件包含一个 git 兼容的 diff,可通过以下命令应用:
git apply changes.diff
此 diff 仅包含修复漏洞所需的更改,无任何意外修改。
利用方法如下:
CookieJar,设置 rejectPublicSuffixes: false__proto__Object.prototype 链潜在危害:
✅ 已在 Node.js 20 (LTS) 上测试并验证
GitHub 仓库:Forked tough-cookie repository
Git 标签:v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - 专家级
Jenkins - 高级
Travis CI - 中级
CircleCI - 中级
GitLab CI/CD - 高级
本项目在添加安全修复的同时,保持原始 tough-cookie 许可证 (BSD-3-Clause)。
注意:这是一个专注于安全的补丁,在消除 CVE-2023-26136 漏洞的同时保持完全向后兼容性。