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
next prev parent 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.