All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Weinberger <richard@nod.at>
To: Ibrahim Hashimov <security@auditcode.ai>
Cc: chengzhihao1 <chengzhihao1@huawei.com>,
	 Sascha Hauer <s.hauer@pengutronix.de>,
	 linux-mtd <linux-mtd@lists.infradead.org>,
	 linux-kernel <linux-kernel@vger.kernel.org>,
	 stable <stable@vger.kernel.org>
Subject: Re: [PATCH] ubifs: fix out-of-bounds read in signature length check
Date: Fri, 24 Jul 2026 11:14:27 +0200 (CEST)	[thread overview]
Message-ID: <699752101.3017.1784884467138.JavaMail.zimbra@nod.at> (raw)
In-Reply-To: <20260724074327.73582-1-security@auditcode.ai>

----- Ursprüngliche Mail -----
> Von: "Ibrahim Hashimov" <security@auditcode.ai>
> An: "richard" <richard@nod.at>
> CC: "chengzhihao1" <chengzhihao1@huawei.com>, "Sascha Hauer" <s.hauer@pengutronix.de>, "linux-mtd"
> <linux-mtd@lists.infradead.org>, "linux-kernel" <linux-kernel@vger.kernel.org>, "stable" <stable@vger.kernel.org>
> Gesendet: Freitag, 24. Juli 2026 09:43:27
> Betreff: [PATCH] ubifs: fix out-of-bounds read in signature length check

> ubifs_sb_verify_signature() bounds the on-disk ubifs_sig_node->len field
> before handing the signature payload to verify_pkcs7_signature(), but the
> check has the wrong sign:
> 
>	if (le32_to_cpu(signode->len) > snod->len + sizeof(struct ubifs_sig_node))
> 
> The signature bytes start sizeof(struct ubifs_sig_node) (UBIFS_SIG_NODE_SZ,
> 64 bytes) into the node, so the payload is at most
> 
>	snod->len - sizeof(struct ubifs_sig_node)
> 
> bytes long. Adding the header size instead of subtracting it accepts a
> declared length up to 2 * UBIFS_SIG_NODE_SZ larger than the node actually
> holds -- past the end of c->sbuf, which is vmalloc(c->leb_size).
> verify_pkcs7_signature() -> pkcs7_parse_message() -> asn1_ber_decoder()
> is then handed that inflated length and reads beyond the allocation while
> walking the DER headers. The node length comes straight from the mounted
> image, so a crafted signed UBIFS image reaches this via
> ubifs_read_superblock() before the signature is cryptographically checked.
> 
> snod->len is guaranteed to be >= UBIFS_SIG_NODE_SZ by the node scanner
> (c->ranges[UBIFS_SIG_NODE].min_len == UBIFS_SIG_NODE_SZ), so the corrected
> subtraction cannot underflow. Legitimately signed images are unaffected: a
> correct superblock never declares a signature longer than the node it is
> embedded in.
> 
> Fixes: 817aa094842d ("ubifs: support offline signed images")
> Cc: stable@vger.kernel.org
> Signed-off-by: Ibrahim Hashimov <security@auditcode.ai>
> Assisted-by: AuditCode-AI:2026.07
> ---
> fs/ubifs/auth.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Richard Weinberger <richard@nod.at>

Thanks,
//richard

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Richard Weinberger <richard@nod.at>
To: Ibrahim Hashimov <security@auditcode.ai>
Cc: chengzhihao1 <chengzhihao1@huawei.com>,
	 Sascha Hauer <s.hauer@pengutronix.de>,
	 linux-mtd <linux-mtd@lists.infradead.org>,
	 linux-kernel <linux-kernel@vger.kernel.org>,
	 stable <stable@vger.kernel.org>
Subject: Re: [PATCH] ubifs: fix out-of-bounds read in signature length check
Date: Fri, 24 Jul 2026 11:14:27 +0200 (CEST)	[thread overview]
Message-ID: <699752101.3017.1784884467138.JavaMail.zimbra@nod.at> (raw)
In-Reply-To: <20260724074327.73582-1-security@auditcode.ai>

----- Ursprüngliche Mail -----
> Von: "Ibrahim Hashimov" <security@auditcode.ai>
> An: "richard" <richard@nod.at>
> CC: "chengzhihao1" <chengzhihao1@huawei.com>, "Sascha Hauer" <s.hauer@pengutronix.de>, "linux-mtd"
> <linux-mtd@lists.infradead.org>, "linux-kernel" <linux-kernel@vger.kernel.org>, "stable" <stable@vger.kernel.org>
> Gesendet: Freitag, 24. Juli 2026 09:43:27
> Betreff: [PATCH] ubifs: fix out-of-bounds read in signature length check

> ubifs_sb_verify_signature() bounds the on-disk ubifs_sig_node->len field
> before handing the signature payload to verify_pkcs7_signature(), but the
> check has the wrong sign:
> 
>	if (le32_to_cpu(signode->len) > snod->len + sizeof(struct ubifs_sig_node))
> 
> The signature bytes start sizeof(struct ubifs_sig_node) (UBIFS_SIG_NODE_SZ,
> 64 bytes) into the node, so the payload is at most
> 
>	snod->len - sizeof(struct ubifs_sig_node)
> 
> bytes long. Adding the header size instead of subtracting it accepts a
> declared length up to 2 * UBIFS_SIG_NODE_SZ larger than the node actually
> holds -- past the end of c->sbuf, which is vmalloc(c->leb_size).
> verify_pkcs7_signature() -> pkcs7_parse_message() -> asn1_ber_decoder()
> is then handed that inflated length and reads beyond the allocation while
> walking the DER headers. The node length comes straight from the mounted
> image, so a crafted signed UBIFS image reaches this via
> ubifs_read_superblock() before the signature is cryptographically checked.
> 
> snod->len is guaranteed to be >= UBIFS_SIG_NODE_SZ by the node scanner
> (c->ranges[UBIFS_SIG_NODE].min_len == UBIFS_SIG_NODE_SZ), so the corrected
> subtraction cannot underflow. Legitimately signed images are unaffected: a
> correct superblock never declares a signature longer than the node it is
> embedded in.
> 
> Fixes: 817aa094842d ("ubifs: support offline signed images")
> Cc: stable@vger.kernel.org
> Signed-off-by: Ibrahim Hashimov <security@auditcode.ai>
> Assisted-by: AuditCode-AI:2026.07
> ---
> fs/ubifs/auth.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Richard Weinberger <richard@nod.at>

Thanks,
//richard

  reply	other threads:[~2026-07-24  9:14 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-24  7:43 [PATCH] ubifs: fix out-of-bounds read in signature length check Ibrahim Hashimov
2026-07-24  7:43 ` Ibrahim Hashimov
2026-07-24  9:14 ` Richard Weinberger [this message]
2026-07-24  9:14   ` Richard Weinberger
2026-07-24 10:55 ` Zhihao Cheng
2026-07-24 10:55   ` Zhihao Cheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=699752101.3017.1784884467138.JavaMail.zimbra@nod.at \
    --to=richard@nod.at \
    --cc=chengzhihao1@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=s.hauer@pengutronix.de \
    --cc=security@auditcode.ai \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.