Skip to content

[CVE-2026-6100] Possible UAF in {LZMA,BZ2,_Zlib}Decompressor #148395

Closed

Activity

  1. added 2 commits that reference this issue on Apr 13, 2026
  2. Xentraxx commented on Apr 14, 2026

    @Xentraxx

    Hey guys! I can see that building from source would already include the mitigation.
    However, I am not sure about the mechanisms of the python install manager or other installation methods.
    https://www.python.org/downloads/release/pymanager-252/

    The Python install manager will automatically update within a day of an update being released.

    Does that mean we have to wait for 3.14.5 or is a job running nightly, building from source, so the pymanager will distribute the patch already/tomorrow for 3.12?

  3. Eclips4 commented on Apr 14, 2026

    @Eclips4
    Member

    Hi! You'll have to wait for the 3.14.5 release or the 3.12.14.

  4. StanFromIreland commented on Apr 14, 2026

    @StanFromIreland
    MemberAuthor

    Also, note that the 3.12 has not landed yet, it is waiting for the RM.

  5. oscilloscode commented on Apr 16, 2026

    @oscilloscode

    Hi! You'll have to wait for the 3.14.5 release or the 3.12.14.

    Is there a specific release rhythm for patch releases (it seems like it's around once a month) ? I read somewhere that they can be released faster if the issue is critical enough. Is there a chance that this will happen sooner, as this received a CVSS score of 9.1?

  6. StanFromIreland commented on Apr 16, 2026

    @StanFromIreland
    MemberAuthor

    See the linked PEP for each version in this table, it lists planned upcoming release dates. There will be no expedited release for this vulnerability.

  7. Xentraxx commented on Apr 16, 2026

    @Xentraxx

    Hi! You'll have to wait for the 3.14.5 release or the 3.12.14.

    Is there a specific release rhythm for patch releases (it seems like it's around once a month) ? I read somewhere that they can be released faster if the issue is critical enough. Is there a chance that this will happen sooner, as this received a CVSS score of 9.1?

    It's actually fairly unlikely that the affected implementation is present anywhere, more so that it is present in an environment where the exploitation would benefit the attacker. So I wouldn't worry too much.

    Especially as the bug can easily be fixed by adjusting the implementation. So other projects can already just initialise a new instance of decompress() and they won't be affected anymore.

    At least that's my understanding from looking into it. Please correct me if I'm wrong.

  8. frenzymadness commented on Apr 17, 2026

    @frenzymadness
    Contributor

    I've been playing with this issue for a couple of hours now, and I have a question: What's gonna happen, if this memory allocation:

    tmp = PyMem_Realloc(d->input_buffer, new_size);
    if (tmp == NULL) {
    PyErr_SetNone(PyExc_MemoryError);
    return NULL;
    }

    fails? Shouldn't it also lead to the error label or at least clear the bzs->next_in pointer here? I ran into it when I tried to use _testcapi.set_nomemoty with different arguments to hit the issue on different versions of Python where the buffering is implemented with different levels of optimizations.

  9. vstinner commented on Apr 17, 2026

    @vstinner
    Member

    Shouldn't it also lead to the error label or at least clear the bzs->next_in pointer here?

    The current code looks correct to me, but I'm not a bz2 expert.

    At least, the following script behaves the same with and without error injection.

    import _testcapi
    import bz2
    
    INJECT_ERROR = True
    
    data = bz2.compress(b'x' * 1024)
    data2 = bz2.compress(b'y' * 1024)
    decompressor = bz2.BZ2Decompressor()
    
    res = decompressor.decompress(data, 1)
    print("call #1", res)
    assert res == b'x'
    
    if INJECT_ERROR:
        try:
            try:
                print("call #2...")
                _testcapi.set_nomemory(0,1)
                decompressor.decompress(data2)
            finally:
                _testcapi.remove_mem_hooks()
        except MemoryError:
            print("*MemoryError*")
        else:
            raise Exception
    
    res = decompressor.decompress(data2)
    print("call #3", res)
    assert res == b'x' * 1023

    By the way, I'm surprised that the argument of the 3rd call (data2) seems to be ignored. But I don't know bz2 API, so I don't know if it's expected or not.

  10. added a commit that references this issue on Apr 25, 2026
  11. geomcegme commented on Jun 12, 2026

    @geomcegme

    Hi, is there any update on the expected release of 3.12.14?

    We have several vulnerability tickets open for this that have been pending for around two months, and we’re currently unable to close them or provide mitigation guidance without the update.

    Any visibility on timeline would be greatly appreciated. Thanks.

  12. StanFromIreland commented on Jun 12, 2026

    @StanFromIreland
    MemberAuthor

    Python 3.12 releases are provided on an as-needed basis, at the Release Manager's discretion.

    You'll have to apply patches for the vulnerabilities you are affected by.

  13. added 2 commits that reference this issue on Jul 26, 2026
  14. added a commit that references this issue on Aug 4, 2026
  15. added 3 commits that reference this issue on Sep 18, 2026
  16. added 3 commits that reference this issue on Oct 1, 2026
  17. added a commit that references this issue on Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions