提交 #1004847: bitcoinj <=0.17 SSRF信息

标题bitcoinj <=0.17 SSRF
描述PaymentSession fetches a BIP-70 PaymentRequest from a remote party and later issues an HTTP POST to the URL contained in that message's payment_details.payment_url field. That URL is attacker-controlled data taken straight off the wire. It is passed to new URL(...) and then url.openConnection() with no scheme allowlist, no host validation, and no private/loopback/link-local address filtering. The protocol's PKI layer does not mitigate this, for two independent reasons: The pki_type field is chosen by the sender of the message. Setting pki_type = "none" makes verifyPaymentRequestPki() return null immediately — the entire certificate chain check is skipped. No certificate is required. Even with a valid x509+sha256 signature, the signature covers serialized_payment_details; it attests who authored the message, not where the URL points. Any party holding any valid certificate can sign a request whose payment_url targets 127.0.0.1. The victim wallet reaches the vulnerable path while using verifyPki = true, the most secure client configuration available.
来源⚠️ https://github.com/bitcoinj/bitcoinj/issues/4386
用户
 ZAST.AI (UID 87884)
提交2026-09-29 09時14分 (17 日前)
管理2026-10-15 20時08分 (16 days later)
状态已接受
VulDB条目420761 [bitcoinj 直到 0.17 Payment Request PaymentSession.java url.openConnection pki_type 权限提升]
积分19

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!