<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sun, 04 Oct 2026 00:33:14 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-71887 — OpenPGP data signature accepted from a signing subkey without cross-certification</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-71887</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Legion of the Bouncy Castle Inc. BC-JAVA&lt;/p&gt;
&lt;p&gt;In Bouncy Castle for Java before 1.86, the high-level OpenPGP API accepted a data signature made by a signing subkey whose Subkey Binding signature carried no embedded Primary Key Binding (cross-certification) signature, in the case where that binding omits a Key Flags subpacket. RFC 9580 sec. 5.2.1.8 and sec. 10.1.3 require the embedded Primary Key Binding signature on any subkey that can issue signatures; it is the subkey&amp;#39;s own statement that it belongs to the primary key it is bound under. OpenPGPCertificate resolved the subkey&amp;#39;s key flags two different ways. isSigningKey() goes through getKeyFlags() and getApplyingSubpacket(), which falls back to the primary key&amp;#39;s direct-key or primary User ID self-signature when the binding signature omits the subpacket, so the subkey inherited the primary&amp;#39;s SIGN_DATA and counted as signing-capable; verifyEmbeddedPrimaryKeyBinding(), which enforces the requirement, reads the binding signature&amp;#39;s own hashed subpackets, found no SIGN_DATA there, and returned early as a non-signing key without ever demanding the back signature. The same subkey was therefore signing-capable - so its signatures were attributed to the certificate and OpenPGPSignature.OpenPGPDocumentSignature.isValid() returned true - while being exempt from cross-certification, where GnuPG refuses the identical certificate and message. An attacker needs only the victim&amp;#39;s public signing subkey, which is public material: they bind it to their own primary key with a Subkey Bindin…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Legion of the Bouncy Castle Inc. BC-JAVA&lt;/p&gt;
&lt;p&gt;In Bouncy Castle for Java before 1.86, the high-level OpenPGP API accepted a data signature made by a signing subkey whose Subkey Binding signature carried no embedded Primary Key Binding (cross-certification) signature, in the case where that binding omits a Key Flags subpacket. RFC 9580 sec. 5.2.1.8 and sec. 10.1.3 require the embedded Primary Key Binding signature on any subkey that can issue signatures; it is the subkey&amp;#39;s own statement that it belongs to the primary key it is bound under. OpenPGPCertificate resolved the subkey&amp;#39;s key flags two different ways. isSigningKey() goes through getKeyFlags() and getApplyingSubpacket(), which falls back to the primary key&amp;#39;s direct-key or primary User ID self-signature when the binding signature omits the subpacket, so the subkey inherited the primary&amp;#39;s SIGN_DATA and counted as signing-capable; verifyEmbeddedPrimaryKeyBinding(), which enforces the requirement, reads the binding signature&amp;#39;s own hashed subpackets, found no SIGN_DATA there, and returned early as a non-signing key without ever demanding the back signature. The same subkey was therefore signing-capable - so its signatures were attributed to the certificate and OpenPGPSignature.OpenPGPDocumentSignature.isValid() returned true - while being exempt from cross-certification, where GnuPG refuses the identical certificate and message. An attacker needs only the victim&amp;#39;s public signing subkey, which is public material: they bind it to their own primary key with a Subkey Bindin…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-71887</guid>
    </item>
  </channel>
</rss>
