天下漏洞,尽知其名
MEDIUM

CVE-2026-101912 ip-address 跨地址族包含判断漏洞

影响跨地址族子网判断错误,可能导致访问控制绕过

MEDIUM
暂无 CVSS 评分
AI 研判

ip-address 是一个用于在 JavaScript 中解析和操作 IPv4/IPv6 地址的库。10.7.1 之前版本中,isInSubnet 与 isHostInSubnet 方法在比较掩码后的二进制字符串时,未校验两个操作数是否属于同一 IP 地址族。当跨地址族比较且前导地址位恰好匹配时,掩码字符串会被判定为相等,从而把本不在目标范围内的地址误判为包含在内。

影响范围

ip-address

ip-address 库 10.7.1 之前的版本,具体受影响版本范围暂无更细公开信息。

漏洞详情

该漏洞属于逻辑校验缺陷(CWE-1289 类,地址族校验缺失)。isInSubnet/isHostInSubnet 在计算子网包含关系时,只对地址做掩码后逐位比较,没有先确认 IPv4 与 IPv6 属于不同地址空间。攻击者若能影响被检查的 IP 地址,就可能构造出前导位匹配的跨族地址,使基于该库实现的允许/拒绝列表把范围外地址误判为范围内。

利用条件与风险

利用前提是目标系统使用该库的 isInSubnet 或 isHostInSubnet 做 IP 白名单/黑名单等访问控制,且攻击者能控制或影响被检查的地址值。实战中可能导致访问控制绕过,但需要特定地址位匹配条件,整体风险中等。

修复建议

升级到 ip-address 10.7.1 或更高版本,该版本已修复此问题。临时缓解措施暂无公开信息,可考虑在调用前自行校验待比较地址与子网的 IP 地址族是否一致。

原始情报

ip-address is a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript. Prior to 10.7.1, the isInSubnet and isHostInSubnet methods in src/common.ts compare masked binary strings without validating that both operands use the same IP family. A cross-family containment check whose leading address bits match makes the masked strings compare equal even though IPv4 and IPv6 do not share an address space. An allowlist or denylist decision can therefore classify an address outside the intended range as contained. This issue is fixed in version 10.7.1.