* [Buildroot] [PATCH 1/1] package/python3: fix CVE-2022-37454
@ 2022-12-03 22:41 Fabrice Fontaine
2022-12-04 11:51 ` Yann E. MORIN
2022-12-08 9:57 ` Peter Korsgaard
0 siblings, 2 replies; 3+ messages in thread
From: Fabrice Fontaine @ 2022-12-03 22:41 UTC (permalink / raw)
To: buildroot; +Cc: Fabrice Fontaine, Thomas Petazzoni, Asaf Kahlon
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>
---
...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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/python3: fix CVE-2022-37454
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
2022-12-08 9:57 ` Peter Korsgaard
1 sibling, 0 replies; 3+ messages in thread
From: Yann E. MORIN @ 2022-12-04 11:51 UTC (permalink / raw)
To: Fabrice Fontaine; +Cc: Asaf Kahlon, Thomas Petazzoni, buildroot
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/python3: fix CVE-2022-37454
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
@ 2022-12-08 9:57 ` Peter Korsgaard
1 sibling, 0 replies; 3+ messages in thread
From: Peter Korsgaard @ 2022-12-08 9:57 UTC (permalink / raw)
To: Fabrice Fontaine; +Cc: Asaf Kahlon, Thomas Petazzoni, buildroot
>>>>> "Fabrice" == Fabrice Fontaine <fontaine.fabrice@gmail.com> writes:
> 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>
Committed to 2022.08.x and 2022.02.x, thanks.
--
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-12-08 9:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2022-12-08 9:57 ` Peter Korsgaard
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.