<?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>Wed, 30 Sep 2026 17:31:10 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-63886 — scsi: target: iscsi: Validate CHAP_R length before base64 decode</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-63886</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;scsi: target: iscsi: Validate CHAP_R length before base64 decode&lt;/p&gt;
&lt;p&gt;chap_server_compute_hash() allocates client_digest as
kzalloc(chap-&amp;gt;digest_size) and then, for BASE64-encoded responses,
passes chap_r directly to chap_base64_decode() without checking whether
the input length could produce more than digest_size bytes of output.&lt;/p&gt;
&lt;p&gt;chap_base64_decode() writes to the destination unconditionally as long
as there is input to consume. With MAX_RESPONSE_LENGTH set to 128 and
the &amp;#34;0b&amp;#34; prefix stripped by extract_param(), up to 127 base64 characters
can reach the decoder. 127 characters decode to 95 bytes. For SHA-256
(digest_size=32) this overflows client_digest by 63 bytes; for MD5
(digest_size=16) the overflow is 79 bytes.&lt;/p&gt;
&lt;p&gt;The length check at line 344 fires after the write has already happened.&lt;/p&gt;
&lt;p&gt;The HEX branch in the same switch statement already validates the length
up front. Apply the same approach to the BASE64 branch: strip trailing
base64 padding characters, then reject any input whose data length
exceeds DIV_ROUND_UP(digest_size * 4, 3) before calling the decoder.&lt;/p&gt;
&lt;p&gt;Stripping trailing &amp;#39;=&amp;#39; before the comparison handles both padded and
unpadded encodings. chap_base64_decode() already returns early on &amp;#39;=&amp;#39;,
so the full original string is still passed to the decoder unchanged.&lt;/p&gt;
&lt;p&gt;The mutual CHAP path decodes CHAP_C into initiatorchg_binhex, which is
kzalloc(CHAP_CHALLENGE_STR_LEN). extract_param() caps initiatorchg a…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;scsi: target: iscsi: Validate CHAP_R length before base64 decode&lt;/p&gt;
&lt;p&gt;chap_server_compute_hash() allocates client_digest as
kzalloc(chap-&amp;gt;digest_size) and then, for BASE64-encoded responses,
passes chap_r directly to chap_base64_decode() without checking whether
the input length could produce more than digest_size bytes of output.&lt;/p&gt;
&lt;p&gt;chap_base64_decode() writes to the destination unconditionally as long
as there is input to consume. With MAX_RESPONSE_LENGTH set to 128 and
the &amp;#34;0b&amp;#34; prefix stripped by extract_param(), up to 127 base64 characters
can reach the decoder. 127 characters decode to 95 bytes. For SHA-256
(digest_size=32) this overflows client_digest by 63 bytes; for MD5
(digest_size=16) the overflow is 79 bytes.&lt;/p&gt;
&lt;p&gt;The length check at line 344 fires after the write has already happened.&lt;/p&gt;
&lt;p&gt;The HEX branch in the same switch statement already validates the length
up front. Apply the same approach to the BASE64 branch: strip trailing
base64 padding characters, then reject any input whose data length
exceeds DIV_ROUND_UP(digest_size * 4, 3) before calling the decoder.&lt;/p&gt;
&lt;p&gt;Stripping trailing &amp;#39;=&amp;#39; before the comparison handles both padded and
unpadded encodings. chap_base64_decode() already returns early on &amp;#39;=&amp;#39;,
so the full original string is still passed to the decoder unchanged.&lt;/p&gt;
&lt;p&gt;The mutual CHAP path decodes CHAP_C into initiatorchg_binhex, which is
kzalloc(CHAP_CHALLENGE_STR_LEN). extract_param() caps initiatorchg a…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-63886</guid>
    </item>
  </channel>
</rss>
