All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Yann E. MORIN" <yann.morin.1998@free.fr>
To: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Cc: Asaf Kahlon <asafka7@gmail.com>,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
	buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH 1/1] package/python3: fix CVE-2022-37454
Date: Sun, 4 Dec 2022 12:51:47 +0100	[thread overview]
Message-ID: <20221204115147.GM3302@scaer> (raw)
In-Reply-To: <20221203224157.1196944-1-fontaine.fabrice@gmail.com>

Fabrice, All,

On 2022-12-03 23:41 +0100, Fabrice Fontaine spake thusly:
> The Keccak XKCP SHA-3 reference implementation before fdc6fef has an
> integer overflow and resultant buffer overflow that allows attackers to
> execute arbitrary code or eliminate expected cryptographic properties.
> This occurs in the sponge function interface.
> 
> Python 3.11 and later switched to using tiny_sha3 in GH-32060, so they
> should not be affected.
> 
> https://github.com/python/cpython/issues/98517
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
>  ...Fix-buffer-overflows-in-_sha3-module.patch | 101 ++++++++++++++++++
>  package/python3/python3.mk                    |   3 +
>  2 files changed, 104 insertions(+)
>  create mode 100644 package/python3/0034-3-10-gh-98517-Fix-buffer-overflows-in-_sha3-module.patch
> 
> diff --git a/package/python3/0034-3-10-gh-98517-Fix-buffer-overflows-in-_sha3-module.patch b/package/python3/0034-3-10-gh-98517-Fix-buffer-overflows-in-_sha3-module.patch
> new file mode 100644
> index 0000000000..5c50dd16cb
> --- /dev/null
> +++ b/package/python3/0034-3-10-gh-98517-Fix-buffer-overflows-in-_sha3-module.patch
> @@ -0,0 +1,101 @@
> +From 0e4e058602d93b88256ff90bbef501ba20be9dd3 Mon Sep 17 00:00:00 2001
> +From: Theo Buehler <botovq@users.noreply.github.com>
> +Date: Fri, 21 Oct 2022 21:26:01 +0200
> +Subject: [PATCH] [3.10] gh-98517: Fix buffer overflows in _sha3 module
> + (#98519)
> +
> +This is a port of the applicable part of XKCP's fix [1] for
> +CVE-2022-37454 and avoids the segmentation fault and the infinite
> +loop in the test cases published in [2].
> +
> +[1]: https://github.com/XKCP/XKCP/commit/fdc6fef075f4e81d6b1bc38364248975e08e340a
> +[2]: https://mouha.be/sha-3-buffer-overflow/
> +
> +Regression test added by: Gregory P. Smith [Google LLC] <greg@krypto.org>
> +
> +[Retrieved from:
> +https://github.com/python/cpython/commit/0e4e058602d93b88256ff90bbef501ba20be9dd3]
> +Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> +---
> + Lib/test/test_hashlib.py                          |  9 +++++++++
> + .../2022-10-21-13-31-47.gh-issue-98517.SXXGfV.rst |  1 +
> + Modules/_sha3/kcp/KeccakSponge.inc                | 15 ++++++++-------
> + 3 files changed, 18 insertions(+), 7 deletions(-)
> + create mode 100644 Misc/NEWS.d/next/Security/2022-10-21-13-31-47.gh-issue-98517.SXXGfV.rst
> +
> +diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py
> +index 535f4aa3e04c..9aa6c1f0a3b6 100644
> +--- a/Lib/test/test_hashlib.py
> ++++ b/Lib/test/test_hashlib.py
> +@@ -495,6 +495,15 @@ def test_case_md5_huge(self, size):
> +     def test_case_md5_uintmax(self, size):
> +         self.check('md5', b'A'*size, '28138d306ff1b8281f1a9067e1a1a2b3')
> + 
> ++    @unittest.skipIf(sys.maxsize < _4G - 1, 'test cannot run on 32-bit systems')
> ++    @bigmemtest(size=_4G - 1, memuse=1, dry_run=False)
> ++    def test_sha3_update_overflow(self, size):
> ++        """Regression test for gh-98517 CVE-2022-37454."""
> ++        h = hashlib.sha3_224()
> ++        h.update(b'\x01')
> ++        h.update(b'\x01'*0xffff_ffff)
> ++        self.assertEqual(h.hexdigest(), '80762e8ce6700f114fec0f621fd97c4b9c00147fa052215294cceeed')
> ++
> +     # use the three examples from Federal Information Processing Standards
> +     # Publication 180-1, Secure Hash Standard,  1995 April 17
> +     # http://www.itl.nist.gov/div897/pubs/fip180-1.htm
> +diff --git a/Misc/NEWS.d/next/Security/2022-10-21-13-31-47.gh-issue-98517.SXXGfV.rst b/Misc/NEWS.d/next/Security/2022-10-21-13-31-47.gh-issue-98517.SXXGfV.rst
> +new file mode 100644
> +index 000000000000..2d23a6ad93c7
> +--- /dev/null
> ++++ b/Misc/NEWS.d/next/Security/2022-10-21-13-31-47.gh-issue-98517.SXXGfV.rst
> +@@ -0,0 +1 @@
> ++Port XKCP's fix for the buffer overflows in SHA-3 (CVE-2022-37454).
> +diff --git a/Modules/_sha3/kcp/KeccakSponge.inc b/Modules/_sha3/kcp/KeccakSponge.inc
> +index e10739deafa8..cf92e4db4d36 100644
> +--- a/Modules/_sha3/kcp/KeccakSponge.inc
> ++++ b/Modules/_sha3/kcp/KeccakSponge.inc
> +@@ -171,7 +171,7 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat
> +     i = 0;
> +     curData = data;
> +     while(i < dataByteLen) {
> +-        if ((instance->byteIOIndex == 0) && (dataByteLen >= (i + rateInBytes))) {
> ++        if ((instance->byteIOIndex == 0) && (dataByteLen-i >= rateInBytes)) {
> + #ifdef SnP_FastLoop_Absorb
> +             /* processing full blocks first */
> + 
> +@@ -199,10 +199,10 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat
> +         }
> +         else {
> +             /* normal lane: using the message queue */
> +-
> +-            partialBlock = (unsigned int)(dataByteLen - i);
> +-            if (partialBlock+instance->byteIOIndex > rateInBytes)
> ++            if (dataByteLen-i > rateInBytes-instance->byteIOIndex)
> +                 partialBlock = rateInBytes-instance->byteIOIndex;
> ++            else
> ++                partialBlock = (unsigned int)(dataByteLen - i);
> +             #ifdef KeccakReference
> +             displayBytes(1, "Block to be absorbed (part)", curData, partialBlock);
> +             #endif
> +@@ -281,7 +281,7 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte
> +     i = 0;
> +     curData = data;
> +     while(i < dataByteLen) {
> +-        if ((instance->byteIOIndex == rateInBytes) && (dataByteLen >= (i + rateInBytes))) {
> ++        if ((instance->byteIOIndex == rateInBytes) && (dataByteLen-i >= rateInBytes)) {
> +             for(j=dataByteLen-i; j>=rateInBytes; j-=rateInBytes) {
> +                 SnP_Permute(instance->state);
> +                 SnP_ExtractBytes(instance->state, curData, 0, rateInBytes);
> +@@ -299,9 +299,10 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte
> +                 SnP_Permute(instance->state);
> +                 instance->byteIOIndex = 0;
> +             }
> +-            partialBlock = (unsigned int)(dataByteLen - i);
> +-            if (partialBlock+instance->byteIOIndex > rateInBytes)
> ++            if (dataByteLen-i > rateInBytes-instance->byteIOIndex)
> +                 partialBlock = rateInBytes-instance->byteIOIndex;
> ++            else
> ++                partialBlock = (unsigned int)(dataByteLen - i);
> +             i += partialBlock;
> + 
> +             SnP_ExtractBytes(instance->state, curData, instance->byteIOIndex, partialBlock);
> diff --git a/package/python3/python3.mk b/package/python3/python3.mk
> index 2e17104102..b291fcf582 100644
> --- a/package/python3/python3.mk
> +++ b/package/python3/python3.mk
> @@ -16,6 +16,9 @@ PYTHON3_CPE_ID_PRODUCT = python
>  # 0033-3.11-gh-98433-Fix-quadratic-time-idna-decoding.-GH-9.patch
>  PYTHON3_IGNORE_CVES += CVE-2022-45061
>  
> +# 0034-3-10-gh-98517-Fix-buffer-overflows-in-_sha3-module.patch
> +PYTHON3_IGNORE_CVES += CVE-2022-37454
> +
>  # This host Python is installed in $(HOST_DIR), as it is needed when
>  # cross-compiling third-party Python modules.
>  
> -- 
> 2.35.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  reply	other threads:[~2022-12-04 11:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-03 22:41 [Buildroot] [PATCH 1/1] package/python3: fix CVE-2022-37454 Fabrice Fontaine
2022-12-04 11:51 ` Yann E. MORIN [this message]
2022-12-08  9:57 ` Peter Korsgaard

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=20221204115147.GM3302@scaer \
    --to=yann.morin.1998@free.fr \
    --cc=asafka7@gmail.com \
    --cc=buildroot@buildroot.org \
    --cc=fontaine.fabrice@gmail.com \
    --cc=thomas.petazzoni@bootlin.com \
    /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.